{"version":3,"sources":["./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/table.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/table.js","./node_modules/@progress/kendo-drawing/dist/es2015/util.js","./src/app/modules/shared/components/popover-view/popover-view-ref.ts","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/portal.js","./node_modules/@firebase/component/dist/index.esm.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/support.js","./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-attribute.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/collections.js","./node_modules/rxjs/_esm2015/internal/operators/concatAll.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/dialog.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/layout.js","./node_modules/@progress/kendo-drawing/dist/es2015/main.js","./node_modules/rxjs/_esm2015/internal/operators/takeUntil.js","./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/limit-value.js","./src/app/modules/shared/components/popover-view/popover-view.service.ts","./node_modules/rxjs/_esm2015/internal/observable/zip.js","./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/constants.js","./node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js","./node_modules/rxjs/_esm2015/internal/BehaviorSubject.js","./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","./node_modules/rxjs/_esm2015/internal/config.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-root.js","./node_modules/@firebase/app/node_modules/tslib/tslib.es6.js","./node_modules/rxjs/_esm2015/internal/operators/skipWhile.js","./node_modules/rxjs/_esm2015/internal/util/isDate.js","./node_modules/rxjs/_esm2015/internal/operators/delay.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/Action.js","./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/is-transparent.js","(webpack)/buildin/harmony-module.js","./node_modules/rxjs/_esm2015/internal/operators/audit.js","./node_modules/rxjs/_esm2015/internal/operators/auditTime.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align-point.js","./node_modules/@progress/kendo-popup-common/dist/es2015/owner-document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window.js","./node_modules/@progress/kendo-popup-common/dist/es2015/document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scrollbar-width.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window-viewport.js","./node_modules/@progress/kendo-popup-common/dist/es2015/bounding-offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parents.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/element-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position-with-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/collision.js","./node_modules/@progress/kendo-popup-common/dist/es2015/restrict-to-view.js","./node_modules/@progress/kendo-popup-common/dist/es2015/siblings.js","./node_modules/@progress/kendo-angular-popup/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-popup-common/dist/es2015/add-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align.js","./node_modules/@progress/kendo-popup-common/dist/es2015/remove-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/sibling-container.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/stops-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient.js","./node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/linear-gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/drawing.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersections-count.js","./node_modules/rxjs/_esm2015/internal/operators/mergeMap.js","./node_modules/@progress/kendo-drawing/dist/es2015/search/shapes-quad-tree.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/multi-path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/slider.js","./node_modules/rxjs/_esm2015/internal/observable/never.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/is-out-of-end-point.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/calculate-curve-at.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/to-cubic-polynomial.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/complex-number.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/solve-cubic-equation.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/has-roots-in-range.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/segment.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/curve-intersections-count.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/throttle.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/rad.js","./node_modules/@firebase/database/dist/index.esm.js","./node_modules/@telerik/kendo-draggable/dist/es2015/main.js","./node_modules/@progress/kendo-angular-common/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@firebase/auth/dist/auth.esm.js","./node_modules/rxjs/_esm2015/internal/util/isObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js","./node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js","./node_modules/rxjs/_esm2015/internal/util/isIterable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/_esm2015/internal/util/Immediate.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/asap.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapScheduler.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/linear-gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/definition-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/has-observers.js","./node_modules/rxjs/_esm2015/internal/Subscriber.js","./node_modules/@angular/cdk/fesm2015/coercion.js","./node_modules/rxjs/_esm2015/internal/util/canReportError.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-style.js","./node_modules/angular2-text-mask/__ivy_ngcc__/dist/angular2TextMask.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/surface.js","./node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/deg.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/value-or-default.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/bind-events.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-align.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/geometry-elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/path.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/unbind-events.js","./node_modules/@progress/pako-esm/dist/pako-esm2015.js","./src/environments/environment.ts","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/circle.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/image.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/merge-sort.js","./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/util.js","./node_modules/rxjs/_esm2015/internal/observable/from.js","./node_modules/rxjs/_esm2015/internal/scheduler/async.js","./node_modules/rxjs/_esm2015/internal/util/isArray.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-padding.js","./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/sort.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/definition-id.js","./node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js","./node_modules/rxjs/_esm2015/internal/observable/empty.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/last.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap-elements.js","./node_modules/rxjs/_esm2015/internal/util/not.js","./node_modules/@angular/cdk/fesm2015/cdk.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/core.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/animation-frame.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/circle-node.js","./node_modules/text-mask-core/dist/textMaskCore.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/autocomplete.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/bottom-sheet.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/chips.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/accordion.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/expansion.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/grid-list.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/slide-toggle.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/toolbar.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/tree.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/tree.js","./src/app/modules/material/material.module.ts","./src/app/modules/shared/components/loader-foto/prelooder-photo/prelooder-photo.component.html","./src/app/modules/shared/components/loader-foto/prelooder-photo/prelooder-photo.component.ts","./src/app/modules/shared/components/sign-up/sign-up.component.html","./src/app/modules/shared/components/sign-up/sign-up.component.ts","./src/app/modules/shared/components/log-in/log-in.component.html","./src/app/modules/shared/components/log-in/log-in.component.ts","./src/app/modules/shared/models/State.ts","./src/app/modules/shared/components/start-trading-dialog/start-trading-dialog.component.ts","./src/app/modules/shared/components/start-trading-dialog/start-trading-dialog.component.html","./src/app/modules/shared/components/datepicker-overview/datepicker-overview.component.html","./src/app/modules/shared/components/datepicker-overview/datepicker-overview.component.ts","./src/app/modules/shared/components/loader-foto/loader-foto.component.html","./src/app/modules/shared/components/loader-foto/loader-foto.component.ts","./src/app/modules/shared/components/individuals/individuals.component.html","./src/app/modules/shared/components/individuals/individuals.component.ts","./src/app/modules/shared/components/institutions/institutions.component.html","./src/app/modules/shared/components/institutions/institutions.component.ts","./src/app/modules/shared/components/detail-info/detail-info.component.html","./src/app/modules/shared/components/detail-info/detail-info.component.ts","./src/app/modules/shared/components/settings/settings.component.html","./src/app/modules/shared/components/settings/settings.component.ts","./src/app/modules/shared/components/email-verified/email-verified.component.html","./src/app/modules/shared/components/email-verified/email-verified.component.ts","./src/app/services/can-activate-login.guard.ts","./src/app/services/can-active-detail-info.guard.ts","./src/app/modules/shared/shared.module.ts","./node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-stop-node.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/keycodes.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-stack.js","./node_modules/rxjs/_esm2015/internal/operators/takeWhile.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/observers.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/fit.js","./node_modules/rxjs/_esm2015/internal/observable/concat.js","./node_modules/rxjs/_esm2015/internal/Observable.js","./node_modules/rxjs/_esm2015/internal/util/toSubscriber.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close-or-less.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersection.js","./node_modules/@firebase/webchannel-wrapper/dist/index.esm.js","./node_modules/@firebase/firestore/dist/esm5/prebuilt-011dd513-2a18b0ac.js","./node_modules/@firebase/firestore/dist/esm5/index.js","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-firestore.js","./node_modules/rxjs/_esm2015/internal/util/isArrayLike.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-element.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js","./node_modules/@progress/kendo-angular-l10n/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-offset.js","./node_modules/rxjs/_esm2015/internal/operators/take.js","./node_modules/rxjs/_esm2015/internal/operators/catchError.js","./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","./node_modules/rxjs/_esm2015/internal/operators/startWith.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-scale.js","./src/app/modules/shared/components/feedback/feedback.component.ts","./src/app/modules/shared/components/feedback/feedback.component.html","./node_modules/firebase/app/dist/index.esm.js","./node_modules/@angular/service-worker/__ivy_ngcc__/fesm2015/service-worker.js","./node_modules/rxjs/_esm2015/internal/operators/publish.js","./node_modules/@babel/runtime/helpers/esm/inherits.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/rect.js","./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/save-as.js","./src/app/modules/shared/directives/disable-control.directive.ts","./node_modules/rxjs/_esm2015/internal/operators/debounceTime.js","./node_modules/rxjs/_esm2015/internal/operators/scan.js","./node_modules/rxjs/_esm2015/internal/util/noop.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/class.js","./node_modules/@babel/runtime/helpers/esm/createSuper.js","./node_modules/rxjs/_esm2015/internal/observable/of.js","./node_modules/rxjs/_esm2015/internal/symbol/iterator.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/ellipse-extreme-angles.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/paginator.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/list.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/utils.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/ttf.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/deflate.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/core.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/icon.js","./node_modules/rxjs/_esm2015/internal/util/hostReportError.js","./node_modules/rxjs/_esm2015/internal/observable/defer.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-geometry.js","./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/text-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation-factory.js","./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","./node_modules/rxjs/_esm2015/internal/observable/timer.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/options-store.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-options.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient-stop.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/color.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/radio.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/tooltip.js","./src/app/services/window.service.ts","./node_modules/@progress/kendo-drawing/dist/es2015/search/quad-node.js","./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/animations.js","./node_modules/@angular/animations/__ivy_ngcc__/fesm2015/browser.js","./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js","./node_modules/@babel/runtime/helpers/esm/construct.js","./node_modules/@babel/runtime/helpers/esm/get.js","./node_modules/@babel/runtime/helpers/esm/superPropBase.js","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-functions.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/round.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/rect-node.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/menu.js","./node_modules/rxjs/_esm2015/internal/util/subscribeTo.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js","./node_modules/rxjs/_esm2015/internal/util/identity.js","./node_modules/rxjs/_esm2015/internal/operators/first.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/paintable.js","./node_modules/@babel/runtime/helpers/esm/toArray.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/rect-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/named-colors.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/arc-node.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/badge.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-utf.js","./node_modules/rxjs/_esm2015/internal/operators/shareReplay.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/circle.js","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-auth.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/path-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/constants.js","./node_modules/rxjs/_esm2015/internal/observable/merge.js","./node_modules/@firebase/storage/dist/index.esm.js","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-storage.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/easing-functions.js","./node_modules/@progress/kendo-drawing/dist/es2015/animations/animation.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/defined.js","./src/app/modules/trade-blotter/services/ReferenceData.ts","./src/app/modules/trade-blotter/services/ReferenceDataModel.ts","./src/app/modules/trade-blotter/services/ref-data-lookup.service.ts","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/path-parser.js","./node_modules/rxjs/_esm2015/internal/operators/throttle.js","./node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","./node_modules/rxjs/_esm2015/internal/operators/bufferCount.js","./node_modules/@progress/kendo-angular-dropdowns/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/operators/partition.js","./node_modules/@progress/kendo-angular-inputs/node_modules/@progress/kendo-common/dist/es2015/util.js","./node_modules/@progress/kendo-angular-inputs/node_modules/@progress/kendo-common/dist/es2015/support.js","./node_modules/@progress/kendo-angular-inputs/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-angular-buttons/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-drawing/dist/es2015/html/core.js","./node_modules/@progress/kendo-angular-pdf-export/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-ooxml/dist/es2015/services/intl-service.js","./node_modules/@progress/kendo-ooxml/dist/es2015/ooxml.js","./node_modules/@progress/kendo-angular-excel-export/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-angular-grid/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/Notification.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/card.js","./node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/rect.js","./node_modules/rxjs/_esm2015/internal/Subject.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/progress-spinner.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/element.js","./node_modules/rxjs/_esm2015/internal/operators/mapTo.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/sidenav.js","./node_modules/@angular/flex-layout/__ivy_ngcc__/esm2015/flex.js","./node_modules/rxjs/_esm2015/internal/util/isObject.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/create-stack-elements.js","./src/app/modules/shared/components/popover-view/popover-view.token.ts","./node_modules/rxjs/_esm2015/internal/Scheduler.js","./node_modules/rxjs/_esm2015/internal/util/isNumeric.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-all-attributes.js","./node_modules/@angular/flex-layout/__ivy_ngcc__/esm2015/grid.js","./node_modules/@angular/flex-layout/__ivy_ngcc__/esm2015/flex-layout.js","./node_modules/rxjs/_esm2015/internal/SubjectSubscription.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/root-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/promise-all.js","./node_modules/@progress/kendo-common/dist/es2015/util.js","./node_modules/@progress/kendo-common/dist/es2015/support.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/field-list.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/getter.js","./src/app/services/router-outlet.service.ts","./node_modules/rxjs/_esm2015/internal/InnerSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/size.js","./node_modules/@progress/kendo-date-math/dist/es2015/clone-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/adjust-dst.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-days.js","./node_modules/@progress/kendo-date-math/dist/es2015/create-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/get-date.js","./node_modules/@progress/kendo-date-math/dist/es2015/is-equal.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-day-of-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-months.js","./node_modules/@progress/kendo-date-math/dist/es2015/set-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-years.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-decades.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-centuries.js","./node_modules/@progress/kendo-date-math/dist/es2015/normalize-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-decade-of-century.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-decade-of-century.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-year-of-decade.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-centuries.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-year-of-decade.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-decades.js","./node_modules/@progress/kendo-date-math/dist/es2015/add-weeks.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-day-of-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/direction.enum.js","./node_modules/@progress/kendo-date-math/dist/es2015/day-of-week.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-months.js","./node_modules/@progress/kendo-date-math/dist/es2015/set-month.js","./node_modules/@progress/kendo-date-math/dist/es2015/first-month-of-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/last-month-of-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/duration-in-years.js","./node_modules/@progress/kendo-date-math/dist/es2015/day.enum.js","./node_modules/@progress/kendo-date-math/dist/es2015/week-in-year.js","./node_modules/@progress/kendo-date-math/dist/es2015/prev-day-of-week.js","./node_modules/@progress/kendo-date-math/dist/es2015/constants.js","./node_modules/@progress/kendo-angular-dateinputs/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/operators/pairwise.js","./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","./node_modules/rxjs/_esm2015/internal/operators/switchMapTo.js","./src/app/modules/shared/components/popover-view/popover/popover.component.ts","./src/app/modules/shared/components/popover-view/popover/popover.component.html","./node_modules/rxjs/_esm2015/internal/operators/mergeAll.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/template.js","./node_modules/rxjs/_esm2015/internal/operators/concatMap.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/arc-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/observable.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/checkbox.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/button.js","./src/app/modules/shared/shared.service.ts","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-accessors.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/progress-bar.js","./node_modules/rxjs/_esm2015/internal/util/isPromise.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/bidi.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/arabic-to-roman.js","./node_modules/rxjs/_esm2015/internal/observable/forkJoin.js","./src/$_lazy_route_resource lazy namespace object","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/select.js","./src/app/modules/trade-blotter/services/ref-data.service.ts","./node_modules/rxjs/_esm2015/internal/operators/publishReplay.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/event-coordinates.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/snack-bar.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/create-promise.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start-reverse.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/layout.js","./node_modules/rxjs/_esm2015/internal/operators/switchMap.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-group.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/export-svg.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/divider.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close.js","./node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","./node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/traversable.js","./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-wrap.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/clip-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node-map.js","./node_modules/rxjs/_esm2015/internal/Observer.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transformation.js","./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/now.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/utils/render-path.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/append.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-base64.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/datepicker.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/text-field.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/image-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/radial-gradient-node.js","./node_modules/rxjs/_esm2015/internal/observable/combineLatest.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/text-metrics.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/button-toggle.js","./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js","./node_modules/rxjs/_esm2015/internal/ReplaySubject.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface-cursor.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface.js","./node_modules/rxjs/_esm2015/internal/symbol/observable.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/lru-cache.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/form-field.js","./node_modules/@progress/kendo-angular-intl/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/text-mask-addons/dist/textMaskAddons.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/log-to-console.js","./node_modules/rxjs/_esm2015/internal/observable/interval.js","./node_modules/rxjs/_esm2015/internal/OuterSubscriber.js","./src/app/services/auth.service.ts","./node_modules/rxjs/_esm2015/internal/operators/map.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/point.js","./node_modules/rxjs/_esm2015/internal/util/pipe.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/surface.js","./node_modules/@babel/runtime/helpers/esm/typeof.js","./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry.js","./node_modules/rxjs/_esm2015/internal/util/isFunction.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/platform.js","./node_modules/rxjs/_esm2015/internal/operators/finalize.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js","./src/app/services/is-user-approved.guard.ts","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/node.js","./src/app/services/dis-activete-login.guard.ts","./node_modules/rxjs/_esm2015/internal/operators/multicast.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-styles.js","./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/parse-color.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/measure-text.js","./node_modules/@progress/kendo-drawing/dist/es2015/surface-factory.js","./node_modules/@angular/flex-layout/__ivy_ngcc__/esm2015/core.js","./node_modules/rxjs/_esm2015/internal/operators/filter.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/translate-to-point.js","./node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js","./node_modules/rxjs/_esm2015/internal/operators/observeOn.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/multi-path-node.js","./node_modules/@firebase/logger/dist/index.esm.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/group-node.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/input.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/measurable.js","./node_modules/@firebase/util/dist/index.esm.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/group.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/queue.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js","./node_modules/rxjs/_esm2015/internal/Subscription.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/text.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/overlay.js","./node_modules/@babel/runtime/helpers/esm/defineProperty.js","./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/shape-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/parse-path.js","./node_modules/@progress/kendo-charts/dist/es2015/common/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/add-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/remove-class.js","./node_modules/@progress/kendo-charts/dist/es2015/common/align-path-to-pixel.js","./node_modules/@progress/kendo-charts/dist/es2015/common/clockwise.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-string.js","./node_modules/@progress/kendo-charts/dist/es2015/common/convertable-to-number.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-function.js","./node_modules/@progress/kendo-charts/dist/es2015/common/deep-extend.js","./node_modules/@progress/kendo-charts/dist/es2015/common/is-object.js","./node_modules/@progress/kendo-charts/dist/es2015/common/style-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-styles.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-spacing.js","./node_modules/@progress/kendo-charts/dist/es2015/services/template-service.js","./node_modules/@progress/kendo-charts/dist/es2015/common/get-template.js","./node_modules/@progress/kendo-charts/dist/es2015/common/getter.js","./node_modules/@progress/kendo-charts/dist/es2015/common/grep.js","./node_modules/@progress/kendo-charts/dist/es2015/common/has-classes.js","./node_modules/@progress/kendo-charts/dist/es2015/common/hash-map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/in-array.js","./node_modules/@progress/kendo-charts/dist/es2015/common/interpolate-value.js","./node_modules/@progress/kendo-charts/dist/es2015/common/instance-observer.js","./node_modules/@progress/kendo-charts/dist/es2015/common/map.js","./node_modules/@progress/kendo-charts/dist/es2015/common/mousewheel-delta.js","./node_modules/@progress/kendo-charts/dist/es2015/drawing-utils.js","./node_modules/@progress/kendo-charts/dist/es2015/common/font-loader.js","./node_modules/@progress/kendo-charts/dist/es2015/common/set-default-options.js","./node_modules/@progress/kendo-charts/dist/es2015/common/sparse-array-limits.js","./node_modules/@progress/kendo-charts/dist/es2015/common/find.js","./node_modules/@progress/kendo-charts/dist/es2015/common/element-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/common/auto-text-color.js","./node_modules/@progress/kendo-charts/dist/es2015/common/create-hash-set.js","./node_modules/@progress/kendo-charts/dist/es2015/common/default-error-handler.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-major-unit.js","./node_modules/@progress/kendo-charts/dist/es2015/core/point.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/ring.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-builder.js","./node_modules/@progress/kendo-charts/dist/es2015/core/chart-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/box-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/shape-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/gradients.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/box-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/core/root-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/float-element.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/rect-to-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/text-box.js","./node_modules/@progress/kendo-charts/dist/es2015/core/title.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis-label.js","./node_modules/@progress/kendo-charts/dist/es2015/core/note.js","./node_modules/@progress/kendo-charts/dist/es2015/services/dom-events-builder.js","./node_modules/@progress/kendo-charts/dist/es2015/services/intl-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/format-service.js","./node_modules/@progress/kendo-charts/dist/es2015/services/chart-service.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-tick.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-grid-line.js","./node_modules/@progress/kendo-charts/dist/es2015/core/axis.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/absolute-date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-ticks.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/start-of-week.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/floor-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/ceil-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-comparer.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-diff.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-time.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-equals.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-index.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/duration.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-date.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-dates.js","./node_modules/@progress/kendo-charts/dist/es2015/date-utils/first-day.js","./node_modules/@progress/kendo-charts/dist/es2015/core/category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/floor.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/ceil.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/limit-coordinate.js","./node_modules/@progress/kendo-charts/dist/es2015/core/numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-min.js","./node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-max.js","./node_modules/@progress/kendo-charts/dist/es2015/core/date-value-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/grid-lines-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-category-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/polar-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/mixins/radar-numeric-axis-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-numeric-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/radar-logarithmic-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/core/curve-processor.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/find-axis-by-name.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/count-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/series-binder.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-range-calculator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-bar-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/categorical-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/eval-options.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/categories-count.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/categorical-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/point-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/note-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/spline-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/line-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/clip-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/any-has-z-index.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/clip-animation-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/step-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/spline-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/axis-group-range-tracker.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-label.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-gradient-overlay.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/stack-wrap.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/are-numbers.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/vertical-box-plot.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/scatter-error-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-value.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/target.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/base-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart-container.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pane.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/append-if-not-null.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/segment-visible.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/bind-segments.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/equals-ignore-case.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/filter-series-by-type.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-date-field.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/is-date-axis.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/single-item-or-array.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/utils/create-out-of-range-points.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/plotarea-events-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/series-aggregator.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/default-aggregates.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-line-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/spline-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/step-range-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/categorical-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/highlight.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/accept-key.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/to-chart-axis-ranges.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/pannable.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/zoom-selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/mousewheel-zoom.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-item.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-factory.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/selection.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bar-chart-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bubble-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/fade-in-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/animations/pie-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/xy-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/pie-chart-mixin.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/pie-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/donut-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea-base.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-scatter-chart/polar-scatter-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-line-chart/polar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/spline-polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-line-chart/radar-line-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/spline-radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-cluster-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-stack-layout.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-bar-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/radar-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-segment.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/funnel-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-point.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/heatmap-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/heatmap-chart/color-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/heatmap-plotarea.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/register-charts.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/chart.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/shared-tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/sparkline/sparkline.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/fade-out-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator-hint.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/stock/stock-chart.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/pad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/build-label-element.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/get-range.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/unpad.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-gauge.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/arc-scale.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer-animation.js","./node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code11.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code39-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code93-extended.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/postnet.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/code128.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/msi.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean13.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/ean8.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/encodings/main.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/surface-size.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode.js","./node_modules/@progress/kendo-charts/dist/es2015/barcode/barcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/free-cell-visitor.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding-result.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/iso-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoding.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/qr-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/alpha-numeric-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/byte-data-mode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/data-modes/data-mode-instances.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/encodings/version-codewords.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode.js","./node_modules/@progress/kendo-charts/dist/es2015/qrcode/qrcode-validator.js","./node_modules/@progress/kendo-charts/dist/es2015/map/datums.js","./node_modules/@progress/kendo-charts/dist/es2015/map/location.js","./node_modules/@progress/kendo-charts/dist/es2015/map/crs.js","./node_modules/@progress/kendo-charts/dist/es2015/map/utils.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/observable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/attribution.js","./node_modules/@progress/kendo-charts/dist/es2015/map/navigator.js","./node_modules/@progress/kendo-charts/dist/es2015/common/keys.js","./node_modules/@progress/kendo-charts/dist/es2015/map/zoom.js","./node_modules/@progress/kendo-charts/dist/es2015/map/extent.js","./node_modules/@progress/kendo-charts/dist/es2015/map/constants.js","./node_modules/@progress/kendo-charts/dist/es2015/map/tooltip/tooltip.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/layer.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/tile.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/draggable.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/shape.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/bubble.js","./node_modules/@progress/kendo-charts/dist/es2015/map/layers/marker.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/fx.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/user-events.js","./node_modules/@progress/kendo-charts/dist/es2015/map/scroller/scroller.js","./node_modules/@progress/kendo-charts/dist/es2015/services/map-service.js","./node_modules/@progress/kendo-charts/dist/es2015/map/map.js","./node_modules/@progress/kendo-charts/dist/es2015/chart/base-theme.js","./node_modules/@progress/kendo-angular-charts/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/util/EmptyError.js","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-svg.js","./node_modules/rxjs/_esm2015/internal/observable/SubscribeOnObservable.js","./node_modules/rxjs/_esm2015/internal/operators/subscribeOn.js","./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js","./node_modules/rxjs/_esm2015/internal/operators/takeLast.js","./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js","./node_modules/rxjs/_esm2015/internal/operators/last.js","./node_modules/rxjs/_esm2015/internal/operators/combineAll.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/a11y.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transform.js","./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/node-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/export-image.js","./node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-elements.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/circle-node.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/image-node.js","./node_modules/rxjs/_esm2015/internal/operators/tap.js","./node_modules/@babel/runtime/helpers/esm/createClass.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/scrolling.js","./node_modules/rxjs/_esm2015/internal/operators/share.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics.js","./node_modules/@progress/kendo-drawing/dist/es2015/svg/root-node.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/tabs.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-clippend-bounding-box.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/element-size.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes.js","./node_modules/rxjs/_esm2015/internal/operators/refCount.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/to-matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-bounding-box.js","./node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/stepper.js","./node_modules/@angular/material/__ivy_ngcc__/fesm2015/stepper.js","./node_modules/@progress/kendo-drawing/dist/es2015/canvas/group-node.js","./node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/_esm2015/internal/observable/fromEvent.js","./node_modules/rxjs/_esm2015/internal/observable/fromArray.js","./node_modules/hammerjs/hammer.js","./node_modules/@progress/kendo-data-query/dist/es2015/utils.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-descriptor.interface.js","./node_modules/@progress/kendo-data-query/dist/es2015/funcs.js","./node_modules/@progress/kendo-data-query/dist/es2015/filter-serialization.common.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/accessor.js","./node_modules/@progress/kendo-data-query/dist/es2015/mvc/operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/mvc/deserialization.js","./node_modules/@progress/kendo-data-query/dist/es2015/sorting/sort-array.operator.js","./node_modules/@progress/kendo-data-query/dist/es2015/transducers.js","./node_modules/@progress/kendo-data-query/dist/es2015/grouping/aggregate.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-no-eval.js","./node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-expression.factory.js","./node_modules/@progress/kendo-data-query/dist/es2015/grouping/group.operators.js","./node_modules/@progress/kendo-data-query/dist/es2015/sorting/sort.js","./node_modules/@progress/kendo-data-query/dist/es2015/array.operators.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/radial-gradient.js","./node_modules/rxjs/_esm2015/internal/util/isScheduler.js","./node_modules/rxjs/_esm2015/internal/observable/throwError.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-string.js","./node_modules/@telerik/kendo-intl/dist/es2015/errors.js","./node_modules/@telerik/kendo-intl/dist/es2015/error-details.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/info.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/default-data.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load-numbers.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load-dates.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/territory.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/set-data.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-field-name.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-format-names.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/parse-range-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/currency.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/first-day.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/weekend-range.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/number-symbols.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-negative-zero.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-currency-symbol.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/group-integer.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/is-currency-style.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/pad.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/round.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/standard-number-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/utils.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/custom-number-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-options.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/parse-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/format-string.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/date-pattern.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/date-name-type.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/format-names.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/format-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/time-utils.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/parse-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/split-date-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/format.js","./node_modules/@firebase/app/dist/index.esm.js","./node_modules/rxjs/_esm2015/internal/operators/skip.js","./src/app/services/lower-case-url-serializer .ts","./src/app/modules/shared/components/sidenav/sidenav.component.html","./src/app/modules/shared/components/sidenav/sidenav.component.ts","./src/app/modules/shared/components/nav-bar/nav-bar.component.html","./src/app/modules/shared/components/nav-bar/nav-bar.component.ts","./src/app/modules/shared/components/footer/footer.component.html","./src/app/modules/shared/components/footer/footer.component.ts","./src/app/modules/shared/components/header-search/header-search.component.ts","./src/app/modules/shared/components/header-search/header-search.component.html","./src/app/modules/shared/components/feedback/illustration/standing-boy/standing-boy.component.ts","./src/app/modules/shared/components/feedback/illustration/standing-boy/standing-boy.component.html","./src/app/modules/shared/components/feedback/feedback-dialog/feedback-dialog.component.ts","./src/app/modules/shared/components/feedback/feedback-dialog/feedback-dialog.component.html","./src/app/modules/shared/components/feedback/feedback-button/feedback-button.component.ts","./src/app/modules/shared/components/feedback/feedback-button/feedback-button.component.html","./src/app/app.component.html","./src/app/app.component.ts","./src/app/services/repository.service.ts","./node_modules/@angular/fire/__ivy_ngcc__/fesm2015/angular-fire-database.js","./src/app/services/app.initializer.ts","./src/app/services/is-user-admin.guard.ts","./src/app/app.module.ts","./src/app/services/can-activate-not-allowed.guard.ts","./src/main.ts","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-points.js","./node_modules/@angular/flex-layout/__ivy_ngcc__/esm2015/extended.js","./node_modules/rxjs/_esm2015/internal/operators/withLatestFrom.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/html-encode.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/base-node.js","./node_modules/rxjs/_esm2015/internal/innerSubscribe.js"],"names":["_c0","_c1","mixinHasStickyInput","base","args","_sticky","_hasStickyChanged","this","v","prevValue","hasStickyChanged","CDK_TABLE","CdkCellDef","template","ɵfac","t","ɵdir","type","selectors","CdkHeaderCellDef","CdkFooterCellDef","_CdkColumnDefBase","CdkColumnDef","_table","_stickyEnd","_name","name","_setNameInput","_columnCssClassName","cssClassFriendlyName","value","replace","_updateColumnCssClassName","contentQueries","rf","ctx","dirIndex","_t","cell","first","headerCell","footerCell","inputs","sticky","stickyEnd","features","provide","useExisting","columnDef","elementRef","classList","nativeElement","add","CdkHeaderCell","hostAttrs","CdkCell","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_ngZone","_currentSchedule","_destroyed","Subject","task","_createScheduleIfNeeded","push","next","complete","_getScheduleObservable","pipe","takeUntil","subscribe","length","schedule","isStable","from","Promise","resolve","undefined","onStable","take","ɵprov","token","factory","BaseRowDef","_differs","changes","_columnsDiffer","columns","currentValue","find","create","diff","column","_CdkHeaderRowDefBase","CdkHeaderRowDef","_CdkFooterRowDefBase","CdkFooterRowDef","CdkRowDef","when","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","CdkHeaderRow","ɵcmp","decls","vars","consts","directives","encapsulation","CdkRow","CdkNoDataRow","templateRef","STICKY_DIRECTIONS","_isNativeHtmlTable","_stickCellCss","direction","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_cachedCellWidths","rows","stickyDirections","elementsToClear","row","nodeType","ELEMENT_NODE","i","children","_scheduleStyleChanges","_removeStickyStyle","stickyStartStates","stickyEndStates","recalculateCellWidths","some","state","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","isRtl","start","end","_addStickyStyle","rowsToStick","stickyStates","position","slice","reverse","states","stickyHeights","elementsToStick","rowIndex","stickyHeight","Array","getBoundingClientRect","height","tableElement","tfoot","querySelector","element","style","dir","indexOf","zIndex","_getCalculatedZIndex","remove","dirValue","cssText","zIndexIncrements","top","bottom","left","right","firstRowCells","width","widths","positions","nextPosition","DataRowOutlet","viewContainer","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CdkTable","_changeDetectorRef","_elementRef","role","_dir","_document","_platform","_viewRepeater","_viewportRuler","_onDestroy","_columnDefsByName","Map","_customColumnDefs","Set","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","viewChange","BehaviorSubject","Number","MAX_VALUE","setAttribute","nodeName","_trackByFn","fn","_dataSource","dataSource","_switchDataSource","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","_i","dataRow","trackBy","dataIndex","data","change","_cacheRowDefs","_cacheColumnDefs","rowDefsChanged","_renderUpdatedColumns","_forceRenderHeaderRows","_forceRenderFooterRows","_rowDefs","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","clear","_noDataRowOutlet","_headerRowOutlet","_footerRowOutlet","disconnect","_renderRows","_getAllRenderRows","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","item","operation","context","_renderCellTemplateForItem","rowDef","forEachOperation","prevIndex","previousIndex","renderRow","_renderRow","$implicit","view","get","move","_updateRowIndexContext","forEachIdentityChange","_updateNoDataRow","delete","headerRowDef","footerRowDef","noDataRow","_customNoDataRow","headerRows","_getRenderedRows","thead","display","_headerRowDefs","map","def","_stickyStyler","clearStickyPositioning","stickRows","forEach","resetStickyChanged","footerRows","_footerRowDefs","updateStickyFooterContainer","dataRows","headerRow","_addStickyColumnStyles","footerRow","values","renderRows","prevCachedRenderRows","_data","renderRowsForData","_getRenderRowsForData","has","set","WeakMap","j","cache","_getRowDefs","cachedRenderRows","shift","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","filter","_defaultRowDef","columnsDiffReducer","acc","getColumnsDiff","dataColumnsChanged","reduce","headerColumnsChanged","footerColumnsChanged","unsubscribe","dataStream","connect","isObservable","isArray","of","updateStickyHeaderRowStyles","updateStickyFooterRowStyles","columnDefs","columnName","updateStickyColumns","rowOutlet","renderedRows","viewRef","rootNodes","rowDefs","multiTemplateDataRows","index","outlet","createEmbeddedView","_getCellTemplates","markForCheck","renderIndex","count","last","even","odd","columnId","extractCellTemplate","documentFragment","createDocumentFragment","tag","outlets","section","createElement","appendChild","stickyCheckReducer","d","isBrowser","items","_noDataRow","shouldShow","container","viewQuery","hostVars","hostBindings","fixedLayout","exportAs","useClass","ngContentSelectors","styles","array","concat","CdkTableModule","ɵmod","ɵinj","imports","MatTable","arguments","ɵMatTable_BaseFactory","MatCellDef","ɵMatCellDef_BaseFactory","MatHeaderCellDef","ɵMatHeaderCellDef_BaseFactory","MatColumnDef","ɵMatColumnDef_BaseFactory","MatHeaderCell","ɵMatHeaderCell_BaseFactory","MatCell","ɵMatCell_BaseFactory","MatHeaderRowDef","ɵMatHeaderRowDef_BaseFactory","MatRowDef","ɵMatRowDef_BaseFactory","MatHeaderRow","ɵMatHeaderRow_BaseFactory","MatRow","ɵMatRow_BaseFactory","MatTableModule","MAX_SAFE_INTEGER","initialData","_renderData","_filter","_internalPageChanges","_renderChangesSubscription","Subscription","EMPTY","sortingDataAccessor","sortHeaderId","numberValue","sortData","sort","active","a","b","valueA","valueB","valueAType","valueBType","comparatorResult","filterPredicate","dataStr","Object","keys","currentTerm","key","toLowerCase","transformedFilter","trim","_updateChangeSubscription","_sort","_paginator","paginator","sortChange","merge","initialized","pageChange","page","filteredData","combineLatest","_filterData","orderedData","_orderData","paginatedData","_pageData","obj","_updatePaginator","startIndex","pageIndex","pageSize","filteredDataLength","then","lastPageIndex","Math","ceil","newPageIndex","min","overlayRef","beforeCloseSubject","afterClosedSubject","close","dispose","componentInstance","afterClosed","asObservable","beforeClose","Portal","host","_attachedHost","attach","detach","ComponentPortal","component","viewContainerRef","injector","componentFactoryResolver","TemplatePortal","DomPortal","BasePortalOutlet","_isDisposed","attachDomPortal","_attachedPortal","portal","attachComponentPortal","attachTemplatePortal","ngDevMode","setAttachedHost","_invokeDisposeFn","hasAttached","_disposeFn","DomPortalOutlet","outletElement","_componentFactoryResolver","_appRef","_defaultInjector","anchorNode","createComment","parentNode","insertBefore","replaceChild","componentRef","componentFactory","resolveComponentFactory","createComponent","setDisposeFn","destroy","attachView","hostView","detachView","_getComponentRootNode","rootNode","detectChanges","removeChild","CdkPortal","CdkPortalOutlet","_viewContainerRef","_isInitialized","attached","_getRootNode","_attachedRef","ref","emit","outputs","PortalHostDirective","ɵPortalHostDirective_BaseFactory","PortalModule","PortalInjector","_parentInjector","_customTokens","notFoundValue","Component","instanceFactory","multipleInstances","serviceProps","instantiationMode","prototype","setInstantiationMode","mode","setMultipleInstances","setServiceProps","props","DEFAULT_ENTRY_NAME","Provider","instances","instancesDeferred","identifier","normalizedIdentifier","normalizeInstanceIdentifier","deferred","instance","getOrInitializeService","e","promise","getImmediate","options","_a","optional","Error","getComponent","setComponent","e_1","isComponentEager","_b","entries","_c","done","_d","instanceDeferred","e_1_1","error","return","call","clearInstance","services","label","all","service","INTERNAL","_delete","sent","isComponentSet","normalizeIdentifierForFactory","ComponentContainer","providers","addComponent","provider","getProvider","addOrOverwriteComponent","getProviders","browser","window","userAgent","browserRxs","edge","webkit","safari","opera","msie","mozilla","agent","hasOwnProperty","match","split","version","parseInt","document","documentMode","matchUserAgent","navigator","distinctUntilChanged","compare","keySelector","source","lift","DistinctUntilChangedOperator","subscriber","DistinctUntilChangedSubscriber","destination","hasKey","x","y","err","result","renderAttr","align","elements","rect","alignment","DataSource","isDataSource","ArrayDataSource","_DisposeViewRepeaterStrategy","itemContextFactory","itemValueResolver","itemViewChanged","adjustedPreviousIndex","insertContext","_RecycleViewRepeaterStrategy","viewCacheSize","_viewCache","_insertView","_detachAndCacheView","_moveView","viewArgsFactory","cachedView","_insertViewFromCache","viewArgs","detachedView","_detachView","_maybeCacheView","pop","insert","SelectionModel","_multiple","initiallySelectedValues","_emitChanges","_selection","_deselectedToEmit","_selectedToEmit","changed","_markSelected","_selected","_verifyValueAssignment","_emitChangeEvent","_unmarkSelected","isSelected","deselect","select","_unmarkAll","size","isEmpty","predicate","selected","added","removed","UniqueSelectionDispatcher","_listeners","id","listener","registered","providedIn","_VIEW_REPEATER_STRATEGY","concatAll","MatDialogContainer_ng_template_0_Template","MatDialogConfig","panelClass","hasBackdrop","backdropClass","disableClose","maxWidth","ariaDescribedBy","ariaLabelledBy","ariaLabel","autoFocus","restoreFocus","closeOnNavigation","matDialogAnimations","dialogContainer","opacity","transform","_MatDialogContainerBase","_focusTrapFactory","_config","_focusMonitor","_animationStateChanged","_elementFocusedBeforeDialogWasOpened","_closeInteractionType","_portalOutlet","_ariaLabelledBy","_setupFocusTrap","_capturePreviouslyFocusedElement","_focusDialogContainer","_containsFocus","_focusTrap","focusInitialElement","focus","focusInitialElementWhenReady","previousElement","activeElement","body","contains","focusVia","MatDialogContainer","_state","toState","totalTime","_trapFocus","_restoreFocus","ɵMatDialogContainer_BaseFactory","$event","_onAnimationStart","_onAnimationDone","_id","animation","uniqueId","MatDialogRef","_overlayRef","_containerInstance","_afterOpened","_afterClosed","_beforeClosed","event","clearTimeout","_closeFallbackTimeout","_finishDialogClose","detachments","_result","keydownEvents","keyCode","preventDefault","_closeDialogVia","backdropClick","_recaptureFocus","dialogResult","detachBackdrop","setTimeout","_startExitAnimation","strategy","_getPositionStrategy","centerHorizontally","centerVertically","updatePosition","classes","addPanelClass","removePanelClass","getConfig","positionStrategy","interactionType","MAT_DIALOG_DATA","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","MAT_DIALOG_SCROLL_STRATEGY_PROVIDER","deps","useFactory","overlay","scrollStrategies","block","_MatDialogBase","_overlay","_injector","_defaultOptions","_parentDialog","_overlayContainer","scrollStrategy","_dialogRefConstructor","_dialogContainerType","_dialogDataToken","_openDialogsAtThisLevel","_afterAllClosedAtThisLevel","_afterOpenedAtThisLevel","_ariaHiddenElements","afterAllClosed","openDialogs","_getAfterAllClosed","_scrollStrategy","afterOpened","parent","componentOrTemplateRef","config","defaultOptions","assign","_applyConfigDefaults","getDialogById","_createOverlay","_attachDialogContainer","dialogRef","_attachDialogContent","_hideNonDialogContentFromAssistiveTechnology","_removeOpenDialog","_initializeWithAttachedContent","_closeDialogs","dialog","overlayConfig","_getOverlayConfig","dialogConfig","global","minWidth","minHeight","maxHeight","disposeOnNavigation","useValue","containerPortal","_createInjector","contentRef","updateSize","userInjector","splice","previousValue","removeAttribute","overlayContainer","getContainerElement","parentElement","siblings","sibling","hasAttribute","getAttribute","dialogs","MatDialog","location","parentDialog","MatDialogClose","_dialog","getClosestDialog","proxiedChange","screenX","screenY","_onButtonClick","_matDialogClose","MatDialogContent","MatDialogActions","MatDialogModule","mediaQueryStyleNode","mediaQueriesForWebkitCompatibility","MediaMatcher","_matchMedia","matchMedia","bind","noopMatchMedia","query","WEBKIT","head","sheet","insertRule","console","createEmptyStyleRule","matches","media","addListener","removeListener","BreakpointObserver","_mediaMatcher","_zone","_queries","_destroySubject","splitQueries","mediaQuery","_registerQuery","mql","observables","observable","stateObservable","breakpointStates","response","breakpoints","output","observer","handler","run","queries","a1","a2","Breakpoints","XSmall","Small","Medium","Large","XLarge","Handset","Tablet","Web","HandsetPortrait","TabletPortrait","WebPortrait","HandsetLandscape","TabletLandscape","WebLandscape","notifier","TakeUntilOperator","takeUntilSubscriber","TakeUntilSubscriber","notifierSubscription","seenValue","_classCallCheck","Constructor","TypeError","limitValue","max","openPopoverPanel","elementConnect","filterData","componentContainer","flexibleConnectedTo","withPositions","overlayX","overlayY","originX","originY","offsetY","overlayComponent","attachDialogContainer","_","createInjector","injectionTokens","PopoverViewService","zip","resultSelector","ZipOperator","ZipSubscriber","iterators","StaticArrayIterator","StaticIterator","ZipBufferIterator","len","iterator","stillUnsubscribed","hasValue","shouldComplete","hasCompleted","_tryresultSelector","apply","nextResult","Boolean","buffer","isComplete","notifyInactive","innerValue","checkIterators","_iterableToArray","iter","Symbol","DEG_TO_RAD","PI","MAX_NUM","MIN_NUM","rxSubscriber","random","_value","getValue","subscription","closed","hasError","thrownError","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","_enable_super_gross_mode_that_will_cause_bad_things","warn","stack","log","shapes","shape","bbox","_quadNode","point","idx","containsPoint","_add","extendStatics","setPrototypeOf","__proto__","p","__extends","__","constructor","__assign","s","n","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","rejected","__generator","f","g","trys","ops","verb","op","__values","o","m","__read","r","ar","__spread","__spreadArrays","il","k","jl","skipWhile","SkipWhileOperator","SkipWhileSubscriber","skipping","tryCallPredicate","isDate","isNaN","delay","scheduler","absoluteDelay","delayFor","now","abs","queue","errored","DelaySubscriber","dispatch","notification","message","_schedule","scheduleNotification","Notification","createNext","createComplete","time","observe","Subscriber","work","pending","recycleAsyncId","requestAsyncId","setInterval","flush","clearInterval","_execute","errorValue","actions","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","multi","_renderer","onChange","onTouched","setProperty","isDisabled","target","checked","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","getUserAgent","test","_handleInput","_compositionStart","_compositionEnd","isEmptyInputValue","hasValidLength","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","Validators","control","parseFloat","regexStr","charAt","regex","RegExp","nullValidator","validators","presentValidators","isPresent","mergeErrors","executeValidators","toObservable","obs","arrayOfErrors","res","errors","validator","normalizeValidators","validate","isValidatorFn","c","composeValidators","compose","composeAsyncValidators","composeAsync","mergeValidators","controlValidators","dirValidator","getControlValidators","_rawValidators","getControlAsyncValidators","_rawAsyncValidators","AbstractControlDirective","_onDestroyCallbacks","valid","invalid","disabled","enabled","pristine","dirty","touched","status","untouched","statusChanges","valueChanges","_composedValidatorFn","_composedAsyncValidatorFn","reset","errorCode","path","getError","ControlContainer","ɵControlContainer_BaseFactory","NgControl","_parent","valueAccessor","AbstractControlStatus","cd","_cd","ngControlStatusHost","NgControlStatus","ngClassUntouched","ngClassTouched","ngClassPristine","ngClassDirty","ngClassValid","ngClassInvalid","ngClassPending","NgControlStatusGroup","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","_control","_registry","_checkName","_fn","writeValue","formControlName","RANGE_VALUE_ACCESSOR","RangeValueAccessor","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_buildValueString","_optionMap","_idCounter","_compareWith","is","_getOptionId","valueString","_getOptionValue","_extractId","compareWith","NgSelectOption","_element","_select","_registerOption","_setElementValue","ngValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","ids","opt","_setSelected","selectedOptions","val","_extractId$1","ɵNgSelectMultipleOption","controlPath","setUpControl","setUpValidators","registerOnChange","newValue","_pendingValue","_pendingChange","_pendingDirty","updateOn","updateControl","setUpViewChangePipeline","emitModelEvent","viewToModelUpdate","_registerOnDestroy","_unregisterOnChange","setUpModelChangePipeline","registerOnTouched","_pendingTouched","markAsTouched","setUpBlurPipeline","setDisabledState","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","setUpDisabledChangeHandler","registerOnValidatorChange","handleOnValidatorChange","setValidators","asyncValidators","asyncValidator","setAsyncValidators","onValidatorChange","updateValueAndValidity","cleanUpValidators","noop","markAsDirty","setValue","emitModelToViewChange","setUpFormContainer","isPropertyUpdated","viewModel","isFirstChange","BUILTIN_ACCESSORS","syncPendingControls","form","_syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","removeListItem","list","el","VALID","INVALID","PENDING","DISABLED","pickValidators","validatorOrOpts","isOptionsObj","coerceToValidator","pickAsyncValidators","coerceToAsyncValidator","AbstractControl","_hasOwnPendingAsyncValidator","_onCollectionChange","_onDisabledChange","validatorFn","asyncValidatorFn","_updateOn","newValidator","opts","onlySelf","_forEachChild","markAllAsTouched","markAsUntouched","_updateTouched","markAsPristine","_updatePristine","emitEvent","markAsPending","skipPristineCheck","_parentMarkedDirty","disable","_updateValue","_updateAncestors","changeFn","enable","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","ctrl","_updateTreeValidity","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","delimiter","controlToFind","FormGroup","controls","FormArray","at","_find","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","formState","FormControl","_onChange","_applyFormState","_setUpdateStrategy","_initObservables","emitViewToModelChange","condition","cb","_isBoxedValue","_setUpControls","setParent","_registerOnCollectionChange","registerControl","controlName","_checkAllValuesPresent","_throwIfControlMissing","patchValue","_reduceChildren","getRawValue","subtreeUpdated","updated","child","_reduceValue","initValue","_registerControl","formDirectiveProvider","NgForm","resolvedPromise","ɵ0","submitted","_directives","ngSubmit","_findContainer","removeControl","group","resetForm","onSubmit","onReset","AbstractFormGroupDirective","_checkParentType","formDirective","addFormGroup","removeFormGroup","getFormGroup","ɵAbstractFormGroupDirective_BaseFactory","modelGroupProvider","NgModelGroup","_setValidators","_setAsyncValidators","formControlBinding","NgModel","resolvedPromise$1","ɵ0$1","_registered","update","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","addControl","standalone","disabledValue","ɵNgNoValidate","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding$1","FormControlDirective","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","_ngModelWarningSentOnce","formDirectiveProvider$1","FormGroupDirective","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","_oldForm","newCtrl","_invokeOnDestroyCallbacks","cleanUpControl","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","addFormArray","removeFormArray","getFormArray","controlNameBinding","FormControlName","_added","updateModel","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","required","requiredTrue","ɵCheckboxRequiredValidator_BaseFactory","EMAIL_VALIDATOR","EmailValidator","_enabled","email","MIN_LENGTH_VALIDATOR","MinLengthValidator","_validator","_createValidator","minlength","minLength","MAX_LENGTH_VALIDATOR","MaxLengthValidator","maxlength","maxLength","PATTERN_VALIDATOR","PatternValidator","pattern","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","ɵInternalFormsSharedModule","isAbstractControlOptions","FormBuilder","controlsConfig","_reduceControls","_createControl","controlConfig","VERSION","FormsModule","ReactiveFormsModule","ngModule","warnOnNgModelWithFormControl","isTransparent","color","module","exports","originalModule","webpackPolyfill","defineProperty","enumerable","l","audit","durationSelector","throttled","duration","innerSubscription","innerSubscribe","clearThrottle","auditTime","timer","ownerDocument","defaultView","documentElement","cachedWidth","scrollbarWidth","div","innerHTML","offsetWidth","scrollWidth","windowViewport","win","innerHeight","innerWidth","scrollHeight","clientHeight","offsetParent","rectOfHiddenElement","until","pageXOffset","scrollLeft","pageYOffset","scrollTop","elementStyles","getComputedStyle","offset","parentOffset","parentStyles","borderTopWidth","borderLeftWidth","offsetParentElement","parentScrollPosition","scale","positionScale","fit","viewPortSize","anchorSize","anchorAlignPoint","elementAlignPoint","marginToAdd","margin","isBeforeAnchor","firstElementChild","nextElementSibling","PopupComponent_ng_template_3_Template","fun","called","offset$$1","isWindowAvailable","overflow","overflowX","overflowY","FRAME_DURATION","isDifferent","DOMService","current","addition","scroll","settings","elementRect","anchorHorizontal","anchorAlign","horizontal","elementHorizontal","elementAlign","elementVertical","vertical","horizontalMargin","verticalMargin","anchorRect","anchorVertical","round","viewport","getWindow","computedStyles","font","currentLocation","transition","currentOffset","popup","collisions","viewPort","elementTop","elementLeft","elementHeight","elementWidth","viewPortHeight","viewPortWidth","isVerticalFit","isHorizontalFit","isVerticalFlip","collision","isHorizontalFlip","flippedVertical","flippedHorizontal","fittedVertical","fittedHorizontal","flipped","fitted","flip","parentElements","relativeContextElement","getRelativeContextElement","anchor","siblingElements","parents","containerElement","zIndexStyle","clientWidth","toFixed","zoomLevel","SCALE","AlignService","_dom","positionMode","hasOffsetParent","relativeRect","absoluteRect","scrollPos","elementScrollPosition","stackScale","stackScroll","stackingElementScroll","stackOffset","stackingElementOffset","removeScroll","addScroll","stackingOffset","scrollPosition","PositionService","dom","elementOffset","offsetAtPoint","anchorOffset","windowViewPort","restrictToView","addOffset","ResizeService","callback","runOutsideAngular","fromEvent","ScrollableService","parents$$1","scrollableParents","isParent","isDocument","isWindow","isVisible","elem","elemRect","boundingOffset","containerRect","LEFT","RIGHT","DOWN","UP","animationTypes","origin","transformOrigin","translate","AnimationService","animationBuilder","statesFn","getDirection","playStates","stopPlayer","build","player","onDone","play","DEFAULT_OFFSET","PopupComponent","_alignService","domService","_positionService","_resizeService","_scrollableService","animationService","animate","popupAlign","copyAnchorStyles","anchorViewportLeave","open","positionChange","initialCheck","addClass","updateFixedClass","reposition","animationSubscriptions","onAnimationStart","onAnimationEnd","forElement","onScroll","setZIndex","copyFontStyles","unsubscribeReposition","repositionSubscription","removeClass","_currentOffset","setContainerStyle","String","oldOffset","newOffset","oldTop","newTop","contentContainer","resizeSensor","acceptSize","alignedOffset","alignElement","positionElement","isInViewPort","hasLeaveObservers","getFontStyles","setStyle","popupClass","onResize","content","removeElement","POPUP_CONTAINER","PopupService","applicationRef","rootComponents","components","getComponentRootNode","rootViewContainer","contentFrom","nodes","popupComponentRef","appendPopup","appendTo","popupInstance","projectComponentInputs","changeDetectorRef","popupElement","popupAnchorViewportLeave","popupClose","popupOpen","popupPositionChange","rootViewContainerNode","componentClass","getComponentFactory","getOwnPropertyNames","prop","PopupModule","optionsChange","field","stops","_createStops","addObserver","_userSpace","userSpace","defined","stop","trigger","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","renderCoordinates","renderChildren","srcElement","mapSpace","TEXT_RENDERING_MODE","DASH_PATTERNS","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","LINE_CAP","butt","square","LINE_JOIN","miter","bevel","handlers","drawElement","pdf","_pdfDebug","comment","save","setOpacity","stroke","parseColor","setStrokeColor","setStrokeOpacity","setLineWidth","dashType","setDashPattern","lineCap","setLineCap","lineJoin","setLineJoin","setStrokeOptions","fill","setFillColor","setFillOpacity","setFillOptions","matrix","clip","_drawPath","setClipping","Path","drawPath","MultiPath","drawMultiPath","Circle","drawCircle","Arc","drawArc","Text","drawText","Image","drawImage","Group","drawGroup","Rect","drawRect","restore","shouldDraw","thing","maybeGradient","clipStroke","isRadial","center","radius","unshift","gradient","box","rawBBox","tl","topLeft","getSize","maybeFillStroke","fillStroke","nop","segments","controlIn","maybeDrawRect","prev","seg","prevOut","controlOut","bezier","lineTo","moveTo","paths","geometry","circle","points","curvePoints","pos","_position","fillAndStroke","fontSize","beginText","setFont","setTextRenderingMode","showText","_pdfRect","endText","_pdfLink","addLink","url","src","getOrigin","sz","toRGB","exportPDF","_ignoreMargin","fonts","images","getOption","defval","hash","multiPage","imgDPI","doIt","producer","title","author","subject","keywords","creator","date","autoPrint","drawPage","render","tmp","root","clipbox","unit","currentBox","newShape","visible","optArray","saveclipbox","savematrix","multiplyCopy","intersect","withClipping","inClipbox","union","optimize","paperSize","addMargin","append","addPage","landscape","traverse","jpegQuality","keepPNG","base64","toDataURL","lineIntersectionsCount","intersects","minX","maxX","minY","maxY","inRange","mergeMap","project","concurrent","POSITIVE_INFINITY","ii","MergeMapOperator","MergeMapSubscriber","_tryNext","_innerSub","ish","innerSubscriber","_next","ROOT_SIZE","zIndexComparer","x1","x2","_zIndex","initRoots","rootMap","rootElements","sectorRoot","floor","pointShapes","assignZindex","levelWeight","pow","bboxChange","_insertShape","elementsArray","_insert","action","sectors","getSectors","inRoot","removeObserver","bottomRight","bottomX","bottomY","alignStart","axis","sizeField","activeEventOptions","passive","MAT_SLIDER_VALUE_ACCESSOR","MatSlider","MatSliderChange","MatSliderBase","_MatSliderMixinBase","tabIndex","_animationMode","_invert","_max","_min","_step","_thumbLabel","_tickInterval","_vertical","input","valueChange","_percent","_isSliding","_isActive","_tickIntervalPercent","_sliderDimensions","_controlValueAccessorChangeFn","_dirChangeSubscription","_pointerDown","isTouchEvent","button","oldValue","pointerPosition","getPointerPositionOnPage","_lastPointerEvent","_focusHostElement","_onMouseenter","_bindGlobalEvents","_updateValueFromPosition","_valueOnSlideStart","_emitInputEvent","_pointerMove","_pointerUp","_removeGlobalEvents","_windowBlur","addEventListener","_calculatePercentage","_roundToDecimal","displayWith","_blurHostElement","_clamp","invert","percent","_isMinValue","thumbLabel","sign","_shouldInvertMouseCoords","_getThumbGap","_getDirection","tickSize","backgroundSize","rotate","shouldInvertAxis","_shouldInvertAxis","monitor","removeEventListener","stopMonitoring","_getSliderDimensions","_updateTickIntervalPercent","_increment","triggerEvent","isTouch","endEventName","_getWindow","numSteps","exactValue","_calculateValue","closestValue","_createChangeEvent","tickInterval","trackSize","stepsPerTick","percentage","_sliderWrapper","blur","_onFocus","_onBlur","_onKeydown","_onKeyup","valueText","displayValue","_getTrackBackgroundStyles","_getTrackFillStyles","_getTicksContainerStyles","_getTicksStyles","_getThumbContainerStyles","changeDetection","touches","changedTouches","clientX","clientY","MatSliderModule","NEVER","never","isOutOfEndPoint","endPoint","controlPoint","angle","deg","atan2","transformCopy","calculateCurveAt","t1","toCubicPolynomial","real","img","cNumber","ComplexNumber","rad","sqrt","nthR","cos","sin","numberSign","solveCubicEquation","squareRoot","solveQuadraticEquation","y1","y2","y3","z1","z2","q","Q","b3a","nthRoot","multiplyConstant","negate","multiply","isReal","hasRootsInRange","rootField","range","intersection","polynomial","roots","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","p1","p2","fromPoints","cp1","cp2","extremesX","_curveExtremesFor","extremesY","xLimits","arrayLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","segment","rayIntersection","curveIntersectionsCount","bboxTo","endSegment","expand","p3","p4","distanceTo","rotation","rotatedPoints","_isOnCurveTo","_isOnLineTo","arr","throttle","timeout","lastExecTime","elapsed","exec","cancel","ATTRIBUTE_MAP","attr","renderData","invalidate","allAttr","mapFill","removeAttr","mapStroke","transformChange","textContent","printPath","currentType","parts","segmentType","printPoints","join","segmentStart","segmentEnd","attrs","renderLinecap","renderDashType","dashArray","renderId","renderStyle","renderOpacity","renderStroke","renderFill","renderDefinitions","renderTransform","degrees","DOMStorageWrapper","domStorage_","prefix_","removeItem","prefixedName_","setItem","storedVal","getItem","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","logClient","LUIDGenerator","sha1","str","utf8Bytes","sha1Bytes","digest","encodeByteArray","buildLogMessage_","varArgs","arg","logger","firstLog_","enableLogging","logger_","persistent","logLevel","VERBOSE","logWrapper","prefix","fatal","isInvalidJSONNumber","NEGATIVE_INFINITY","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","substring","each","PUSH_CHARS","lastPushTime","lastRandChars","__EMPTY_NODE","MAX_NODE","__childrenNodeConstructor","nodeFromJSON","MAX_NODE$1","_defaultIndexMap","EMPTY_NODE","doubleToIEEE754String","ln","LN2","bits","hexByteString","hexByte","substr","INTEGER_REGEXP_","intVal","exceptionGuard","setTimeoutNonBlocking","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","configurable","getFront","getLength","popFront","getBack","pathString","toUrlEncodedString","encodeURIComponent","begin","pieces","childPathObj","childPieces","relativePath","outerPath","innerPath","outer","inner","comparePaths","leftKeys","rightKeys","cmp","equals","other","ValidationPath","errorPrefix_","parts_","byteLength_","checkValid_","MAX_PATH_LENGTH_BYTES","MAX_PATH_DEPTH","toErrorString","FORGE_DOMAIN","WEBSOCKET","LONG_POLLING","RepoInfo","secure","namespace","webSocketOnly","nodeAdmin","persistenceKey","includeNamespaceInQueryParams","domain","internalHost","needsQueryParam","isCustomHost","isCacheableHost","isDemoHost","updateHost","newHost","connectionURL","params","connURL","pairs","toURLString","parseRepoInfo","dataURL","parsedUrl","parseDatabaseURL","protocol","repoInfo","scheme","subdomain","port","colonInd","slashInd","questionMarkInd","pathStringDecoded","piece","decodeURIComponent","decodePath","queryParams","queryString","results","kv","decodeQuery","hostWithoutPort","dotInd","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidKey","isValidPathString","isValidPriority","priority","validateFirebaseDataArg","fnName","argumentNumber","validateFirebaseData","errorPrefix","path_","hasDotValue_1","hasActualChild_1","validateFirebaseMergeDataArg","errorPrefix$1","mergePaths","curPath","prevPath","validateFirebaseMergePaths","validatePriority","validateEventType","eventType","validateKey","validatePathString","validateRootPathString","validateWritablePath","validateUrl","isValidRootPathString","validateBoolean","bool","OnDisconnect","repo_","onComplete","onDisconnectCancel","wrapCallback","onDisconnectSet","setWithPriority","onDisconnectSetWithPriority","objectToMerge","newObjectToMerge","onDisconnectUpdate","TransactionResult","committed","snapshot","toJSON","nextPushId","duplicateTime","timeStampChars","NamedNode","node","Wrap","Index","getCompare","indexedValueChanged","oldNode","newNode","oldWrapped","newWrapped","minPost","MIN","KeyIndex","_super","isDefinedOn","maxPost","makePost","indexValue","KEY_INDEX","priorityHashText","validatePriorityNode","priorityNode","isLeafNode","getPriority","LeafNode","value_","priorityNode_","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","front","numChildren","forEachChild","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","PRIORITY_INDEX","PriorityIndex","aPriority","bPriority","indexCmp","SortedMapIterator","startKey","comparator","isReverse_","resultGenerator_","nodeStack_","getNext","hasNext","peek","LLRBNode","RED","SortedMap","copy","inorderTraversal","reverseTraversal","min_","minKey","maxKey","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nl","nr","checkMaxDepth_","blackDepth","check_","BLACK","LLRBEmptyNode","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","LOG_2","Base12Num","current_","mask","bits_","nextBitIsOne","buildChildSet","childList","keyFn","mapSortFn","buildBalancedTree","low","high","namedNode","middle","base12","buildPennant","chunkSize","childTree","attachPennant","pennant","isOne","buildFrom12Array","fallbackObject","IndexMap","indexes_","indexSet_","indexKey","sortedMap","hasIndex","indexDefinition","addIndex","existingChildren","newIndex","sawIndexedValue","indexName","newIndexSet","newIndexes","addToIndexes","_this","indexedChildren","existingSnap","newChildren","removeFromIndexes","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","ChildrenNode","children_","indexMap_","Default","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","toHash_1","childHash","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE$2","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","nodeFromJSON$1","json","node_1","childData","children_1","childrenHavePriority_1","childSet","sortedChildSet","defineProperties","MAX","__referenceConstructor","VALUE_INDEX","ValueIndex","valueNode","PathIndex","indexPath_","extractChild","snap","aChild","bChild","DataSnapshot","node_","ref_","index_","exportVal","exists","childPathString","childPath","childRef","childrenNode","hasChildren","getKey","getRef","DataEvent","eventRegistration","prevName","getPath","getParent","getEventType","getEventRunner","CancelEvent","ValueEventRegistration","callback_","cancelCallback_","context_","respondsTo","createEvent","getQueryParams","getIndex","snapshotNode","eventData","cancelCB_1","cb_1","createCancelEvent","hasAnyCallback","ChildEventRegistration","callbacks_","eventToCheck","cancelCB_2","cb_2","otherKeys","thisKeys","otherCount","otherKey","thisKey","every","Query","repo","queryParams_","orderByCalled_","validateQueryEndpoints_","startNode","endNode","hasStart","getIndexStartValue","hasEnd","getIndexEndValue","tooManyArgsError","wrongArgTypeError","getIndexStartName","getIndexEndName","validateLimit_","hasLimit","hasAnchoredLimit","validateNoPreviousOrderByCall_","on","cancelCallbackOrContext","ret","getCancelAndContextArgs_","onValueEvent","callbacks","onChildEvent","cancelCallback","addEventCallbackForQuery","off","valueCallback","removeEventCallbackForQuery","once","userCallback","failureCallbackOrContext","firstCall","catch","onceCallback","limitToFirst","limit","limitToLast","orderByChild","parsedPath","newParams","orderBy","orderByKey","orderByPriority","orderByValue","startAt","endAt","equalTo","queryObject","getQueryObject","queryIdentifier","isEqual","sameRepo","samePath","sameQueryIdentifier","cancelOrContext","ExistingValueProvider","DeferredValueProvider","syncTree","syncTree_","calcCompleteEventCache","resolveDeferredLeafValue","existingVal","serverValues","resolveScalarDeferredValue","resolveComplexDeferredValue","JSON","stringify","existing","unused","delta","existingNode","resolveDeferredValueTree","resolveDeferredValue","resolveDeferredValueSnapshot","rawPri","leafNode","emptyChildrenSingleton","__referenceConstructor$1","SparseSnapshotTree","childKey","remember","forget","self_1","tree","forEachTree","prefixPath","func","OperationType","OperationSource","fromUser","fromServer","queryId","tagged","User","Server","forServerTaggedQuery","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","operationForChild","subtree","Empty","ImmutableTree","fromObject","childSnap","findRootMostMatchingPathAndValue","childExistingPathAndValue","findRootMostValueAndPath","toSet","newChild","setTree","newTree","fold","fold_","pathSoFar","accum","findOnPath","findOnPath_","pathToFollow","nextChild","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","ListenComplete","LISTEN_COMPLETE","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","getNode","ViewCache","eventCache_","serverCache_","updateEventSnap","eventSnap","filtered","updateServerSnap","serverSnap","getEventCache","getCompleteEventSnap","getServerCache","getCompleteServerSnap","Change","oldSnap","VALUE","childAddedChange","CHILD_ADDED","childRemovedChange","CHILD_REMOVED","childChangedChange","newSnapshot","oldSnapshot","CHILD_CHANGED","childMovedChange","CHILD_MOVED","IndexedFilter","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","ChildChangeAccumulator","changeMap","oldChange","oldType","getChanges","NO_COMPLETE_CHILD_SOURCE","NoCompleteChildSource_","getCompleteChild","getChildAfterChild","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","calcCompleteChild","completeServerData","calcIndexedSlice","ProcessorResult","viewCache","ViewProcessor","filter_","assertIndexed","applyOperation","oldViewCache","writesCache","completeCache","newViewCache","filterServerNode","accumulator","overwrite","applyUserOverwrite_","applyServerOverwrite_","applyUserMerge_","applyServerMerge_","ackUserWrite","revertUserWrite_","ackUserWrite_","listenComplete_","maybeAddValueEvent_","isLeafOrEmpty","oldCompleteSnap","generateEventCacheAfterServerEvent_","changePath","oldEventSnap","shadowingWrite","newEventCache","serverCache","completeEventChildren","calcCompleteEventChildren","completeNode","oldEventNode","updatedPriority","calcEventCacheAfterServerOverwrite","childChangePath","newEventChild","eventChildUpdate","changedSnap","newServerCache","oldServerSnap","serverFilter","newServerNode","newEventSnap","cacheHasChild_","changedChildren","curViewCache","writePath","applyMerge_","viewMergeTree","serverChild","childMergeTree","isUnknownDeepMerge","ackPath","changedChildren_1","changedChildren_2","mergePath","serverCachePath","oldServerNode","completeServerCache","oldEventCache","serverChildren","EventGenerator","query_","generateEventsForChanges","eventCache","eventRegistrations","events","moves","generateEventsForType_","registrations","filteredChanges","compareChanges_","materializedChange","materializeSingleChange_","registration","aWrapped","bWrapped","View","initialViewCache","eventRegistrations_","indexFilter","getNodeFilter","processor_","initialServerCache","initialEventCache","eventGenerator_","getQuery","getCompleteServerCache","loadsAllData","addEventRegistration","removeEventRegistration","cancelError","cancelEvents","path_1","maybeEvent","remaining","generateEventsForChanges_","getInitialEvents","initialChanges","SyncPoint","views","optCompleteServerCache","serverCacheComplete","eventCacheComplete","e_2","hadCompleteView","hasCompleteView","viewQueryId","e_2_1","getQueryViews","e_3","e_3_1","e_4","e_4_1","viewForQuery","getCompleteView","viewExistsForQuery","e_5","e_5_1","CompoundWrite","writeTree_","addWrite","rootmost","rootMostPath","addWrites","updates","newWrite","removeWrite","hasCompleteWrite","getCompleteNode","getCompleteChildren","childCompoundWrite","shadowingNode","applySubtreeWrite","writeTree","priorityWrite_1","WriteTree","visibleWrites_","allWrites_","lastWriteId_","childWrites","WriteTreeRef","addOverwrite","writeId","addMerge","getWrite","findIndex","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","recordContainsPath_","resetTree_","getCompleteWriteData","treePath","writeIdsToExclude","includeHiddenWrites","layerTree_","write","subMerge","completeServerChildren","completeChildren","topLevelSet","merge_1","existingEventSnap","existingServerSnap","childMerge","toIterate","writeRecord","DefaultFilter_","writes","treeRoot","compoundWrite","deepNode","treePath_","existingServerCache","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap","queryToTagMap","applyUserOverwrite","newData","applyOperationToSyncPoints_","applyUserMerge","changeTree","affectedTree_1","applyServerOverwrite","applyServerMerge","applyListenComplete","applyTaggedQueryOverwrite","queryKey","queryKeyForTag_","parseQueryKey_","queryPath","applyTaggedOperation_","applyTaggedQueryMerge","applyTaggedListenComplete","foundAncestorDefaultView","pathToSyncPoint","sp","syncPoint","childSyncPoint","viewAlreadyExists","makeQueryKey_","getNextQueryTag_","setupListener_","maybeSyncPoint","removedAndEvents","removingDefault","covered","parentSyncPoint","newViews","collectDistinctViewsForSubTree_","newQuery","createListenerForView_","startListening","queryForListening_","tagForQuery_","hashFn","stopListening","queryToRemove","tagToRemove","removeTags_","maybeChildSyncPoint","childMap","views_1","_key","childViews","removedQuery","removedQueryKey","removedQueryTag","isDefault","queriesToStop","queries_1","childQueries","queryToStop","code","reason","toUpperCase","errorForServerCode","splitIndex","nextQueryTag_","applyOperationHelper_","syncPointTree","applyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","SnapshotHolder","rootNode_","updateSnapshot","newSnapshotNode","StatsCollection","counters_","incrementCounter","amount","StatsManager","getCollection","hashString","collections_","getOrCreateReporter","creatorFunction","reporters_","StatsListener","collection_","last_","newStats","stat","StatsReporter","collection","server_","statsToReport_","statsListener_","reportStats_","includeStat","stats","reportedStats","haveStatsToReport","reportStats","EventQueue","eventLists_","recursionDepth_","queueEvents","eventDataList","currList","eventPath","EventList","raiseEventsAtPath","raiseQueuedEventsMatchingPredicate_","raiseEventsForChangedPath","changedPath","sentAll","eventList","raise","events_","eventFn","EventEmitter","allowedEvents_","listeners_","listeners","validateEventType_","getInitialEvent","et","VisibilityMonitor","hidden","visibilityChange","visible_","getInstance","OnlineMonitor","online_","currentlyOnline","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","_loop_1","toProcess","this_1","_loop_2","FIREBASE_LONGPOLL_START_PARAM","FIREBASE_LONGPOLL_CLOSE_COMMAND","BrowserPollConnection","connId","applicationId","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onMessage","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","readyState","called_1","wrappedFn_1","attachEvent","executeWhenDOMReady","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","incrementIncomingBytes_","password","sendNewPolls","pN","urlParams","uniqueCallbackIdentifier","href","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","Windows","UI","markConnectionHealthy","shutdown_","myDisconnFrame","send","base64data","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","script","iframeContents","doc","iframe","contentWindow","contentDocument","alive","myID","myPW","newRequest_","theURL","curDataString","theSeg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","loadCB","doNodeLongPoll","newScript_1","async","onload","onreadystatechange","rstate","onerror","SDK_VERSION","setSDKVersion","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","headers","process","platform","env","proxy","mySock","onopen","onclose","onmessage","handleIncomingFrame","isOldAndroid","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","initTransports_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports","ALL_TRANSPORTS","transport","initialTransport","upgradeTransport","Connection","repoInfo_","applicationId_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeoutMS","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","payload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","timestamp","h","sessionId","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","put","refreshAuthToken","onDisconnectPut","onDisconnectMerge","RECONNECT_MIN_DELAY","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens","outstandingPuts_","outstandingGets_","outstandingPutCount_","outstandingGetCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","authToken_","forceTokenRefresh_","invalidAuthTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","scheduleConnect_","onVisible_","onOnline_","onResponse","curReqNum","msg","request","outstandingGet","sendGet_","listen","currentHashFn","listenSpec","sendListen_","req","warnOnListenWarnings_","removeListen_","warnings","indexSpec","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","credential","token_1","authMethod","requestData","cred","onAuthRevoked_","unlisten","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","getTime","handleTimestamp_","sendConnectStats_","restoreState_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage_1","onReady_1","onDisconnect_1","connId_1","nextConnectionId_","lastSessionId_1","canceled_1","connection_1","closeFn_1","forceRefresh","getToken","accessToken","interrupt","resume","serverTimeOffset","normalizedPathString","statusCode","explanation","notifyForInvalidToken","_e","_f","clientName","ReadonlyRestClient","listens_","getListenId_","listenId","thisListen","queryStringParameters","toRestQueryStringParameters","restRequest_","authTokenData","authToken","xhr","XMLHttpRequest","responseText","INTERRUPT_REASON","Repo","forceRestClient_","app","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","persistentConnection_","search","authOverride","appId","addTokenChangeListener","statsReporter_","transactionsInit_","infoData_","infoSyncTree_","infoEvents","updateInfo_","serverSyncTree_","serverTime","generateServerValues","isMerge","taggedChildren","raw","taggedSnap","rerunTransactions_","interceptServerData_","connectStatus","runOnDisconnectEvents_","getNextWriteId_","cached","newVal","newNodeUnresolved","errorReason","success","clearEvents","callOnCompleteCallback","abortTransactions_","childrenToMerge","empty","changedKey","changedValue","writeId_1","resolvedOnDisconnectTree","resolved","showDelta","longestName","paddedStat","statsIncrementCounter","metric","__database","Database","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","getStartPost","getEndPost","self","startName","endName","LimitedFilter","rangedFilter_","limit_","getLimit","reverse_","isViewFromLeft","fullLimitUpdateChild_","indexCompare_1","foundStartPost","changeAccumulator","indexCmp_1","newChildNamedNode","windowBoundary","oldChildSnap","compareNext","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","WIRE_PROTOCOL_CONSTANTS_","VIEW_FROM_LEFT","copy_","newLimit","VIEW_FROM_RIGHT","WIRE_PROTOCOL_CONSTANTS","INDEX_START_VALUE","INDEX_START_NAME","INDEX_END_VALUE","INDEX_END_NAME","LIMIT","viewFrom","VIEW_FROM","INDEX","REST_CONSTANTS","REST_QUERY_CONSTANTS_","qs","ORDER_BY","START_AT","END_AT","LIMIT_TO_FIRST","LIMIT_TO_LAST","DEFAULT","Reference","parentPath","getRoot","databaseProp","database","transaction","transactionUpdate","applyLocally","promiseComplete","startTransaction","setPriority","thennablePushRef","pushRef","TreeNode","childCount","Tree","name_","parent_","subTree","pathObj","updateParents_","forEachDescendant","includeSelf","childrenFirst","forEachAncestor","forEachImmediateDescendantWithValue","updateChild_","childEmpty","childExists","TransactionStatus","MAX_TRANSACTION_RETRIES_","transactionQueueTree_","watchRef","order","retryCount","unwatcher","abortReason","currentWriteId","currentInputSnapshot","currentOutputSnapshotRaw","currentOutputSnapshotResolved","currentState","getLatestState_","RUN","queueNode","nodeQueue","priorityForNode","sendReadyTransactions_","excludeSets","pruneCompletedTransactionsBelowNode_","buildTransactionQueue_","sendTransactionQueue_","setsToIgnore","txn","latestState","snapToSend","latestHash","SENT","dataToSend","pathToSend","COMPLETED","SENT_NEEDS_ABORT","NEEDS_ABORT","rootMostTransactionNode","getAncestorTransactionNode_","rerunTransactionQueue_","abortTransaction","currentNode","newDataNode","oldWriteId","newNodeResolved","transactionNode","transactionQueue","aggregateTransactionQueuesForNode_","to","abortTransactionsOnNode_","lastSent","_staticInstance","FirebaseAuthTokenProvider","app_","authProvider_","auth_","auth","addAuthTokenListener","removeTokenChangeListener","removeAuthTokenListener","errorMessage","EmulatorAdminTokenProvider","EMULATOR_AUTH_TOKEN","RepoManager","repos_","useRestClient_","appName","applyEmulatorSettings","databaseFromApp","authProvider","dbUrl","databaseURL","projectId","isEmulator","dbEmulatorHost","authTokenProvider","createRepo","deleteRepo","appRepos","forceRestClient","repoInternal_","instanceStarted_","checkDeleted_","rootInternal_","useEmulator","refFromURL","apiName","parsedURL","goOffline","goOnline","ServerValue","TIMESTAMP","increment","freeze","forceLongPolling","forceWebSockets","setSecurityDebugCallback","interceptServerData","initStandalone","customAuthImpl","DataConnection","simpleListen","echo","onEcho","TEST_ACCESS","RealTimeConnection","hijackHash","newHash","oldPut","ConnectionTarget","registerComponent","registerVersion","registerDatabase","unbind","touchRegExp","normalizeEvent","pageX","pageY","originalEvent","offsetX","ctrlKey","shiftKey","altKey","Draggable","press","drag","release","mouseOnly","_pressHandler","_dragHandler","_releaseHandler","_ignoreMouse","_mouseOnly","_touchstart","_touchmove","_touchend","_restoreMouse","_mousedown","which","_mousemove","_mouseup","_pointerdown","isPrimary","_pointermove","_pointerup","_unbindFromCurrent","_bindToCurrent","_usePointers","supportPointerEvent","PointerEvent","default","isDocumentAvailable","isChanged","propertyName","skipFirstChange","anyChanged","propertyNames","hasObservers","emitter","observers","guid","DraggableDirective","ngZone","enableDrag","kendoPress","kendoDrag","kendoRelease","toggleDraggable","destroyDraggable","draggable","bindTo","DraggableModule","EventsOutsideAngularDirective","renderer","subscriptions","scope","EventsModule","resizeBatchService","resize","acceptedSize","measure","lastWidth","lastHeight","init","offsetHeight","WRAP_STYLE","isScheduled","checkSize","shrink","expandChild","getPropertyValue","initSize","shrinkChild","EXPAND_CHILD_STYLE","HAS_OBSERVER","ResizeObserver","resizeObserver","ResizeBatchService","scheduled","method","ResizeSensorComponent","rateLimit","serviceType","supported","resizeService","throttleTime","checkChanges","ResizeSensorModule","Keys","aa","ca","globalThis","ba","ea","fa","writable","da","u","Pa","A","xa","Ad","B","race","ha","ia","ja","ka","nonce","la","ma","na","oa","pa","qa","ra","sa","ta","Function","ua","va","$a","wa","ya","za","Aa","serverResponse","w","Da","Ba","kd","Sa","Ya","Va","rd","td","ud","Ca","firebaseEndpoint","secureTokenEndpoint","identityPlatformEndpoint","Ea","$goog_Thenable","captureStackTrace","Fa","Ga","Ha","Ia","Ja","La","Ka","Ma","Na","Oa","Qa","Ra","Wa","Xa","Za","ib","ab","bb","db","eb","fb","gb","hb","jb","kb","lb","mb","nb","ob","z","pb","parentWindow","Element","Location","displayName","qb","rb","sb","tb","ub","vb","trustedTypes","createPolicy","createHTML","createScript","createScriptURL","wb","xb","yb","zb","Ab","Cb","Bb","C","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Pb","Qb","Rb","Sb","bc","Vb","Wb","Xb","Yb","Zb","$b","ac","cc","dc","ec","Ub","fc","Tb","ic","OffscreenCanvas","getContext","jc","kc","getElementById","lc","className","htmlFor","mc","lastIndexOf","rc","uc","cellpadding","cellspacing","colspan","frameborder","rowspan","usemap","valign","pc","createTextNode","oc","contentType","qc","tc","xc","setImmediate","Window","MessageChannel","postMessage","port1","port2","sc","vc","wc","D","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","E","F","Gc","Hc","Jc","Ob","Mc","Nc","Oc","Lc","Pc","Kc","Zc","$c","Tc","Qc","Rc","Sc","Uc","Vc","Wc","Xc","Yc","ad","G","defaultPrevented","bd","relatedTarget","metaKey","pointerId","pointerType","fromElement","toElement","2","3","4","returnValue","dd","ed","fd","capture","Ua","gd","hd","jd","ld","nd","od","pd","qd","sd","vd","wd","H","xd","detachEvent","yd","zd","Bd","handleEvent","I","Cd","Dd","Ed","Fd","V","Gd","Y","Id","Jd","Kd","dispatchEvent","Ld","Nd","Od","Pd","Qd","Rd","Sd","Td","ee","ie","ge","Zd","Ud","$d","J","ae","be","ce","decodeURI","encodeURI","de","charCodeAt","Vd","Wd","Xd","Yd","Md","fe","he","je","ke","le","me","ne","valueOf","isFinite","oe","pe","qe","K","re","se","te","xe","ye","ze","screen","availHeight","availWidth","resizable","statusbar","toolbar","ve","Ae","scrollbars","noreferrer","initMouseEvent","opener","Nb","noopener","Ce","De","Ee","Ge","He","Ie","Je","WorkerGlobalScope","importScripts","Ke","firebase","Le","we","Ne","Oe","L","Pe","localStorage","Qe","indexedDB","Re","Se","Te","Ue","Ve","We","parse","Xe","Ye","___jsl","CP","Ze","$e","visibilityState","bf","toUTCString","cf","onLine","connection","hf","ff","gf","jf","abcd","M","N","kf","nf","pf","qf","sf","tf","uf","uid","factorId","enrollmentTime","vf","wf","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","If","phoneNumber","Jf","Kf","Lf","Mf","Nf","apiKey","continueUrl","Of","languageCode","Pf","tenantId","Qf","recoverEmail","resetPassword","revertSecondFactorAddition","signIn","verifyAndChangeEmail","verifyEmail","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","canHandleCodeInApp","androidPackageName","androidMinimumVersion","androidInstallApp","iOSBundleId","dynamicLinkDomain","dg","hg","ig","sub","iss","aud","exp","provider_id","sign_in_provider","tenant","is_anonymous","jg","gg","fg","fromCharCode","eg","S","kg","lg","mg","md","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","isNewUser","kind","rawUserInfo","providerId","profile","login","screenName","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Gg","pendingToken","requestUri","Jg","signInMethod","Kg","idToken","oauthToken","oauthTokenSecret","Lg","id_token","access_token","secret","oauth_token_secret","postBody","Mg","oauthIdToken","oauthAccessToken","Ng","isOAuthProvider","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","EMAIL_LINK_SIGN_IN_METHOD","EMAIL_PASSWORD_SIGN_IN_METHOD","dh","eh","fh","gh","kh","verificationId","verificationCode","temporaryProof","hh","sessionInfo","lh","ph","qh","rawNonce","rh","sh","th","eventId","urlResponse","uh","multiFactorSession","pendingCredential","Fg","Hg","Ig","O","$g","oobCode","ah","bh","ch","PROVIDER_ID","ih","jh","verify","session","oj","phoneSessionInfo","mh","phoneEnrollmentInfo","recaptchaToken","qj","phoneResponseInfo","nh","mfaPendingCredential","mfaEnrollmentId","multiFactorHint","multiFactorUid","phoneSignInInfo","mj","oh","PHONE_SIGN_IN_METHOD","getUid","Ch","vh","xh","yh","zh","Ah","Dh","Eh","ActiveXObject","Fh","Gh","XDomainRequest","responseType","statusText","onprogress","ontimeout","Hh","Ih","Kh","Lh","abort","setRequestHeader","getResponseHeader","getAllResponseHeaders","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Headers","$h","read","Ta","Zh","Yh","ai","bi","R","credentials","fetch","Request","arrayBuffer","ReadableStream","getReader","TextDecoder","text","decode","Uint8Array","stream","ci","di","gi","ji","ki","li","mi","ni","fi","hi","pi","qi","ti","ui","si","vi","xi","yi","zi","Ai","ri","Ic","getResponse","mozResponseArrayBuffer","Bi","Ci","Di","Ei","Fi","attributes","charset","getElementsByTagName","Gi","tagName","Hi","Ii","secureTokenTimeout","Ji","secureTokenHeaders","Ki","firebaseTimeout","Li","firebaseHeaders","Mi","Ni","Oi","Pi","Qi","Ri","Si","ue","gapi","client","Vi","wi","Ui","Ti","oi","Bh","Hd","FormData","withCredentials","ei","Zi","$i","ej","setApiKey","setToken","authType","fj","gj","hj","photoUrl","pj","phoneVerificationInfo","tj","uj","vj","needConfirmation","wj","returnIdpCredential","xj","yj","autoCreate","zj","Aj","deleteAttribute","requestType","ij","jj","kj","newEmail","lj","nj","Bj","newPassword","Cj","Dj","endpoint","Z","Ej","U","bj","Fj","sj","deleteProvider","Gj","Hj","Ij","dj","Jj","recaptchaSiteKey","Kj","USER_NOT_FOUND","Lj","refreshToken","mf","returnSecureToken","Xi","Yi","keyInvalid","ipRefererBlocked","INVALID_CUSTOM_TOKEN","CREDENTIAL_MISMATCH","MISSING_CUSTOM_TOKEN","INVALID_IDENTIFIER","MISSING_CONTINUE_URI","INVALID_EMAIL","INVALID_PASSWORD","USER_DISABLED","MISSING_PASSWORD","EMAIL_EXISTS","PASSWORD_LOGIN_DISABLED","INVALID_IDP_RESPONSE","INVALID_PENDING_TOKEN","FEDERATED_USER_ID_ALREADY_LINKED","MISSING_OR_INVALID_NONCE","INVALID_MESSAGE_PAYLOAD","INVALID_RECIPIENT_EMAIL","INVALID_SENDER","EMAIL_NOT_FOUND","RESET_PASSWORD_EXCEED_LIMIT","EXPIRED_OOB_CODE","INVALID_OOB_CODE","MISSING_OOB_CODE","INVALID_PROVIDER_ID","CREDENTIAL_TOO_OLD_LOGIN_AGAIN","INVALID_ID_TOKEN","TOKEN_EXPIRED","CORS_UNSUPPORTED","DYNAMIC_LINK_NOT_ACTIVATED","INVALID_APP_ID","TOO_MANY_ATTEMPTS_TRY_LATER","WEAK_PASSWORD","OPERATION_NOT_ALLOWED","USER_CANCELLED","CAPTCHA_CHECK_FAILED","INVALID_APP_CREDENTIAL","INVALID_CODE","INVALID_PHONE_NUMBER","INVALID_SESSION_INFO","INVALID_TEMPORARY_PROOF","MISSING_APP_CREDENTIAL","MISSING_CODE","MISSING_PHONE_NUMBER","MISSING_SESSION_INFO","QUOTA_EXCEEDED","SESSION_EXPIRED","REJECTED_CREDENTIAL","INVALID_CONTINUE_URI","MISSING_ANDROID_PACKAGE_NAME","MISSING_IOS_BUNDLE_ID","UNAUTHORIZED_DOMAIN","INVALID_DYNAMIC_LINK_DOMAIN","INVALID_OAUTH_CLIENT_ID","INVALID_CERT_HASH","UNSUPPORTED_TENANT_OPERATION","INVALID_TENANT_ID","TENANT_ID_MISMATCH","ADMIN_ONLY_OPERATION","INVALID_MFA_PENDING_CREDENTIAL","MFA_ENROLLMENT_NOT_FOUND","MISSING_MFA_PENDING_CREDENTIAL","MISSING_MFA_ENROLLMENT_ID","EMAIL_CHANGE_NEEDS_VERIFICATION","SECOND_FACTOR_EXISTS","SECOND_FACTOR_LIMIT_EXCEEDED","UNSUPPORTED_FIRST_FACTOR","UNVERIFIED_EMAIL","Mj","Uj","Tj","Sj","where","messageHandlersFilter","dontclear","restyle","setHideOnLeave","Pj","ping","Nj","Vj","Wj","Xj","Yj","Zj","authorizedDomains","cj","ak","register","Rj","authEvent","bk","dk","ek","fk","reactNative","AsyncStorage","gk","Qj","webStorageSupport","ck","Be","T","rk","hk","jk","kk","lk","mk","messageChannel","nk","ok","pk","ik","qk","keyProcessed","serviceWorker","ready","ef","tk","onupgradeneeded","createObjectStore","keyPath","onsuccess","objectStoreNames","deleteDatabase","sk","uk","vk","wk","objectStore","xk","yk","zk","controller","df","getAll","openCursor","fbase_key","Bk","Ck","Dk","Ek","Gk","Fk","Hk","Ik","Kk","sessionStorage","Jk","Lk","Browser","Mk","Node","Nk","ReactNative","Ok","Worker","Pk","ports","Ak","Qk","Uk","Rk","NONE","Tk","Vk","Wk","Xk","Zk","al","bl","$k","cl","gl","hl","Int32Array","kl","ll","ml","ol","pl","ql","rl","sl","zl","wl","yl","handleOpenURL","wh","Al","dl","Bl","ul","ibi","apn","appDisplayName","cg","vl","xl","Cl","El","Gl","Hl","Il","Jl","unknown","signInViaRedirect","linkViaRedirect","reauthViaRedirect","signInViaPopup","linkViaPopup","reauthViaPopup","Kl","Ll","Ml","Nl","Ol","Pl","Fl","Ql","Rl","Sl","Tl","Ul","Dl","Vl","Wl","Xl","Yl","$l","bm","am","user","em","fm","gm","hm","auth_time","iat","expirationTime","authTime","issuedAtTime","signInProvider","signInSecondFactor","sign_in_second_factor","claims","im","jm","km","Zl","cm","dm","confirm","lm","mm","nm","qm","rm","sm","tm","multiFactor","enrolledFactors","toISOString","um","xm","ym","zm","af","Am","Bm","Cm","Fm","lastSignInTime","creationTime","Hm","photoURL","Im","authDomain","emulatorConfig","Jm","Km","Lm","$","W","X","Mm","Nm","Om","Pm","Qm","Rm","Sm","Um","Vm","emailVerified","isAnonymous","metadata","createdAt","lastLoginAt","providerData","Wm","Xm","Ym","Zm","$m","an","bn","Gm","Dm","cn","dn","wm","gn","additionalUserInfo","operationType","hn","reload","jn","kn","ga","mn","nn","pn","stsTokenManager","redirectEventId","sn","om","pm","mfaInfo","vm","grant_type","refresh_token","Wi","Em","nc","users","localId","providerUserInfo","rawId","en","passwordHash","rj","lf","un","wn","Yk","zn","yn","vn","xn","Bn","Cn","Dn","En","createSubscribe","Fn","tn","Tn","Gn","Qn","Hn","In","logFramework","Jn","Kn","Ln","Mn","On","Tm","Pn","qn","Rn","Sn","currentUser","Vn","_lat","Wn","Xn","Sk","languages","language","userLanguage","info","innerText","backgroundColor","border","textAlign","Nn","disableWarnings","hc","An","rn","Un","gc","continueUri","signinMethods","aj","execute","Yn","$n","ao","Zn","bo","co","eo","Me","fo","go","grecaptcha","Infinity","ho","io","jo","ko","theme","lo","mo","hasChildNodes","no","oo","po","ro","so","appVerificationDisabledForTesting","uo","vo","qo","firstChild","wo","xo","yo","Co","Fo","Go","Io","Jo","Ko","Persistence","LOCAL","SESSION","appVerificationDisabled","ActionCodeInfo","Operation","EMAIL_SIGNIN","PASSWORD_RESET","RECOVER_EMAIL","REVERT_SECOND_FACTOR_ADDITION","VERIFY_AND_CHANGE_EMAIL","VERIFY_EMAIL","Auth","AuthCredential","App","extendNamespace","isInteropObservable","Observable","scheduleObservable","isPromise","schedulePromise","isArrayLike","scheduleArray","isIterable","scheduleIterable","nextHandle","RESOLVED","activeHandles","findAndClearHandle","handle","Immediate","asapScheduler","asap","LinearGradient","loadStops","stopNode","attachTo","mapCoordinates","TRANSFORM","DefinitionMap","isDefinition","definitions","_kendoNode","clearDefinitions","insertAt","createDefinitions","load","domElement","childNodes","setElement","css","updateDefinition","mapTransform","cursor","mapStyle","hasDefinitions","definition","definitionChange","refUrl","mapDefinitions","skipBaseHref","baseHref","baseUrl","hashIndex","definitionMap","addDefinitions","removeDefinitions","addDefinition","mapItem","createDefinition","removeDefinition","_observers","methodName","_suspended","destinationOrNext","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","SafeSubscriber","_error","_complete","_parentOrParents","_parentSubscriber","observerOrNext","_context","useDeprecatedSynchronousErrorHandling","__tryOrSetError","__tryOrUnsub","wrappedComplete","coerceBooleanProperty","coerceNumberProperty","fallbackValue","_isNumberValue","coerceArray","coerceCssPixelValue","coerceElement","elementOrRef","coerceStringArray","separator","sourceValues","sourceValue","trimmedString","canReportError","core_1","forms_1","platform_browser_1","textMaskCore_1","ɵngcc0","TextMaskConfig","MASKEDINPUT_VALUE_ACCESSOR","forwardRef","MaskedInputDirective","textMaskConfig","guide","placeholderChar","keepCharPositions","ɵgetDOM","ngOnChanges","_setupMask","textMaskInputElement","inputElement","createTextMaskInputElement","propDecorators","Input","ɵɵdirectiveInject","Renderer2","ElementRef","ɵɵdefineDirective","ɵɵlistener","ɵɵProvidersFeature","ɵɵNgOnChangesFeature","TextMaskModule","ɵɵdefineNgModule","ɵɵdefineInjector","textMaskCore_2","conformToMask","_root","rtl","_template","_rootElement","ctm","getScreenCTM","alignToScreen","click","_click","mouseover","_mouseenter","mouseout","_mouseleave","mousemove","viewBox","_size","_offset","visual","_visual","wrap","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","radians","valueOrDefault","defaultValue","bindEvents","eventName","eventNames","vAlign","geometryChange","suspend","lastSegment","startAngle","endAngle","radiusX","radiusY","anticlockwise","arc","_addArcSegments","rx","ry","largeArc","swipe","curveTo","_bbox","intersectionsCount","_intersectionsTo","pathWidth","_isOnPathTo","boundingBox","ZERO","segmentBox","topRight","bottomLeft","pointAt","paintable","measurable","arcTo","_containsPoint","_isOnPath","transformation","currentTransform","unbindEvents","Z_STREAM_ERROR","_has","sources","shrinkBuf","buf","subarray","fnTyped","arraySet","dest","src_offs","dest_offs","flattenChunks","chunks","chunk","Buf8","Buf16","Uint16Array","Buf32","fnUntyped","typedOK","strApplyOK","strApplyUintOK","utf8len","table","string2buf","c2","m_pos","str_len","buf_len","_buf2binstring","buf2string","out","c_len","utf16buf","utf8border","adler32","adler","s1","s2","crcTable","makeTable","crc32","crc","inflate_fast","strm","_in","_out","beg","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","dist","from_source","next_in","avail_in","next_out","avail_out","lencode","distcode","lenbits","distbits","dolen","dodist","sane","lbase","lext","dbase","dext","inflate_table","lens","lens_index","codes","table_index","incr","here_bits","here_op","here_val","sym","curr","drop","used","huff","base_index","MAXBITS","offs","extra","extra_index","Z_STREAM_ERROR$1","TYPE$1","BAD$1","zswap32","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","lendyn","distdyn","back","was","lenfix","distfix","virgin","fixedtables","updatewindow","inflate","last_bits","last_op","last_val","hbuf","inf_leave","xflags","os","extra_len","hcrc","total_out","total_in","data_type","inflateSetDictionary","dictionary","dictLength","1","0","ZStream","GZheader","Inflate","windowBits","ended","inflateResetKeep","inflateReset","inflateReset2","inflateInit2","header","_mode","next_out_utf8","tail","utf8str","dict","allowBufError","binstring2buf","onEnd","onData","inflateEnd","zero","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","extra_lbits","extra_dbits","extra_blbits","bl_order","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","pending_buf","send_bits","bi_valid","bi_buf","send_code","bi_reverse","gen_codes","bl_count","next_code","MAX_BITS","init_block","LITERALS","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","last_lit","bi_windup","smaller","depth","_n2","_m2","pqdownheap","heap","heap_len","compress_block","ltree","dtree","lx","d_buf","l_buf","build_tree","desc","stree","heap_max","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block","stored_len","copy_block","_tr_tally","lit_bufsize","MAX_MATCH$1","MIN_LOOKAHEAD","HCRC_STATE","BUSY_STATE","FINISH_STATE","rank","zero$1","flush_pending","pending_out","flush_block_only","opt_lenb","static_lenb","max_blindex","level","black_mask","detect_data_type","l_desc","d_desc","bl_desc","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_stored","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH$1","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","configurationTable","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","HEAP_SIZE$1","MAX_BITS$1","deflate","old_flush","bstate","deflate_huff","deflate_rle","STATIC_TREES","bi_flush","_tr_align","toString$1","Deflate","memLevel","gzip","D_CODES","MAX_MATCH","LENGTH_CODES","L_CODES","tr_static_init","_tr_init","deflateResetKeep","lm_init","deflateReset","deflateInit2","avail","tmpDict","deflateSetDictionary","_dict_set","deflateEnd","deflate$1","deflator","environment","production","storageBucket","messagingSenderId","feedbackUrl","surveyResultsUrl","PI_DIV_2","setCenter","setRadius","_observerField","clone","_pointAt","extremeAngles","minPoint","maxPoint","currentPointX","currentPointY","currentPoint","pointDistance","combinedMatrix","_rect","mergeSort","_unsupportedIterableToArray","minLen","REPLACE_REGEX","normalizeText","objectKey","object","hashKey","asyncScheduler","elementPadding","paddingLeft","paddingTop","_arrayWithHoles","MatSortHeader_div_3_Template","_r2","_disableViewStateAnimation","ctx_r0","_getArrowViewState","_getArrowDirectionState","MatSortBase","_MatSortMixinBase","MatSort","sortables","_stateChanges","_direction","_disableClear","sortable","getNextSortDirection","disableClear","sortOrder","sortDirectionCycle","nextDirectionIndex","_markInitialized","ɵMatSort_BaseFactory","SORT_ANIMATION_TRANSITION","ENTERING","STANDARD_CURVE","matSortAnimations","indicator","leftPointer","rightPointer","arrowOpacity","arrowPosition","allowChildren","MatSortHeaderIntl","sortButtonLabel","MAT_SORT_HEADER_INTL_PROVIDER","parentIntl","MatSortHeaderBase","_MatSortHeaderMixinBase","MatSortHeader","_intl","_columnDef","_showIndicatorHint","_arrowDirection","_rerenderSubscription","_isSorted","_updateArrowDirection","_viewState","_setAnimationTransitionState","fromState","_setIndicatorHintVisible","deregister","_isDisabled","viewState","_toggleOnInteraction","_handleClick","_handleKeydown","_getAriaSortAttribute","_renderArrow","MatSortModule","defId","definitionId","ConnectableObservable","subjectFactory","_refCount","_isComplete","getSubject","_subject","_connection","ConnectableSubscriber","connectableObservableDescriptor","connectableProto","operator","_subscribe","refCount","connectable","_unsubscribe","emptyScheduled","wrapElements","otherAxis","stacks","maxSize","stackSize","addElementToStack","clippedBBox","getStacks","startElement","elementIdx","not","pred","notPred","MatOption_mat_pseudo_checkbox_0_Template","_c2","AnimationCurves","DECELERATION_CURVE","ACCELERATION_CURVE","SHARP_CURVE","AnimationDurations","COMPLEX","EXITING","VERSION$1","MATERIAL_SANITY_CHECKS","MatCommonModule","highContrastModeDetector","sanityChecks","_hasDoneGlobalChecks","_applyBodyHighContrastModeCssClasses","_sanityChecks","_checkDoctypeIsDefined","_checkThemeIsPresent","_checkCdkVersionMatch","_isTestEnv","__karma__","jasmine","_checksAreEnabled","doctype","testElement","computedStyle","full","mixinDisabled","_disabled","mixinColor","defaultColor","_color","colorPalette","mixinDisableRipple","_disableRipple","mixinTabIndex","defaultTabIndex","Mixin","_tabIndex","mixinErrorState","errorState","stateChanges","oldState","newState","errorStateMatcher","_defaultErrorStateMatcher","isErrorState","ngControl","_parentFormGroup","_parentForm","mixinInitialized","_pendingSubscribers","_notifySubscriber","SUPPORTS_INTL_API","MAT_DATE_LOCALE","_localeChanges","localeChanges","isDateInstance","isValid","locale","second","getYear","getMonth","getDate","firstValid","secondValid","compareDate","MAT_DATE_FORMATS","Intl","DEFAULT_MONTH_NAMES","DEFAULT_DATE_NAMES","DEFAULT_DAY_OF_WEEK_NAMES","ISO_8601_REGEX","valueFunction","valuesArray","NativeDateAdapter","matDateLocale","useUtcForDisplay","TRIDENT","_clampDate","EDGE","getFullYear","getDay","dtf","DateTimeFormat","month","timeZone","_stripDirectionalityCharacters","_format","day","weekday","year","_createDateWithOverflow","displayFormat","setFullYear","toDateString","years","addCalendarMonths","months","newDate","days","getUTCFullYear","_2digit","getUTCMonth","getUTCDate","NaN","setHours","setUTCFullYear","setUTCHours","getHours","getMinutes","getSeconds","getMilliseconds","format","NativeDateModule","dateInput","monthYearLabel","dateA11yLabel","monthYearA11yLabel","MatNativeDateModule","ErrorStateMatcher","MatLine","setLines","lines","startWith","setClass","isAdd","MatLineModule","fadeOutRipple","defaultRippleAnimationConfig","enterDuration","exitDuration","passiveEventOptions","pointerDownEvents","pointerUpEvents","_target","elementOrElementRef","_isPointerDown","_activeRipples","_pointerUpEventsRegistered","_containerElement","_containerRect","animationConfig","centered","distanceToFurthestCorner","ripple","transitionDuration","enforceStyleRecalculation","rippleRef","_mostRecentTransientRipple","_runTimeoutOutsideZone","isMostRecentTransientRipple","fadeOut","wasActive","rippleEl","_triggerElement","_removeTriggerEvents","_registerEvents","_onMousedown","_onTouchStart","_onPointerUp","isFakeMousedown","isSyntheticEvent","_lastTouchStartEvent","rippleDisabled","fadeInRipple","rippleConfig","terminateOnPointerUp","eventTypes","distX","distY","MAT_RIPPLE_GLOBAL_OPTIONS","MatRipple","globalOptions","_globalOptions","_rippleRenderer","_setupTriggerEventsIfEnabled","_trigger","fadeOutAll","setupTriggerEvents","configOrX","unbounded","MatRippleModule","MatPseudoCheckbox","MatPseudoCheckboxModule","_MatOptgroupMixinBase","_uniqueOptgroupIdCounter","_MatOptgroupBase","_labelId","ɵ_MatOptgroupBase_BaseFactory","MAT_OPTGROUP","_uniqueIdCounter","isUserInput","MAT_OPTION_PARENT_COMPONENT","_MatOptionBase","_active","_mostRecentViewValue","onSelectionChange","multiple","disableRipple","_getHostElement","_emitSelectionChangeEvent","_origin","viewValue","_selectViaInteraction","MatOption","_getTabIndex","_getAriaSelected","_countGroupLabelsBeforeOption","optionIndex","optionGroups","optionsArray","toArray","groups","groupCounter","_getOptionScrollPosition","optionOffset","optionHeight","currentScrollPosition","panelHeight","MatOptionModule","wnd","animationFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","loaded","__esModule","strFunction","previousConformedValue","previousPlaceholder","currentCaretPosition","conformedValue","rawValue","placeholder","indexesOfPipedChars","caretTrapIndexes","processCaretTraps","maskWithoutCaretTraps","convertMaskToPlaceholder","char","isNew","meta","someCharsRejected","isString","isNumber","isNil","indexes","setSelectionRange","showMask","selectionEnd","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","MatAutocompleteModule","MatBottomSheetModule","MAT_CHIPS_DEFAULT_OPTIONS","separatorKeyCodes","MatChipsModule","CdkAccordionModule","MatExpansionModule","MatGridListModule","MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS","disableToggleValue","MAT_SLIDE_TOGGLE_VALUE_ACCESSOR","_MatSlideToggleMixinBase","MatSlideToggle","defaults","_onTouched","_uniqueId","_checked","labelPosition","ariaLabelledby","toggleChange","focusOrigin","_inputElement","stopPropagation","_thumbEl","_thumbBarEl","_onChangeEvent","_onInputClick","_onLabelTextChange","_r0","_r4","inputId","_MatSlideToggleRequiredValidatorModule","MatSlideToggleModule","MatToolbarModule","CdkTreeModule","MatTreeModule","MaterialModule","changeImageFile","file","imageFile2","imageFile","ngOnInit","onFileUpload","fileInput","onFileChange","upFile","dataTransfer","files","reader","FileReader","alert","clearImageChoose","handleReaderLoaded","readAsDataURL","image","fileToShow","PrelooderPhotoComponent","formBuilder","router","authService","sharedService","afStorage","zone","refDataService","http","angularFireFunctions","verificationEmailSent","isLoggedIn","isPhone","hide","currencies","recaptchaValid","BASE_URL","getDataSource","loginState","firstFormGroup","firstName","lastName","userType","currency","bwbTag","forbiddenBwbTag","risksWarning","photo","codeForm","recaptchaVerifier","RecaptchaVerifier","containerOfRecapcha","debounceTime","includes","mainSpace","phoneE164","num","showError","scrollToFirstInvalidControl","tryRegister","sendLoginCode","scrollToTop","stepper","selectedIndex","doRegister","changeEmail","downloadPhoto","httpsCallable","userId","onChangeImage","uploadProgress","percentageChanges","snapshotChanges","finalize","getDownloadURL","downloadURL","changeUserProfile","onValueChange","onVerifyLoginCodeCreateUser","verifyLoginCode","nameLast","navigate","onSendRequestAgain","doSendEmailVerification","onToggleShowCode","ngOnDestroy","firstInvalidControl","getTopOffset","behavior","controlEl","scrollY","SignUpComponent","routingState","resetLinkSent","showCode","returnUrl","getPreviousUrl","loginForm","doLoginSESSIONPhone","doLogin","doLoginSESSION","forgotPassword","onSubmitCode","blockNewUser","LogInComponent","STATES","StartTradingDialogComponent","CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR","changeDateBirth","autoCorrectedDatePipe","onTouchedCallback","onChangeCallback","isValidDate","onBlur","todate","onClick","DatepickerOverviewComponent","currentUid","getCurrentUser","userUnfo","upload","imageType","nameDoc","getMetadata","downloadName","deleteDoc","onFileDonwload","onDocUpload","LoaderFotoComponent","updateTreeValidity","abstractControl","requiredIfValidator","formControl","popoverService","submitAddSaver","previewState","validateIfIsBank","_1","secondFormGroup","isRequired","countries","dateBirth","citizenUS","street","city","zipCode","addSaver","addPhoneOrEmail","imageFile1","imageFile1TaxId","imageFile1Country","imageFile2TaxId","imageFile2Country","passport","isBank","bankName","bankStreet","bankStreetNumber","bankCity","bankCountry","bankPostCode","bankIBANCash","bankIBANCustody","agreement","switchMap","getCurrentUserDetails","userInfo","toDate","firstPreview","onStep","addDetail","changeUserDetail","partialAccess","onChangeImage1","onChangeImage2","onChangePassport","onChangeDateBirth","onSubmitStep2","submitUserData","toggleAddSaver","popoverAnker","closePopover","IndividualsComponent","submitIndSaver","fifthFormGroup","tax","publickeyIsForbidden","addOptions","thirdFormGroup","options3","addOptions1","addOptions2","addOptions3","fourthFormGroup","indNameFirst","indNameLast","indTitle","indDateBirth","indStreet","indState","indCity","indZipCode","indImageFile","indOptions","extraRepresentative","extraNameFirst","validateRepresentative","extraNameLast","extraFunction","extraPhoneOrEmail","keyLength","onStepSm","stepperSm","onSubmitStep1","onSubmitStep1_2","onSubmitStep1_3","onSubmitStep3","onChangeIndDoc","onChangeIndImage","toggleAddOptions","toggleIndOptions","InstitutionsComponent","selectedUserType","DetailInfoComponent","editBwbTag","editCurrency","isProd","userTypeFormGroup","avatarFormGroup","avatar","oneClickSettingsFormGroup","tripleSInOneClick","userDetailsFormGroup","showCountriesToFriends","showSurveyResultsToFriends","settingsFormGroup","phone","emailProviderFormGroup","phoneProviderFormGroup","addPhoneProviderFormGroup","onUpdatePhoneNumber","doUpdatePhoneNumber","onUpdateEmail","doUpdateEmail","onSubmitEmailProvider","addEmailProvvider","onSubmitPhoneProvider","addPhoneProvider","onChangeUserType","addUserDetail","changeBwbTag","onChangeBwbTag","changeCurrency","onChangeCurrency","changeTripleSInOneClick","detailUser","SettingsComponent","onSendEmailVerification","EmailVerifiedComponent","getThisUrl","canActivate","CanActivateLoginGuard","CanActiveDetailInfoGuard","routes","SharedModule","forChild","renderOffset","BACKSPACE","TAB","ENTER","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT_ARROW","UP_ARROW","RIGHT_ARROW","DOWN_ARROW","DELETE","NINE","hasModifierKey","modifiers","modifier","setTransform","setClip","beginPath","setFill","fillText","baseline","setStroke","setLineDash","strokeText","vStack","takeWhile","inclusive","TakeWhileOperator","TakeWhileSubscriber","nextOrComplete","predicateResult","MutationObserverFactory","MutationObserver","ContentObserver","_mutationObserverFactory","_observedElements","_cleanupObserver","_observeElement","_unobserveElement","mutations","characterData","CdkObserveContent","_contentObserver","_currentSubscription","_debounce","debounce","ObserversModule","elementSize","rectSize","_isScalar","sink","nextOrObserver","toSubscriber","_trySubscribe","promiseCtor","getPromiseCtor","operations","closeOrLess","tolerance","xRotation","radian","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","nextAngle","_intervalCurvePoints","extremeX","extremeY","currentAngleX","bboxStartAngle","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","distance","angleRad","pointRadius","startPoint","p0","s1x","s2x","s1y","s2y","nx","ny","lineIntersection","calculateAngle","inAngleRange","arcParameters","parameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","cx","cy","uX","uY","vX","vY","acos","angleCosine","signEndAngle","normalizeArcParameters","commonjsGlobal","goog","class_1","STAT_EVENT","NO_ERROR","TIMEOUT","OPEN","PerformanceNavigationTiming","performance","getEntriesByType","nextHopProtocol","onabort","internalChannelParams","supportsCrossDomainXhr","concurrentRequestLimit","fastHandshake","detectBufferingProxy","sendBeacon","hostname","messageUrlParams","messageHeaders","clientProtocolHeaderRequired","initMessageHeaders","messageContentType","httpHeadersOverwriteParam","sendRawJson","httpSessionIdParam","__sm__","__data__","createWebChannel","HTTP_ERROR","COMPLETE","EventType","CLOSE","ERROR","MESSAGE","listenOnce","getLastError","getLastErrorCode","getStatus","getResponseJson","getResponseText","ErrorCode","Event","WebChannel","XhrIo","DEBUG","debug","WARN","crypto","msCrypto","getRandomValues","fromBase64String","atob","fromUint8Array","toBase64","btoa","toUint8Array","OK","CANCELLED","UNKNOWN","INVALID_ARGUMENT","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","UNAUTHENTICATED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","UNAVAILABLE","DATA_LOSS","Authorization","getAuthHeaderValueForFirstParty","ssl","tt","isInteger","MIN_SAFE_INTEGER","nt","rt","it","BatchGetDocuments","Commit","RunQuery","ot","ut","st","ct","lt","ft","forwardChannelRequestTimeoutMs","ht","seconds","nanoseconds","fromMillis","fromDate","toMillis","dt","padStart","wt","Et","Tt","It","At","Rt","Pt","yt","gt","Vt","bt","vt","St","Dt","pt","Ct","xt","Nt","Ft","Ot","kt","Mt","Lt","$t","Bt","qt","Ut","mt","fields","Qt","nanos","mapValue","__type__","stringValue","__previous_value__","__local_write_time__","timestampValue","booleanValue","bytesValue","referenceValue","geoPointValue","latitude","longitude","integerValue","doubleValue","arrayValue","jt","proto","Kt","Wt","Gt","zt","Ht","Jt","hasCommittedMutations","Yt","collectionGroup","filters","Xt","Zt","nullValue","before","limitType","targetId","sequenceNumber","lastLimboFreeSnapshotVersion","resumeToken","Fe","transformResults","updateTime","fieldTransforms","_n","track","docs","docChanges","fromCache","removedTargetIds","targetIds","cause","removeTarget","asc","in","wr","er","tr","rr","ir","updateMask","gr","updateTransforms","fieldPath","setToServerValue","appendMissingElements","removeAllFromArray","currentDocument","or","fieldPaths","ur","documents","sr","structuredQuery","collectionId","allDescendants","unaryFilter","dr","fieldFilter","pr","compositeFilter","lr","fr","cr","vr","hr","mr","yr","br","Ir","es","ns","ss","rs","cs","us","hs","ls","_r","aborted","_s","oncomplete","Nr","xr","store","Dr","Er","ds","ws","kr","Es","Ts","Is","As","Rs","onblocked","oldVersion","Ps","ys","onversionchange","gs","runTransaction","fs","Tr","Vs","ps","bs","Ss","Ar","Ds","Cs","xs","Ns","Fs","Os","primaryKey","continue","vs","openKeyCursor","Sr","Or","ks","Ms","Ls","$s","Bs","Us","Qs","Ks","Ws","Pr","Rr","js","Gs","zs","Hs","Js","Ys","Xs","Zs","Lr","Ur","targetChange","targetChangeType","documentChange","documentDelete","readTime","documentRemove","addTarget","labels","Cr","lastStreamToken","streamToken","writeResults","commitTime","Vr","terminate","Mr","qr","Fr","jr","Br","Gr","zr","progress","Kr","batchId","baseMutations","Qr","batch","Wr","Yr","getEntries","Hr","Jr","$r","Xr","maxValue","Zr","mergeFields","ignoreUndefinedProperties","cacheSizeBytes","experimentalForceLongPolling","experimentalAutoDetectLongPolling","sessionIndex","ownerId","allowTabSynchronization","leaseTimestampMs","lastAcknowledgedBatchId","localWriteTimeMs","userMutationsIndex","userMutationsKeyPath","prefixForUser","prefixForPath","PLACEHOLDER","unknownDocument","noDocument","readTimeIndex","readTimeIndexPath","collectionReadTimeIndex","collectionReadTimeIndexPath","byteSize","canonicalId","lastListenSequenceNumber","queryTargetsIndexName","queryTargetsKeyPath","documentTargetsIndex","documentTargetsKeyPath","highestTargetId","highestListenSequenceNumber","lastRemoteSnapshotVersion","targetCount","clientId","updateTimeMs","networkEnabled","inForeground","bundleId","createTime","bundledQuery","_o","Eo","IDBKeyRange","bound","only","To","Ao","Ro","Po","Vo","lowerBound","upperBound","So","Do","No","Oo","Mo","Lo","$o","Bo","Uo","Qo","Wo","zo","Ho","Yo","Xo","Zo","updateMetadata","autoIncrement","createIndex","unique","deleteObjectStore","newVersion","hasPendingWrites","persistence","tu","eu","nu","su","iu","ru","ou","cu","au","uu","hu","lu","_u","fu","du","wu","Eu","Tu","Iu","mu","Au","Ru","Pu","yu","gu","Vu","pu","bu","vu","Su","Du","Cu","xu","Nu","Fu","activeTargetIds","onlineState","Ou","ku","Mu","Lu","$u","Bu","qu","Uu","Qu","storage","Ku","Wu","ju","Gu","zu","Hu","Ju","Yu","Xu","Zu","_h","storageArea","Jh","onError","_l","includeMetadataChanges","fl","byteLength","taskState","documentsLoaded","bytesLoaded","totalDocuments","totalBytes","namedQuery","documentMetadata","as","t_","ms","synchronizeTabs","initialize","r_","o_","c_","a_","u_","h_","l_","forceOwnership","f_","d_","w_","E_","muted","T_","I_","m_","A_","R_","s_","P_","y_","g_","V_","p_","b_","_methodName","v_","S_","firestore","withConverter","C_","D_","x_","N_","F_","O_","k_","M_","L_","B_","q_","U_","Q_","K_","W_","j_","G_","z_","H_","J_","getPrototypeOf","Y_","X_","Z_","found","missing","commit","updateFunction","getConfiguration","enqueue","DOMException","fromFirestore","toFirestore","serverTimestamps","oldIndex","enableIndexedDbPersistence","enableMultiTabIndexedDbPersistence","clearIndexedDbPersistence","enableNetwork","disableNetwork","enablePersistence","experimentalForceOwningTab","clearPersistence","_removeServiceInstance","waitForPendingWrites","onSnapshotsInSync","loadBundle","onSnapshot","startAfter","endBefore","documentId","serverTimestamp","arrayUnion","arrayRemove","onProgress","e_","n_","i_","Firestore","GeoPoint","Timestamp","Blob","Transaction","WriteBatch","DocumentReference","DocumentSnapshot","QueryDocumentSnapshot","QuerySnapshot","CollectionReference","FieldPath","FieldValue","setLogLevel","CACHE_SIZE_UNLIMITED","fromRef","_fromRef","fromCollectionRef","pairwise","priorAction","currentDoc","docChange","priorDoc","sortedChanges","combined","sliceAndSplice","copiedArray","combineChange","combineChanges","original","deleteCount","returnArray","validateEventsArray","afs","schedulers","outsideAngular","keepUnstableUntilFirst","validatedEvents","idField","observeOn","insideAngular","queryFn","associateQuery","priorPayload","fromCollectionRefScheduled$","ENABLE_PERSISTENCE","PERSISTENCE_SETTINGS","SETTINGS","USE_EMULATOR","collectionRef","AngularFirestore","nameOrConfig","shouldEnablePersistence","platformId","persistenceSettings","_useEmulator","useAuthEmulator","persistenceEnabled$","pathOrRef","refInZone","queryGroupFn","eventElement","touch","initialTouch","AsyncScheduler","SchedulerAction","delegate","MessageService","ComponentMessages","notifyChanges","override","RTL","L10N_PREFIX","LocalizationService","messageService","_rtl","shortKey","alt","clientTop","clientLeft","TakeOperator","TakeSubscriber","catchError","selector","CatchOperator","caught","CatchSubscriber","err2","_unsubscribeAndRecycle","_assertThisInitialized","ReferenceError","matrixRegexp","transformMatrix","matrixString","members","parseMatrix","elementScale","parentMatrix","skip","showSkip","FeedbackComponent","ERR_SW_NOT_SUPPORTED","controllerChanges","currentController","defer","controllerWithChanges","worker","getRegistration","multicast","throwError","tap","sw","toPromise","waitForStatus","eventsOfType","SwPush","subscriptionChanges","isEnabled","messages","notificationClicks","pushManager","workerDrivenSubscriptions","getSubscription","pushOptions","userVisibleOnly","decodeBase64","serverPublicKey","applicationServerKey","ArrayBuffer","SwUpdate","available","activated","unrecoverable","statusNonce","generateNonce","postMessageWithStatus","SCRIPT","ngswAppInitializer","readyToRegister$","registrationStrategy","delayWithTimeout","whenStable","handleError","stable","ngswCommChannelFactory","ServiceWorkerModule","_inherits","subClass","superClass","_geometry","_toConsumableArray","arrayLikeToArray","iterableToArray","unsupportedIterableToArray","saveAs","fileName","dataURI","msSaveBlob","link","download","URL","createObjectURL","revokeObjectURL","DisableControlDirective","dueTime","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","Class","_createSuper","Derived","hasNativeReflectConstruct","Super","NewTarget","getSymbolIterator","ellipseExtremeAngles","MatPaginator_div_2_mat_form_field_3_mat_option_2_Template","pageSizeOption_r6","MatPaginator_div_2_mat_form_field_3_Template","_r8","_changePageSize","ctx_r3","_formFieldAppearance","itemsPerPageLabel","_displayedPageSizeOptions","MatPaginator_div_2_div_4_Template","ctx_r4","MatPaginator_div_2_Template","MatPaginator_button_6_Template","_r10","firstPage","ctx_r1","firstPageLabel","_previousButtonsDisabled","MatPaginator_button_13_Template","_r12","lastPage","ctx_r2","lastPageLabel","_nextButtonsDisabled","MatPaginatorIntl","nextPageLabel","previousPageLabel","getRangeLabel","endIndex","MAT_PAGINATOR_INTL_PROVIDER","MAT_PAGINATOR_DEFAULT_OPTIONS","MatPaginatorMixinBase","_MatPaginatorMixinBase","_MatPaginatorBase","_pageIndex","_length","_pageSizeOptions","_hidePageSize","_showFirstLastButtons","_intlChanges","pageSizeOptions","hidePageSize","showFirstLastButtons","_pageSize","_updateDisplayedPageSizeOptions","_initialized","hasNextPage","previousPageIndex","_emitPageEvent","hasPreviousPage","getNumberOfPages","maxPageIndex","MatPaginator","intl","formFieldAppearance","previousPage","nextPage","MatPaginatorModule","_c3","MatListBase","_MatListMixinBase","MatListItemBase","_MatListItemMixinBase","MAT_LIST","MAT_NAV_LIST","MatNavList","ɵMatNavList_BaseFactory","MatListAvatarCssMatStyler","MatListIconCssMatStyler","MatListItem","navList","_isInteractiveList","_getListType","_list","_lines","_avatar","_icon","_isRippleDisabled","MatListModule","keyStr","HAS_TYPED_ARRAYS","support","BASE64","enc1","enc2","enc3","enc4","chr2","chr3","encode","bytes","chr1","BinaryStream","ensure","writeString","writeByte","readByte","readShort","writeShort","readLong","writeLong","readLong_","writeLong_","times","eof","readFixed","writeFixed","readShort_","writeShort_","readFixed_","writeFixed_","readString","nbytes","saveExcursion","writeBase64","sortedKeys","SimpleGlyph","CompoundGlyph","NameEntry","POSTSCRIPT_GLYPHS","CmapEntry","scalerType","tableCount","searchRange","entrySelector","rangeShift","tables","entry","checksum","Ctor","maxpow2","directoryLength","headOffset","tableData","adjustment","sum","rawData","revision","checkSumAdjustment","magicNumber","unitsPerEm","created","modified","xMin","yMin","xMax","yMax","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","offsets","needsLongFormat","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","glyphIds","metrics","hhea","advance","lsb","leftSideBearings","maxp","forGlyph","GlyfTable","idOffsets","old2new","loca","lengthOf","offsetOf","numberOfContours","glyph","glyphs","oldIds","NameTable","platformID","platformSpecificID","languageID","nameID","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","psName","strCount","strTable","PostTable","numberOfGlyphs","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","mapping","post","glyphFor","CmapTable","codeMap","segCount","endCode","startCode","idDelta","idRangeOffset","glyphId","ngroups","endCharCode","glyphCode","ncid2ogid","ogid2ngid","startCodes","endCodes","new_gid","charcode","segCountX2","deltas","rangeOffsets","startGlyph","renderCharmap","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","familyClass","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContext","subsetTag","subset","unicodes","ngid2ogid","firstChar","nextGid","nextSubsetTag","string","counter","ucs2decode","use","old_gid","cmap","glyf","compound","glyphsFor","old_gid_ids","lastChar","hmtx","os2","directory","cid","contents","numFonts","readTable","NL","RESOURCE_COUNTER","PAPER_SIZE","a0","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","makeOutput","indentLevel","beforeRender","renderArray","renderDate","writeData","withIndent","indent","pad","getPaperOptions","unitsToPoints","FONT_CACHE","IMAGE_CACHE","clearImageCache","loadOne","loadFonts","cont","atobUint8Array","createUint8Array","VBArray","responseBody","loadBinary","urls","loadImages","bloburl","blob","crossOrigin","_load","_onerror","_onload","_trycanvas","canvas","imgdata","getImageData","ex","hasAlpha","rgb","alpha","rawbytes","readAsArrayBuffer","loadImage","objcount","objects","renderValue","renderFull","wrapObject","pages","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","catalog","pageTree","nameTree","JavaScript","Names","JS","setPages","Producer","Title","Author","Keywords","Creator","CreationDate","paperOptions","contentWidth","contentHeight","Contents","Parent","MediaBox","_content","xrefOffset","zeropad","Size","Root","Info","asStream","forStroke","_opacityGSCache","Type","CA","_resourceName","getUTCHours","getUTCMinutes","getUTCSeconds","mm2pt","cm2pt","in2pt","inch","utf16be","txt","escape","PDFName_cache","compress","Filter","Length","pagesObj","Pages","Kids","Count","pageObj","SOF_CODES","colorSpace","bitsPerComponent","marker","Subtype","Width","Height","BitsPerComponent","ColorSpace","Decode","SMask","BaseFont","Encoding","_pdf","_font","_sub","makeSubset","stemV","isSerif","isScript","encodeText","widthOfGlyph","fontStream","Length1","descriptor","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","charWidths","loop","gid","descendant","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","unimap","unimapStream","ToUnicode","cidToGidMap","makeHash","cacheColorGradientFunction","r1","g1","r2","g2","FunctionType","Domain","Range","C0","C1","cacheOpacityGradientFunction","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_matrix","_annotations","_fontSize","_contextStack","ProcSet","Resources","Font","ExtGState","XObject","Pattern","Shading","Annots","isIdentityMatrix","mmul","dx","dy","sx","sy","_requireTextMode","getFont","requestedWidth","_requireFont","outputWidth","getTextWidth","uri","_toPage","Border","URI","getOpacityGS","oname","funcs","cur","prevColor","curColor","opacities","colors","assemble","Functions","Bounds","Encode","makeGradientFunctions","coords","shading","ShadingType","Coords","Extend","cacheColorGradient","AIS","FormType","BBox","CS","s0","cacheOpacityGradient","cacheGradient","sname","dashPhase","mitterLimit","_X","_Y","ellipse","getImage","line","unquote","parseFontDef","fontdef","fontFamily","italic","variant","bold","lineHeight","getFontURL","mkFamily","FONT_MAPPINGS","fontAlias","alias","defineFont","d1","e1","f1","d2","invisible","fillAndClip","strokeAndClip","fillStrokeClip","getMatIconNameNotFoundError","iconName","getMatIconFailedToSanitizeUrlError","getMatIconFailedToSanitizeLiteralError","literal","SvgIconConfig","svgText","MatIconRegistry","_httpClient","_sanitizer","_errorHandler","_svgIconConfigs","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_defaultFontSetClass","addSvgIconInNamespace","addSvgIconLiteralInNamespace","_addSvgIconConfig","cleanLiteral","sanitize","HTML","addSvgIconSetInNamespace","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","safeUrl","RESOURCE_URL","cachedIcon","cloneSvg","_loadSvgIconFromConfig","svg","iconKey","_getSvgFromConfig","iconSetConfigs","_getSvgFromIconSetConfigs","_svgElementFromConfig","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","iconSetConfig","_loadSvgIconSetFromConfig","foundIcon","_extractSvgIconFromSet","_fetchIcon","iconSet","iconSource","iconElement","cloneNode","_setSvgAttributes","_toSvgElement","_svgElementFromString","iconConfig","inProgressFetch","configNamespace","svgElement","MatIconBase","_MatIconMixinBase","MAT_ICON_LOCATION","_location","getPathname","pathname","funcIriAttributes","funcIriAttributeSelector","funcIriPattern","MatIcon","_iconRegistry","ariaHidden","_inline","_currentIconFetch","inline","_svgIcon","_updateSvgIcon","_clearSvgElement","_fontSet","_cleanupFontValue","_updateFontIconClasses","_fontIcon","cachedElements","_elementsWithExternalReferences","newPath","_previousPath","_prependPathToReferences","svgIcon","styleTags","querySelectorAll","_cacheChildrenWithExternalReferences","layoutElement","_usingFontIcon","fontSetClass","fontSet","classNameForFontAlias","getDefaultFontSetClass","_previousFontSetClass","fontIcon","_previousFontIconClass","elementsWithFuncIri","elementWithReference","rawName","_svgNamespace","_svgName","_splitIconName","getNamedSvgIcon","_setSvgElement","MatIconModule","hostReportError","observableFactory","geometryAccessor","fieldName","defineGeometryAccessors","TBase","_slicedToArray","arrayWithHoles","_arr","nonIterableRest","ENTITY_REGEX","decodeEntities","lastIndex","setY","renderTextAnchor","renderContent","DASH_ARRAYS","longdash","dashdot","longdashdot","longdashdotdot","SOLID","BUTT","_items","AnimationFactory","_nonIterableRest","periodOrScheduler","period","due","member","_wrap","_set","composite","parentObj","OptionsStore","_clear","wrapped","optionsAccessor","GradientStop","defineOptionsAccessors","Color","formats","resolvedColor","resolveColor","formatRegex","processor","channels","normalizeByte","padDigit","namedColors","percBrightness","MAT_RADIO_DEFAULT_OPTIONS","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MatRadioGroup","MatRadioChange","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_labelPosition","_updateRadioButtonNames","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","_radios","radio","_markForCheck","ɵMatRadioGroup_BaseFactory","MatRadioButton","MatRadioButtonBase","_MatRadioButtonMixinBase","_MatRadioButtonBase","radioGroup","_radioDispatcher","_providerOverride","_removeUniqueSelectionListener","newCheckedState","notify","_setDisabled","_touch","groupValueChanged","ariaDescribedby","changeDetector","focusMonitor","radioDispatcher","animationMode","providerOverride","_onInputChange","MatRadioModule","matTooltipAnimations","tooltipState","passiveListenerOptions","MAT_TOOLTIP_SCROLL_STRATEGY","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","scrollThrottle","MAT_TOOLTIP_DEFAULT_OPTIONS","showDelay","hideDelay","touchendHideDelay","MatTooltip","_scrollDispatcher","_ariaDescriber","_viewInitialized","_pointerExitEventsInitialized","touchGestures","_message","_passiveListeners","_isTooltipVisible","_updatePosition","_tooltipInstance","show","_setupPointerEnterEventsIfNeeded","removeDescription","_updateTooltipMessage","describe","_tooltipClass","_setTooltipClass","_touchstartTimeout","_showTimeoutId","_hideTimeoutId","_detach","_portal","TooltipComponent","afterHidden","scrollableAncestors","getAncestorScrollContainers","withTransformOriginOn","withFlexibleDimensions","withViewportMargin","withScrollableContainers","positionChanges","scrollableViewProperties","isOverlayClipped","_getOrigin","_getOverlayPosition","main","fallback","originPosition","isLtr","_invertPosition","overlayPosition","onMicrotaskEmpty","tooltipClass","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","_addListeners","exitListeners","touchendListener","IOS","ANDROID","gestures","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","webkitUserDrag","touchAction","webkitTapHighlightColor","_breakpointObserver","_visibility","_closeOnInteraction","_onHide","_isHandset","_handleBodyInteraction","tmp_0_0","_animationStart","_animationDone","pipes","MatTooltipModule","WindowService","nodeRect","nodeBottomRight","inserted","inBounds","_initChildren","halfWidth","halfHeight","QuadNode","AnimationBuilder","AUTO_STYLE","timings","sequence","steps","tokens","keyframes","stateChangeExpr","expr","animateChild","scheduleMicroTask","NoopAnimationPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_started","_finished","parentPlayer","hasStarted","_onStart","triggerMicrotask","_onFinish","finish","phaseName","methods","AnimationGroupPlayer","_players","players","doneCount","destroyCount","startCount","onDestroy","onStart","pause","restart","timeAtPosition","setPosition","longestPlayer","longestSoFar","getPosition","beforeDestroy","ɵPRE_STYLE","isNode","optimizeGroupPlayer","normalizeKeyframes","driver","normalizer","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","isSameOffset","normalizedKeyframe","normalizedProp","normalizedValue","normalizePropertyName","normalizeStyleValue","LINE_START","listenOnPlayer","copyAnimationEvent","makeAnimationEvent","triggerName","getOrSetAsInMap","parseTimelineCommand","separatorPos","_contains","elm1","elm2","_matches","_query","_isNode","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","elm","_CACHED_BODY","_IS_WEBKIT","containsVendorPrefix","hypenatePropsObject","newObj","newProp","NoopAnimationDriver","easing","AnimationDriver","NOOP","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","resolveTimingValue","_convertTimeValueToMS","resolveTiming","allowNegativeValues","delayMatch","easingVal","containsErrors","parseTimeExpression","copyObj","copyStyles","readPrototype","getStyleAttributeString","writeStyleAttribute","styleAttrValue","startsWith","formerStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","PARAM_REGEX","extractStyleParams","interpolateParams","varName","localVal","iteratorToArray","DASH_CASE_REGEXP","allowPreviousPlayerStylesMerge","balancePreviousStylesIntoKeyframes","previousStyles","previousStyleProps","startingKeyframe","missingStyleProps","computeStyle","visitDslNode","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","ANY_STATE","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","makeLambdaFromStates","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","buildAnimationAst","_driver","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","transitions","stateDef","styleAst","astParams","containsDynamicStyles","missingSubs","isObject","stylesObj","missingSubsArr","transitionValue","expressions","matchers","eventStr","parseAnimationAlias","parseInnerTransitionStr","normalizeAnimationOptions","furthestTime","innerAst","timingAst","makeTimingAst","strValue","ast","dynamic","constructTimingAst","currentAnimateTimings","styleMetadata","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","collectedEasing","styleData","styleMap","endTime","startTime","tuple","validateStyleProperty","collectedEntry","updateCollectedStyle","totalKeyframesWithOffsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","generatedOffset","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","hasAmpersand","normalizeSelector","originalSelector","currentTransition","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","_map","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","buildAnimationTimelines","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","buildKeyframes","currentTimeline","setStyles","timelines","timeline","containsAnimation","allowOnlyTimelineStyles","elementInstructions","consume","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","invokeQuery","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","skipIfExists","newOptions","optionsToUpdate","paramsToUpdate","oldParams","newTime","AnimationTimelineContext","fork","_copyOptions","updatedTimings","builder","stretchStartingKeyframe","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","TimelineBuilder","allStyles","allProperties","flattenStyles","_updateStyle","properties","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","decimalPoints","mult","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","_triggerName","_stateStyles","nextState","matchFns","oneOrMoreTransitionsMatch","stateName","backupStateStyler","stateStyler","backupStyles","buildStyles","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","defaultParams","combinedParams","styleObj","transitionFactories","balanceProperties","fallbackTransition","key1","key2","EMPTY_INSTRUCTION_MAP","bodyNode","_normalizer","_animations","_playersById","autoStylesMap","inst","_buildPlayer","_getPlayer","baseEvent","QUEUED_CLASSNAME","DISABLED_CLASSNAME","DISABLED_SELECTOR","STAR_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","isObj","normalizeTriggerValue","VOID_VALUE","DEFAULT_STATE_VALUE","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","phase","triggersWithStates","statesByElement","afterFlush","defaultToFallback","_getTrigger","absorbOptions","playersOnElement","playersByElement","matchTransition","isFallbackTransition","totalQueuedPlayers","objEquals","matchStyles","reportError","stateMap","elementPlayers","namespaces","fetchNamespacesByElement","triggerLeaveAnimation","clearElementCache","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","markElementAsRemoved","processLeaveNode","visitedTriggers","engine","childElementCount","_signalRemovalForInnerTriggers","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","prepareLeaveAnimationListeners","removalFlag","destroyInnerAnimations","_onRemovalComplete","microtaskId","destroyed","markedForDestroy","d0","containsElement","containsData","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","_balanceNamespaceList","collectEnterElement","createNamespace","_fetchNamespace","elementStates","nsId","isElementNode","details","insertNode","isHostElement","removeNode","hostNS","subTimelines","skipBuildAst","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","matchesElement","markElementAsDisabled","cleanupFns","_flushAnimations","quietFns","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","drainQueuedTransitions","nodeIsOrphaned","_buildInstruction","stringMap","setVal","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","elementContainsData","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","timelineInstruction","finalPlayers","previousPlayers","_flattenGroupPlayersRecur","wrappedPlayer","currentValues","deleteOrUnsetInMap","_player","_containsRealPlayer","_queuedCallbacks","triggerCallback","_queueEvent","cloakElement","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","nodeSet","localRootMap","k1","k2","postEntry","preEntry","_triggerCache","_transitionEngine","_timelineEngine","componentId","cacheKey","buildTrigger","registerTrigger","property","eventPhase","whenRenderingDone","packageNonAnimatableStyles","startStyles","endStyles","filterNonAnimatableStyles","SpecialCasedStyles","_startStyles","_endStyles","initialStyles","initialStylesByElement","_initialStyles","isNonAnimatableStyle","ANIMATION_PROP","ANIMATIONEND_EVENT","_duration","_delay","_easing","_fillMode","_onDoneFn","_startTime","_eventFn","_handleCallback","anim","getAnimationStyle","countChars","setAnimationStyle","addRemoveAnimationEvent","playPauseAnimation","findIndexForAnimation","_ngTestManualTimestamp","elapsedTime","animationName","findMatchingTokenIndex","removeKeyframeAnimation","searchToken","doRemove","_finalStyles","_specialStyles","currentSnapshot","_buildStyler","_styler","_flushStartFns","_flushDoneFns","finished","_startingStyles","__initialized","_styles","removeProperty","KEYFRAMES_NAME_PREFIX","_count","_head","keyframeStr","tab","kfElm","previousCssKeyframePlayers","flattenKeyframesIntoStyles","buildKeyframeElement","specialStyles","flatKeyframes","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","_isNativeImpl","getElementAnimateFn","_cssKeyframesDriver","scrubberAccessRequested","useKeyframes","playerOptions","previousWebAnimationPlayers","BrowserAnimationBuilder","rootRenderer","_nextAnimationId","createRenderer","None","issueAnimationCommand","_command","_listen","ANIMATION_PREFIX","DISABLE_ANIMATIONS_FLAG","AnimationRendererFactory","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","_scheduleCountTask","destroyNode","createText","onInsert","refChild","isMove","onRemove","selectorOrNode","preserveContent","selectRootElement","nextSibling","removeStyle","disableAnimations","dotIndex","resolveElementFromTarget","scheduleListenerCallback","InjectableAnimationEngine","ANIMATION_MODULE_TYPE","SHARED_ANIMATION_PROVIDERS","BROWSER_ANIMATIONS_PROVIDERS","BrowserAnimationsModule","_construct","receiver","getOwnPropertyDescriptor","ORIGIN","REGION","NEW_ORIGIN_BEHAVIOR","AngularFireFunctions","region","newOriginBehavior","functions","useFunctionsEmulator","bufferSize","AngularFireFunctionsModule","precision","power","MatMenu_ng_template_0_Template","panelId","_classList","_panelAnimationState","matMenuAnimations","transformMenu","fadeInItems","MAT_MENU_CONTENT","MAT_MENU_PANEL","MatMenuItemBase","_MatMenuItemMixinBase","MatMenuItem","_parentMenu","_hovered","_focused","_highlighted","_triggersSubmenu","addItem","icons","icon","_checkDisabled","_handleMouseEnter","MAT_MENU_DEFAULT_OPTIONS","overlapTrigger","xPosition","yPosition","menuPanelUid","_MatMenuBase","_xPosition","_yPosition","_directDescendantItems","_tabSubscription","overlayPanelClass","_overlapTrigger","_hasBackdrop","setPositionClasses","previousPanelClass","_previousPanelClass","_updateDirectDescendants","_keyManager","withWrap","withTypeAhead","withHomeAndEnd","tabOut","focusedItem","updateActiveItem","_item","manager","parentMenu","setFocusOrigin","onKeydown","lazyContent","_focusFirstItem","setFirstItemActive","activeItem","setActiveItem","elevation","newElevation","customElevation","_previousElevation","posX","posY","_isAnimating","activeItemIndex","_allItems","notifyOnChanges","MatMenu","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","passiveEventListenerOptions","MatMenuTrigger","_menuItemInstance","_menuOpen","_closingActionsSubscription","_hoverSubscription","_menuCloseSubscription","_handleTouchStart","_openedBy","menuOpened","onMenuOpen","menuClosed","onMenuClose","_parentMaterialMenu","triggersSubmenu","menu","_menu","_destroyMenu","_checkMenu","_handleHover","closeMenu","openMenu","_setPosition","_getPortal","menuData","_menuClosingActions","_initMenu","_startAnimation","menuOpen","_resetAnimation","_attached","_setIsMenuOpen","_setMenuElevation","focusFirstItem","setElevation","isOpen","_subscribeToPositions","withLockedPosition","connectionPair","originFallbackX","overlayFallbackY","originFallbackY","overlayFallbackX","backdrop","parentClose","hover","toggleMenu","_handleMousedown","_deprecatedMatMenuTriggerFor","_MatMenuDirectivesModule","MatMenuModule","subscribeToArray","iterable","identity","hasDefaultValue","newFill","_toArray","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","PRECISION","toPath","nextId","MatBadgeBase","_MatBadgeMixinBase","MatBadge","_hasContent","_overlap","_setColor","_description","newDescription","badgeElement","_badgeElement","_updateHostAriaDescription","_hidden","contentChange","_updateTextContent","description","_stringifyContent","_createBadgeElement","activeClass","contentClass","_clearExistingBadges","oldDescription","cssClass","currentChild","overlap","isAbove","isAfter","MatBadgeModule","BOM","encodeUTF8","encodeUnit","codeUnit","encodeUTF16BE","trail","shareReplay","configOrBufferSize","windowTime","useRefCount","innerSub","shareReplayOperator","DEFAULT_STROKE","TENANT_ID","LANGUAGE_CODE","USE_DEVICE_LANGUAGE","PERSISTENCE","AngularFireAuth","_settings","useDeviceLanguage","logins","setPersistence","authState","idTokenResult","redirectResult","getRedirectResult","fromCallback","authStateChanged","onAuthStateChanged","idTokenChanged","onIdTokenChanged","getIdToken","getIdTokenResult","spy","applyActionCode","checkActionCode","confirmPasswordReset","createUserWithEmailAndPassword","fetchSignInMethodsForEmail","isSignInWithEmailLink","sendSignInLinkToEmail","sendPasswordResetEmail","signInAndRetrieveDataWithCredential","signInAnonymously","signInWithCredential","signInWithCustomToken","signInWithEmailAndPassword","signInWithPhoneNumber","signInWithEmailLink","signInWithPopup","signInWithRedirect","signOut","updateCurrentUser","verifyPasswordResetCode","AngularFireAuthModule","renderPoints","hasFill","setGradientFill","fillStyle","globalAlpha","createLinearGradient","createRadialGradient","addColorStop","toCssRgba","addGradientStops","strokeStyle","lineWidth","mozDash","webkitLineDash","SVG_NS","DEFAULT_HOST","FirebaseStorageError","prependCode","customData","codeEquals","Code","cannotSliceBlob","invalidArgument","appDeleted","invalidRootOperation","invalidFormat","internalError","StringFormat","RAW","BASE64URL","DATA_URL","StringData","dataFromString","stringData","utf8Bytes_","base64Bytes_","DataURLParts","rest","decoded","percentEncodedBytes_","hasMinus","hasUnder","hasPlus","hasSlash","InternalTaskState","TaskState","RUNNING","PAUSED","SUCCESS","CANCELED","taskStateFromInternalTaskState","NetworkXhrIo","sent_","xhr_","errorCode_","sendPromise_","ABORT","NETWORK_ERROR","getErrorCode","addUploadProgressListener","removeUploadProgressListener","XhrIoPool","createXhrIo","isNativeBlob","isNativeBlobDefined","validateNumber","argument","minValue","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","FbsBlob","elideCopy","blobType","data_","size_","type_","startByte","endByte","sliced","webkitSlice","mozSlice","blobby","uint8Arrays","finalLength_1","merged_1","index_1","uploadData","bucket","fullServerUrl","bucketOnlyServerUrl","makeFromBucketSpec","bucketString","bucketLocation","makeFromUrl","bucketDomain","gsRegex","httpModify","loc","firebaseStorageHost","indices","postModify","captures","pathValue","invalidUrl","jsonObjectOrNull","lastComponent","makeUrl","urlPart","makeQueryString","queryPart","noXform_","Mapping","server","local","xform","mappings_","getMappings","mappings","nameMapping","_metadata","fullPath","xformPath","sizeMapping","fromResourceString","resourceString","resource","makeStorageReference","addRef","fromResource","toResourceString","RequestInfo","errorHandler","progressCallback","successCodes","additionalRetryCodes","handlerCheck","cndn","metadataHandler","sharedErrorHandler","newErr","objectErrorHandler","shared","maxOperationRetryTime","requestInfo","metadataForUpload_","metadataClone","determineContentType_","ResumableUploadStatus","finalized","checkResumeHeader_","allowed","resumableUploadChunkSize","Observer","UploadTaskSnapshot","bytesTransferred","argsToForward","UploadTask","_transferred","_needToFetchStatus","_needToFetchMetadata","_uploadUrl","_request","_chunkMultiplier","_resolve","_reject","_ref","_blob","_mappings","_resumable","_shouldDoResumable","completeTransitions_","_transition","_metadataErrorHandler","_promise","_start","_makeProgressCallback","sizeBefore","_updateProgress","_createResumable","_fetchStatus","_fetchMetadata","_continueUpload","_oneShotUpload","_resolveToken","getAuthToken","metadataForUpload","maxUploadRetryTime","createResumableUpload","createRequest","makeRequest","getPromise","sizeString","getResumableUploadStatus","statusRequest","status_","bytesLeft","bytesToUpload","uploadStatus","newCurrent","continueResumableUpload","uploadRequest","newStatus","_increaseMultiplier","metadataRequest","boundary","genBoundary","metadata_","metadataString","multipartUpload","multipartRequest","transferred","old","_notifyObservers","wasPaused","externalState","completed","_addObserver","_removeObserver","onFulfilled","onRejected","_notifyObserver","_finishPromise","triggered","_service","newRef","_throwIfRoot","prefixes","listAllHelper","pageToken","list$1","nextPageToken","maxResults","isRoot","listResult","pathWithoutTrailingSlash","reference","fromBackendResponse","fromResponseString","listHandler","canonicalChildPath","UploadTaskSnapshotCompat","_delegate","UploadTaskCompat","_snapshot","wrappedNextOrObserver","taskSnapshot","ListResultCompat","ReferenceCompat","uploadBytesResumable","putString","uploadString","listAll","getMetadata$1","updateMetadata$1","downloadUrlFromResourceString","downloadUrlHandler","getDownloadUrl","_xhr","_text","deleteObject","deleteObject$1","FailRequest","promise_","_appDelete","NetworkRequest","errorCallback","pool","pendingXhr_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","errorCallback_","progressCallback_","timeout_","pool_","resolve_","reject_","backoffDone","requestWentThrough","wasSuccessCode","canceled","RequestEndStatus","waitSeconds","timeoutId","hitTimeout","cancelState","triggeredCallback","callWithDelay","millis","backoffCallback","progressListener","hitServer","isRetryStatusCode_","successCode","wasCanceled","progressEvent","lengthComputable","waitMillis","stopped","wasTimeout","appDelete","isFiveHundredCode","isExtraRetryCode","isRequestSpecificRetryCode","isUrl","refFromPath","_bucket","serviceOrRef","pathOrUrl","namespaceExports","StorageService","_authProvider","_pool","_url","_appId","_deleted","_maxOperationRetryTime","_maxUploadRetryTime","_requests","tokenData","request_1","addGmpidHeader_","addAuthHeader_","addVersionHeader_","StorageServiceCompat","setMaxUploadRetryTime","setMaxOperationRetryTime","createUploadTask","inner$","unsub","fromTask","createStorageRef","TaskEvent","STATE_CHANGED","Storage","BUCKET","MAX_UPLOAD_RETRY_TIME","MAX_OPERATION_RETRY_TIME","AngularFireStorage","GetDownloadURLPipeModule","AngularFireStorageModule","swing","linear","easeOutElastic","asin","_options","_stopped","wallTime","easingPosition","BondType","Currency","Rating","Bondcoins","IssuerName","CountryOfRisk","referenceData","ReferenceDataModel","getRefData","RefDataLookupService","_splice","_change","_remove","howMany","_clearObserver","_setObserver","multiPath","PathParser","defaultThrottleConfig","leading","trailing","_hasTrailingValue","_trailingValue","startBufferEvery","subscriberClass","buffers","ListComponent_div_0_1_ng_template_0_Template","_c4","ListComponent_div_0_1_Template","ctx_r6","fixedGroupTemplate","currentGroup","ListComponent_div_0_ng_template_2_Template","ctx_r7","_c5","_c6","ListComponent_div_0_Template","virtual","itemHeight","ListComponent_5_ng_template_0_1_ng_template_0_Template","ListComponent_5_ng_template_0_1_Template","dataItem_r10","ctx_r12","ListComponent_5_ng_template_0_ng_template_2_Template","ctx_r13","getText","_c7","ListComponent_5_ng_template_0_Template","itemIndex_r11","ctx_r9","startFrom","multipleSelection","optionPrefix","ListComponent_5_Template","ListComponent_6_ng_template_0_li_0_1_ng_template_0_Template","ListComponent_6_ng_template_0_li_0_1_Template","dataItem_r18","ctx_r22","groupTemplate","ListComponent_6_ng_template_0_li_0_ng_template_2_Template","ListComponent_6_ng_template_0_li_0_Template","ctx_r20","ListComponent_6_ng_template_0_li_1_1_ng_template_0_Template","ListComponent_6_ng_template_0_li_1_1_Template","ctx_r28","ListComponent_6_ng_template_0_li_1_ng_template_2_Template","ctx_r29","ListComponent_6_ng_template_0_li_1_Template","ctx_r21","offsetIndex","ListComponent_6_ng_template_0_Template","ListComponent_6_Template","ListComponent_div_7_Template","ctx_r5","_c8","_c9","_c10","_c11","_c12","AutoCompleteComponent_span_3_Template","clearValue","clearTitle","AutoCompleteComponent_span_4_Template","AutoCompleteComponent_ng_template_5_0_ng_template_0_Template","_c17","AutoCompleteComponent_ng_template_5_0_Template","ctx_r10","headerTemplate","AutoCompleteComponent_ng_template_5_div_3_ng_template_1_Template","AutoCompleteComponent_ng_template_5_div_3_ng_template_2_Template","ctx_r16","noDataText","AutoCompleteComponent_ng_template_5_div_3_Template","noDataTemplate","AutoCompleteComponent_ng_template_5_4_ng_template_0_Template","AutoCompleteComponent_ng_template_5_4_Template","footerTemplate","AutoCompleteComponent_ng_template_5_Template","_r19","listBoxId","valueField","listHeight","AutoCompleteComponent_ng_template_7_Template","_r21","_c18","ComboBoxComponent_span_5_Template","ComboBoxComponent_ng_template_8_0_ng_template_0_Template","ComboBoxComponent_ng_template_8_0_Template","ComboBoxComponent_ng_template_8_div_3_ng_template_1_Template","ComboBoxComponent_ng_template_8_div_3_ng_template_2_Template","ComboBoxComponent_ng_template_8_div_3_Template","ComboBoxComponent_ng_template_8_4_ng_template_0_Template","ComboBoxComponent_ng_template_8_4_Template","ComboBoxComponent_ng_template_8_Template","textField","ComboBoxComponent_ng_template_10_Template","_c23","DropDownListComponent_4_ng_template_0_Template","DropDownListComponent_4_Template","valueTemplate","dataItem","DropDownListComponent_ng_template_5_Template","DropDownListComponent_ng_template_8_ng_template_0_Template","_r17","stopImmediatePropagation","filterText","keydown","handleFilter","onFilterFocus","blurFilterInput","ctx_r8","isFocused","touchEnabled","ariaOwns","ariaActivedescendant","noDataLabel","_c26","DropDownListComponent_ng_template_8_ng_template_1_Template","isDisabledDefaultItem","getDefaultItemText","DropDownListComponent_ng_template_8_ng_template_2_ng_template_1_Template","DropDownListComponent_ng_template_8_ng_template_2_Template","itemTemplate","defaultItem","DropDownListComponent_ng_template_8_3_ng_template_0_Template","DropDownListComponent_ng_template_8_3_Template","ctx_r11","DropDownListComponent_ng_template_8_div_6_ng_template_1_Template","DropDownListComponent_ng_template_8_div_6_ng_template_2_Template","ctx_r25","DropDownListComponent_ng_template_8_div_6_Template","DropDownListComponent_ng_template_8_7_ng_template_0_Template","DropDownListComponent_ng_template_8_7_Template","ctx_r14","DropDownListComponent_ng_template_8_Template","_r28","filterable","DropDownListComponent_ng_template_10_Template","_r30","_c27","MultiSelectComponent_span_6_Template","_r9","clearAll","MultiSelectComponent_span_7_Template","MultiSelectComponent_ng_template_8_0_ng_template_0_Template","MultiSelectComponent_ng_template_8_0_Template","MultiSelectComponent_ng_template_8_div_1_2_ng_template_0_Template","MultiSelectComponent_ng_template_8_div_1_2_Template","customItemTemplate","MultiSelectComponent_ng_template_8_div_1_ng_template_3_Template","ctx_r18","MultiSelectComponent_ng_template_8_div_1_Template","MultiSelectComponent_ng_template_8_div_4_ng_template_1_Template","MultiSelectComponent_ng_template_8_div_4_ng_template_2_Template","MultiSelectComponent_ng_template_8_div_4_Template","MultiSelectComponent_ng_template_8_5_ng_template_0_Template","MultiSelectComponent_ng_template_8_5_Template","MultiSelectComponent_ng_template_8_Template","_r24","allowCustom","MultiSelectComponent_ng_template_10_Template","_r26","TagListComponent_li_1_1_ng_template_0_Template","TagListComponent_li_1_1_Template","TagListComponent_li_1_ng_template_2_1_ng_template_0_Template","TagListComponent_li_1_ng_template_2_1_Template","tag_r1","TagListComponent_li_1_ng_template_2_ng_template_2_Template","TagListComponent_li_1_ng_template_2_Template","TagListComponent_li_1_ng_template_4_1_ng_template_0_Template","TagListComponent_li_1_ng_template_4_1_Template","TagListComponent_li_1_ng_template_4_ng_template_2_Template","ctx_r15","tagProp","TagListComponent_li_1_ng_template_4_Template","_c32","TagListComponent_li_1_Template","_r20","deleteTag","i_r2","_r6","focused","tags","itemId","isGroupTag","isEmptyString","isObjectArray","selectedIndices","extractedValues","getter","usePrimitive","matchText","word","ignoreCase","temp","isUntouched","SearchBarComponent","localization","onFocus","onNavigate","searchBarClass","_userInput","_previousValue","_placeholder","userInput","setInputSize","localizationChangeSubscription","suggestedText","caretIndex","selectionStart","caretAtEnd","writeInputValue","setInputSelection","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Enter","Escape","Delete","Backspace","Home","End","placeholderLength","textLength","listId","tagListId","activeDescendant","readonly","handleInput","handleKeydown","handleFocus","handleBlur","ItemTemplateDirective","HeaderTemplateDirective","FooterTemplateDirective","GroupTemplateDirective","FixedGroupTemplateDirective","SelectionService","onSelect","newSelection","focusedIndex","NavigationAction","DataService","grouped","groupIndices","_flatData","isGrouped","getGroupIndices","flatten","itemIndex","itemAt","itemsCount","groupField","groupIndex","flat","DisabledItemsService","dataService","itemDisabled","NavigationService","disabledItemsService","selectionService","enter","esc","up","down","backspace","home","Undefined","Open","Close","Esc","Tab","Up","Left","Down","Right","nextIndex","clampIndex","firstFocusableIndex","isIndexDisabled","NoDataTemplateDirective","prevented","ListItemDirective","ListComponent","wrapper","cdr","lastLoaded","lastScrollTop","scrollToFocused","selectSubscription","scrollToItem","scrollSubscription","prefetchData","findCurrentGroup","positionItems","elementFromPoint","firstVisibleItem","groupAt","itemGroup","visibleItems","trunc","prevPage","changePage","flatIndex","firstGroupHeaderInTargetedPage","scrollToIndex","contentScrollTop","itemOffsetTop","contentOffsetHeight","bottomDistance","offsetTop","DEFAULTS","normalizeVirtualizationSettings","AUTOCOMPLETE_VALUE_ACCESSOR","AutoCompleteComponent","popupService","navigationService","highlightFirst","focusableId","clearButton","tabindex","filterChange","widgetClasses","popupMouseDownHandler","_popupSettings","_open","valueChangeSubject","_isFocused","subscribeEvents","resetSelection","wrapperOffsetWidth","popupSettings","popupHeight","containerClasses","hasMatch","suggest","backspacePressed","shouldOpen","_toggle","triggerPopupEvents","verifySettings","_virtualSettings","setMessages","destroyPopup","unsubscribeEvents","messagesTimeout","searchbar","popupWrapper","popupRef","findIndexPredicate","togglePopup","currentTextLength","exactMatch","insensitiveMatch","valueHasChanged","valueChangeSubscription","hasChange","emitChange","changeSubscription","handleItemChange","focusSubscription","handleItemFocus","navigationSubscription","closeSubscription","enterSubscription","handleEnter","escSubscription","handleEscape","_event","horizontalAlign","popupTemplate","listContainerClasses","optionsList","createPopup","eventArgs","isDefaultPrevented","maxIndex","itemText","loading","$localize","handleNavigate","searchBarChange","suggestion","TOUCH_ENABLED","COMBOBOX_VALUE_ACCESSOR","ComboBoxComponent","touchEnabled$$1","valueNormalizer","selectionChange","_filtering","customValueSubject","valueSubject","clearValueSubject","subs","setState","_valuePrimitive","isPrimitive","attachStreams","createValueStream","valueStream","candidate","valueFrom","valuePrimitive","textFrom","newText","clearFilter","customValueStreams","allowCustomValueStream","custom","disableCustomValueStream","clearValueStream","valueSubscription","merged","selectionChanged","emitValueChange","handleNavigationOpen","updateState","clearState","textEmpty","valueEmpty","_previousDataItem","iconClass","findDataItem","primitive","hasSelected","hasFocused","previousText","focusedItemText","textHasChanged","useSuggestion","unresolvedSelection","currentText","restoreItemFocus","isCustom","focusedDataItem","clearable","selectClick","getSuggestion","buttonClasses","ValueTemplateDirective","DROPDOWNLIST_VALUE_ACCESSOR","DropDownListComponent","filterFocused","filterBlurred","wrapperFocused","wrapperBlurred","selectionSubscription","onMouseDown","wrapperWidth","providedTabIndex","firstIndex","focusedItemNotSelected","onKeyPress","localizationChangesSubscription","assignAriaDescribedBy","isItemDisabled","itemFromEvent","shouldUsePrevious","shouldUseNewValue","openSubscription","filterBlurredSubscription","concatMap","componentBlurredSubscription","componentBlur","currentOrDefault","character","charCode","typingTimeout","selectNext","isInLoop","sameCharsOnly","dataLength","shuffleData","loopMatch","nextMatch","ofSameType","trimmed","valueLabelId","keypress","focusComponent","blurComponent","widgetTabIndex","ariaExpanded","CustomItemTemplateDirective","TagTemplateDirective","GroupTagTemplateDirective","MULTISELECT_VALUE_ACCESSOR","MultiSelectComponent","differs","tagPrefix","focusedTagIndex","autoClose","tagMapper","comparer","removeTag","selectedDataItems","observableSubscriptions","closePopup","differ","valueChangeDetected","focusedListIndex","newItem","addCustomValue","customValues","validateComplexValues","resolveValuesInArray","resolveAllValues","resolveDataItemFromTags","openPopup","searchTextAndFocus","navigateInput","selectValue","handleBackspace","tagData","removeGroupTag","removeSingleTag","createCustomValueStream","isClosed","isTagFocused","handleClose","handleUp","handleHome","handleEnd","handleDelete","handleRightKey","handleLeftKey","handleDownKey","customValueSubscription","dataItems","dataItemValues","unselect","nextTick","customItem","handleRemoveTag","startsFrom","tagTemplate","groupTagTemplate","disabledClass","wrapperMousedown","onSearchBarBlur","onSearchBarFocus","TagListComponent","TemplateContextDirective","insertedViewRef","templateContext","SelectableDirective","focusedClassName","selectedClassName","Messages","ɵMessages_BaseFactory","LocalizedMessagesDirective","SharedDirectivesModule","AutoCompleteModule","FilterInputDirective","DropDownListModule","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","desktopBrowserRxs","mobileBrowserRxs","omini","omobile","firefox","mobilesafari","chrome","testRx","rxs","dflt","browserInfo","detectDesktopBrowser","mobileOS","minorVersion","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","detectMobileOS","_c28","_c29","_c34","mouseup","mouseleave","_c35","mousedown","NumericTextBoxComponent_span_5_Template","releaseArrow","arrowDirection","ArrowDirection","increasePress","incrementTitle","decreasePress","decrementTitle","_c36","mousewheel","DOMMouseScroll","_c37","dragenter","paste","limitPrecision","fractionLength","toFixedPrecision","maxPrecision","invokeElementMethod","POINT","EXPONENT_REGEX","decimalPart","digits","padString","PARSABLE_OPTIONS","PARSABLE_DEFAULTS","decimals","FOCUSED$2","FORMATTED_VALUE","NumericTextBoxComponent","localizationService","autoCorrect","spinners","rangeValidation","selectOnFocus","inputValue","minValidateFn","maxValidateFn","isPasted","mouseDown","ngChange","ngTouched","ngValidatorChange","arrowPress","spinTimeout","handlePaste","numericInput","pressedKey","NumpadDecimal","replaceNumpadDotValue","formatInputValue","parseNumber","setSelection","parsedValue","restrictDecimals","limited","limitInputValue","hasTrailingZeros","setInputValue","updateValue","previousSelection","handleDragEnter","handleMouseDown","shouldSelectAll","selectAll","selectCaret","elementValue","handleKeyDown","addStep","handleWheel","wheelDelta","detail","getDeltaFromMouseWheel","intlChange","parseOptions","option","minError","maxError","numericRegex","verifyValue","restrictModelValue","restrictedValue","numberSymbols","decimal","numericWrap","spin","value1","value2","decimalSeparator","numberPattern","signPattern","maxFractionLength","isInRange","enteredValue","limitedValue","selectToEnd","padLimit","replaceNext","lengthChange","hasMax","hasMin","correctedValue","paddedValue","tryPadValue","limitLength","zeroPadded","zeroPaddedNext","hasDecimals","fraction","exponentMatch","formatNumber","formattedValue","formatValue","parsed","formattedString","significantCharacters","partialValue","significantCharsInFormattedValue","adjustedSignificantChars","adjustSignificantChars","separatorIndex","matchedLeadingZeroes","lengthOfLeadingZeroesMatch","significantChars","leadingZeroes","numberOfLeadingZeroes","NumericTextBoxMessages","ɵNumericTextBoxMessages_BaseFactory","decrement","NumericTextBoxCustomMessagesComponent","SlidersCommonModule","SliderModule","RangeSliderModule","SwitchModule","LocalizedNumericTextBoxMessagesDirective","NumericTextBoxModule","MaskedTextBoxModule","TextBoxModule","ColorPickerModule","CheckBoxModule","RadioButtonModule","FormFieldModule","InputsModule","ChipComponent_span_1_Template","selectedIconClasses","ChipComponent_span_2_Template","iconClasses","ChipComponent_span_4_Template","ChipComponent_ng_content_5_Template","ChipComponent_span_6_Template","onRemoveClick","removeIconClasses","KendoButtonService","buttonLookChange","buttonClicked","buttonClicked$","look","ButtonDirective","toggleable","primary","selectedChange","isIcon","isIconClass","domEvents","iconSetter","addIcon","updateIconNode","iconClassName","imageUrl","addImgIcon","removeImageNode","toggleClass","isSpan","buttonLookChangeSubscription","togglable","toggleAriaPressed","Space","setIconTextClasses","imageNode","iconNode","deferTimeout","unbindHandler","attribute","shouldSet","prependChild","classNames","insertIcon","removeIconNode","hasIcon","hasText","setSelected","roleSetter","classDisabled","classButton","classPrimary","isFlat","isBare","isOutline","isClear","classActive","closest","sel","ChipComponent","removable","hostClass","dynamicRTLSubscription","detachDomEvents","chip","typeClass","attachElementEventHandlers","selectedIcon","removeIcon","sender","focusListener","blurListener","outlineClass","filledClass","hasIconClass","selectedClass","focusedClass","ChipListComponent","isRemoveClicked","clickedChip","chips","removedChip","clearSelection","selectedChips","single","nodeInfo","kendo","userImplementation","SPREADSHEET_CUSTOM_FILTER","criteria","logic","spreadsheetFilters","customOperator","customValue","SPREADSHEET_DYNAMIC_FILTER","dynamicFilterType","SPREADSHEET_TOP_FILTER","SPREADSHEET_VALUE_FILTER","blanks","generators","col","eq","gte","lte","doesnotstartwith","doesnotendwith","doesnotcontain","doesnotmatch","quarter1","quarter2","quarter3","quarter4","january","february","march","april","may","june","july","august","september","october","november","december","GridComponent_kendo_grid_toolbar_1_Template","GridComponent_kendo_grid_group_panel_2_Template","groupChange","groupableEmptyText","GridComponent_ng_template_5_div_0_div_1_Template","lockedWidth","lockedLeafColumns","detailTemplate","lockedColumns","totalColumnLevels","showGroupPanel","reorderable","columnMenuOptions","columnMenuTemplate","leafColumns","GridComponent_ng_template_5_div_0_div_7_Template","columnsContainer","unlockedWidth","_c116","GridComponent_ng_template_5_div_0_Template","headerPadding","isLocked","nonLockedWidth","virtualColumns","headerLeafColumns","headerColumns","GridComponent_ng_template_5_div_2_div_1_Template","ariaRowCount","GridComponent_ng_template_5_div_2_Template","nonLockedLeafColumns","GridComponent_ng_template_5_Template","_r18","notifyPageChange","notifyScrollBottom","contentScroll","hideHeader","rowHeight","detailRowHeight","totalCount","groupable","selectable","noRecordsTemplate","rowClass","isVirtual","marqueeSelection","showFooter","GridComponent_ng_template_6_thead_2_Template","visibleColumns","GridComponent_ng_template_6_tfoot_4_Template","GridComponent_ng_template_6_div_5_Template","GridComponent_ng_template_6_Template","showGroupFooters","GridComponent_kendo_pager_7_Template","_r25","pagerTemplate","pageable","GridComponent_kendo_grid_toolbar_8_Template","_c117","_c118","_c119","_c120","_c121","lockedKeydown","lockedScroll","lockedMousewheel","totalHeight","ListComponent_kendo_resize_sensor_8_Template","ListComponent_kendo_resize_sensor_9_Template","ListComponent_div_12_Template","totalWidth","ListComponent_div_13_Template","_c122","FilterRowComponent_td_0_Template","FilterRowComponent_td_1_Template","FilterRowComponent_td_2_Template","column_r4","columnIndex_r5","logicalRowIndex","lockedColumnsCount","filterLabel","_c123","FilterCellComponent_ng_template_0_ng_container_1_Template","FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template","FilterCellComponent_ng_template_0_ng_container_2_1_Template","filterCellTemplateRef","FilterCellComponent_ng_template_0_ng_container_2_Template","FilterCellComponent_ng_template_0_Template","hasTemplate","_c124","_c125","_c126","FilterCellOperatorsComponent_kendo_dropdownlist_0_Template","_r3","dropdownKeydown","operators","_c127","_c128","ColGroupComponent_ng_template_0_col_0_Template","ColGroupComponent_ng_template_0_col_1_Template","ColGroupComponent_ng_template_0_col_2_Template","ColGroupComponent_ng_template_0_Template","columnsToRender","_c129","PagerComponent_ng_container_0_Template","PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template","PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template","buttonCount","PagerComponent_ng_container_1_kendo_pager_input_3_Template","PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template","PagerComponent_ng_container_1_kendo_pager_info_5_Template","PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template","pageSizes","PagerComponent_ng_container_1_Template","previousNext","_c130","_c131","_c132","_c133","_c134","_c135","_c136","PagerNumericButtonsComponent_li_1_Template","pageLabel","_c137","PagerNumericButtonsComponent_li_2_Template","_r7","num_r5","currentPage","PagerNumericButtonsComponent_li_3_Template","_c138","_c139","_c140","focusout","PagerPageSizesComponent_option_2_Template","PagerPageSizesComponent_option_3_Template","page_r3","getSelectedState","_c141","GroupHeaderComponent_ng_template_0_td_0_Template","GroupHeaderComponent_ng_template_0_Template","prefixGroupCell","GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template","groupTitle","formatForGroup","GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template","_c142","_c143","aggregates","expanded","GroupHeaderComponent_td_1_ng_template_2_Template","toggleGroup","isExpanded","groupHeaderTemplate","GroupHeaderComponent_td_1_Template","skipGroupDecoration","logicalColSpan","groupSpan","ariaRole","_c144","GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template","column_r11","groupHeaderColumnTemplateRef","GroupHeaderComponent_ng_container_2_td_1_Template","index_r12","GroupHeaderComponent_ng_container_2_Template","groupHeaderColumns","_c145","lastTarget","GroupPanelComponent_ng_template_0_Template","_c146","_c147","hint","GroupPanelComponent_div_1_Template","directionChange","group_r3","index_r4","groupTitles","GroupPanelComponent_div_2_Template","_c148","_c149","HeaderComponent_ng_template_0_tr_0_th_1_Template","HeaderComponent_ng_template_0_tr_0_th_2_Template","levelIndex_r4","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template","column_r10","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template","columnMenu","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template","displayTitle","_c150","columnIndex","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template","headerTemplateRef","leafIndex","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template","ctx_r30","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template","_r35","_r27","onSortClick","sortIcon","sortableLabel","showSortNumbering","sortStatus","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template","ctx_r19","selectAllCheckboxId","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template","_c151","lastColumn","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template","_r40","onHeaderKeydown","ctx_r41","columnIndex_r11","last_r12","showFilterMenu","isFilterable","showColumnMenu","isFirstOnRow","logicalColumnIndex","shouldActivate","headerClass","headerStyle","sortState","isSortable","isCheckboxColumn","showSelectAll","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template","ctx_r43","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template","ctx_r46","_c152","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template","ctx_r50","HeaderComponent_ng_template_0_tr_0_ng_template_3_Template","isColumnGroupComponent","HeaderComponent_ng_template_0_tr_0_Template","unlockedColumnsCount","columnsForLevel","trackByIndex","HeaderComponent_ng_template_0_tr_1_Template","HeaderComponent_ng_template_0_Template","columnLevels","showFilterRow","FilterMenuComponent_ng_template_3_Template","_c153","FilterMenuContainerComponent_ng_container_3_Template","childService","childFilter","FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template","FilterMenuContainerComponent_ng_container_4_1_Template","filterMenuTemplateRef","FilterMenuContainerComponent_ng_container_4_Template","StringFilterMenuComponent_kendo_dropdownlist_1_Template","logicChange","logicOperators","StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template","secondFilter","filterService","NumericFilterMenuComponent_kendo_dropdownlist_1_Template","NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template","DateFilterMenuComponent_kendo_dropdownlist_1_Template","DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template","activeView","bottomView","topView","formatPlaceholder","weekNumber","BooleanFilterMenuComponent_li_1_Template","item_r1","idPrefix","radioId","ColumnListComponent_label_1_Template","column_r2","index_r3","ColumnListComponent_div_2_Template","_r5","cancelChanges","actionsClass","resetText","applyText","ColumnChooserComponent_ng_template_3_Template","onApply","autoSync","allowHideAll","ColumnMenuChooserComponent_ng_template_1_Template","ColumnMenuFilterComponent_ng_template_1_Template","ColumnMenuItemComponent_span_1_Template","ColumnMenuItemComponent_div_3_Template","contentState","contentTemplate","_c154","ColumnMenuComponent_ng_template_3_Template","columnMenuTemplateRef","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template","onColumnsExpand","expandedColumns","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template","onFilterExpand","expandedFilter","ColumnMenuComponent_ng_template_5_Template","hasSort","hasLock","hasColumnChooser","hasFilter","_c155","_c156","TableBodyComponent_ng_template_0_ng_template_1_td_0_Template","TableBodyComponent_ng_template_0_ng_template_1_Template","TableBodyComponent_ng_template_0_td_2_Template","addRowLogicalIndex","TableBodyComponent_ng_template_0_td_3_Template","column_r8","columnIndex_r9","newDataItem","logicalColIndex","TableBodyComponent_ng_template_0_Template","trackByColumns","TableBodyComponent_tr_1_ng_template_2_Template","TableBodyComponent_tr_1_ng_container_3_Template","noRecordsText","_c157","TableBodyComponent_tr_1_Template","colSpan","TableBodyComponent_ng_template_2_tr_0_Template","item_r12","rowIndex_r13","hasGroupHeaderColumn","totalColumnsCount","groupHeaderSlaveCellsCount","TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template","TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template","TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template","toggleRow","ctx_r24","detailButtonStyles","detailButtonTitle","TableBodyComponent_ng_template_2_tr_1_td_2_Template","showIf","TableBodyComponent_ng_template_2_tr_1_td_3_Template","column_r30","columnIndex_r31","ctx_r32","isSelectable","isEditingCell","cellSelectionService","isCellSelected","isAriaSelected","_c158","TableBodyComponent_ng_template_2_tr_1_Template","ctx_r33","isOdd","isEditingRow","isRowSelected","TableBodyComponent_ng_template_2_tr_2_td_1_Template","TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template","_c159","TableBodyComponent_ng_template_2_tr_2_Template","ctx_r37","allColumnsSpan","columnsSpan","TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template","TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template","ctx_r38","TableBodyComponent_ng_template_2_tr_3_td_2_Template","ctx_r39","TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template","_c160","TableBodyComponent_ng_template_2_tr_3_td_3_Template","column_r44","ctx_r47","ctx_r40","groupFooterTemplateRef","TableBodyComponent_ng_template_2_tr_3_Template","ctx_r17","footerColumns","TableBodyComponent_ng_template_2_Template","isGroup","isParentGroupExpanded","showGroupHeader","isDataItem","isInExpandedGroup","isFooter","hideFooter","_c161","CellComponent_ng_container_1_ng_template_1_Template","CellComponent_ng_container_1_ng_template_2_ng_template_0_Template","childColumn_r7","CellComponent_ng_container_1_ng_template_2_Template","childColumns","CellComponent_ng_container_1_ng_template_3_Template","CellComponent_ng_container_1_ng_template_4_Template","selectionCheckboxId","CellComponent_ng_container_1_Template","isSpanColumn","isBoundColumn","CellComponent_ng_container_2_1_ng_template_0_Template","CellComponent_ng_container_2_1_Template","editTemplateRef","editTemplateContext","CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template","formGroup","CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template","CellComponent_ng_container_2_ng_container_2_input_3_Template","CellComponent_ng_container_2_ng_container_2_input_4_Template","CellComponent_ng_container_2_ng_container_2_Template","editor","CellComponent_ng_container_2_Template","_c162","FooterComponent_ng_template_0_td_1_Template","FooterComponent_ng_template_0_td_2_Template","FooterComponent_ng_template_0_td_3_ng_template_1_Template","FooterComponent_ng_template_0_td_3_Template","column_r5","columnIndex_r6","footerClass","footerStyle","footerTemplateRef","FooterComponent_ng_template_0_Template","ToolbarComponent_0_ng_template_0_Template","ToolbarComponent_0_Template","toolbarTemplateRef","DomEventsService","cellClick","cellMousedown","cellMouseup","focusIn","focusOut","windowBlur","EMPTY_REGEX","isBlank","isTruthy","isNullOrEmptyString","isUniversal","extractFormat","conditions","and","Skip","cancelAnimationFrame","msCancelRequestAnimationFrame","LocalDataChangesService","FocusRoot","activate","deactivate","focusableRegex","NODE_NAME_PREDICATES","hasClasses","namesList","matchesClasses","matchesNodeName","closestInScope","visibility","isFocusable","hasTabIndex","isFocusableWithTabKey","checkVisibility","findElement","matchSelf","isInputTag","navigableRegex","focusable","findFocusable","canFocus","isNavigableInput","CELL_CONTEXT","FocusableDirective","cellContext","focusGroup","registerElement","toggle","isActive","unregisterElement","isNavigable","hasFocus","focusCell","activeRow","activeCol","virtualCol","virtualRow","findRow","findCell","dataRowIndex","colIndex","force","isActiveRange","prevColIndex","prevRowIndex","cellRange","rowRange","offsetRow","offsetCol","leafColumnsToRender","hasDetailTemplate","groupItem","prevRow","lastCellIndex","nextColIndex","nextRowIndex","nextCell","maxLogicalRowIndex","lastRow","rowSpan","nextRow","modelCell","detailExpandCell","cells","modelRow","rowCell","firstCell","isNewRow","EditService","editedIndices","keepEditCell","closingCell","changedSource","onChanged","newItemGroup","editable","editTemplate","preventCellClose","closeCell","editRow","isEditing","hasNewItem","isNotEqual","cancelCell","keepCellTimeout","findByIndex","isInitiallyCollapsed","rowState","removeLast","GroupsService","isCollapsed","skipSelf","parentIndex","targetIndex","isChildIndex","PagerContextService","DetailsService","collapseRow","expandRow","eventArg","ScrollRequestService","requests","isInSameGrid","gridElement","matchHeaderCell","matchDataCell","matchFooterCell","matchCell","targetCell","gridCell","PageUp","PageDown","isInput","firstItemIndex","lastItemIndex","pagerContextService","scrollRequestService","groupsService","detailsService","focusRoot","editService","focusableParent","cellKeydown","activeRowIndex","onStableSubscriber","onCursorChanges","navigateTo","onFocusOut","onWindowBlur","leaveCell","switchMapTo","onTabout","deactivateElements","pendingRowIndex","registerCell","virtualCell","activateVirtualCell","unregisterCell","registerRow","updateRow","unregisterRow","isCellFocusable","oldMode","focusInCell","focusInActiveRowContent","activateRow","alreadyActive","activateElements","findFocusableChild","enterCell","activeDataRow","behind","columnViewport","activeCell","focusAdjacentCell","announce","fwd","moveCursorFwd","moveCursorBwd","moveDown","moveUp","colIdx","moveLeft","moveRight","onCellKeydown","nextItemIndex","hasPager","lastRowIndex","F2","onCursorKeydown","containsRow","scrollTo","onContentKeydown","localDataChangesService","lastSelectionStartIndex","currentSelection","selectAllChecked","dragging","addSubscriptions","checkboxOnly","selectableSettings","dragAndMultiple","iterator$$1","_selectAllState","rowArgs","rowSelected","ev","addAllTo","selectedRows","deselectedRows","itemToToggle","removedItem","removeSubscriptions","mouseDownEventArgs","cellClickSubscription","handleClick","mousedownSubscription","focusCellByElement","dataChangedSubscription","CellSelectionService","mouseUpEvent","dragSelectDeselect","lastSelectionItem","itemKey","columnKey","lastSelectionItemRowIndex","lastSelectionItemColIndex","selectedCellArgs","cellSelected","startRowIndex","startColIndex","endRowIndex","endColIndex","selectRange","selectedCells","deselectedCells","selectedItem","cellsToRemove","contender","selectionStartRow","selectionStartCol","selectionEndRow","selectionEndCol","isInSelectionRect","GridMarqueeDirective","cellSelection","selectionStarted","enableMarquee","moveMarquee","clean","pressArgs","pressTarget","dragEndSubscription","endSelection","initMarquee","marqueeElement","marqueeQuadrant","getMarqueeQuadrant","marquee","marqueeColor","pointerX","pointerY","startX","startY","leftHalf","rightHalf","topHalf","bottomHalf","userSelection","isAsync","generatorOrNext","schedulerFn","errorFn","completeFn","CellTemplateDirective","GroupHeaderTemplateDirective","GroupHeaderColumnTemplateDirective","EditTemplateDirective","GroupFooterTemplateDirective","ColumnMenuTemplateDirective","ColumnBase$1","matchesMedia","orderIndex","isColumnGroup","minResizableWidth","locked","lockable","includeInChooser","headerTemplates","columnMenuTemplates","_width","autoSize","FilterCellTemplateDirective","FilterMenuTemplateDirective","isColumnComponent","ColumnComponent","groupHeaderColumnTemplate","groupFooterTemplate","filterCellTemplate","filterMenuTemplate","isSpanColumnComponent","SpanColumnComponent","_editable","_locked","expandColumns","childrenArray","expandColumnsWithSpan","sumProp","sumColumnWidths","validField","someLeafColumn","isInSpanColumn","cachedPixelRatio","ColumnGroupComponent","DetailTemplateDirective","_condition","cachedScrollbarWidth","cachedRtlScrollLeft","BrowserSupportService","devicePixelRatio","initial","rtlScrollLeft","isGroupItem","flattenGroups","getIterator$1","footers","parentGroupIndex","skipHeader","resultMap","_innerIterator","outputFooters","currentGroupIndex","_iterator","innerIterator","nextDataItem","footerItem","nextGroupItem","groupFooters","isGridDataResult","Selection","grid","selectedKeys","selectedKeysChange","getItemKey","getSelectionItem","selectionChangeSubscription","selectionKey","itemIdentifiers","getCellSelectionItemIndex","allColumns","nonLockedColumns","totalLevels","lockedColumnsToRender","nonLockedColumnsToRender","hasGroupFooter","hasFooter","currentLevels","leafColumns$$1","containerLeafColumns","containerColumns","toRenderContainer","leaf","forEachColumn","forEachLevel","children$$1","ColumnList","GroupInfoService","_columnList","columnForGroup","groupHeaderTemplateRef","ChangeNotificationService","NoRecordsTemplateDirective","pair","table1","table2","arr1","arr2","zip$1","heights","offsetHeight2","setHeight","FilterService","PagerTemplateDirective","PDFService","savePDF","drawPDF","exportClick","dataChanged","SuspendService","browserMatchMedia","ResponsiveService","bootstrapToMedia","ExcelService","saveToExcel","ToolbarTemplateDirective","ScrollSyncService","headerSubscription","bodySubscription","sourceType","unregister","resizeSubscription","dispatcher","resizes","resizeArgs","ColumnResizingService","trackColumns","deltaPercent","state$$1","resizedColumns","tableMetadata","autoFitBatch","autoFitStart","autoFit","hasFilterRow","DEFAULT_POPUP_CLASS","SinglePopupService","scrollSyncService","attachClose","detachClose","removeClick","skipElement","contains$1","appended","getDocument","isTargetBefore","compareDocumentPosition","contains$2","targetRect","DragAndDropService","mouseEvent","targetFor","updateClass","updateLock","DragHintService","santizer","initCoords","targetStyles","paddingBottom","paddingRight","safeTitle","initialTop","initialLeft","DropCueService","ColumnReorderService","IdService","ColumnInfoService","lockedChange","columnRangeChange","filterSort","rootColumns","SortService","defaultTrackBy","expandEmitter","collapseEmitter","map$$1","isInEditedCell","ɵ4$2","GridComponent","supportService","groupInfoService","changeNotification","pdfService","responsiveService","excelService","columnResizingService","columnReorderService","columnInfoService","sortService","scrollable","navigable","dataStateChange","groupExpand","groupCollapse","detailExpand","detailCollapse","edit","cellClose","pdfExport","excelExport","columnResize","columnReorder","columnVisibilityChange","columnLockedChange","scrollBottom","footer","selectionDirective","columnList","filterHierarchy","hasGroupFooters","shouldGenerateColumns","_group","_skip","cachedWindowWidth","_rowSelected","_cellSelected","_rowClass","localizationSubscription","registerColumnsContainer","columnVisibilityChangeSubscription","columnLockedChangeSubscription","groupExpandCollapseSubscription","detailsServiceSubscription","filterSubscription","sortSubscription","attachStateChangesEmitter","attachEditHandlers","attachDomEventHandlers","pdfSubscription","emitPDFExportEvent","excelSubscription","saveAsExcel","columnsContainerChange","handleColumnResize","columnReorderSubscription","reorder","columnRangeChangeSubscription","onColumnRangeChange","toolbarTemplate","emptyText","_customDetailTemplate","detailTemplateChildren","_customNoRecordsTemplate","noRecordsTemplateChildren","customNoRecordsTemplate","_customPagerTemplate","pagerTemplateChildren","customPagerTemplate","_customToolbarTemplate","toolbarTemplateChildren","customToolbarTemplate","padding","exporting","viewportColumns","leafViewportColumns","groupCellsWidth","toggleDetailRowLegacy","expandChildren","autoGenerateColumns","defaultSelection","initSelectionService","updateNavigationMetadata","onDataChange","syncHeaderHeight","isScrollable","attachScrollSync","shouldResetSelection","applyAutoSize","refresh","columnsChangeSubscription","navigationMetadata","stateChangeSubscription","editServiceSubscription","columnsContainerChangeSubscription","detachElementEventHandlers","footerChangeSubscription","columnResizingSubscription","focusElementSubscription","registerEmitter","skipFocus","focusEditElement","addRow","columnInstance","editCell","resolveFn","rejectFn","createPromise","draw","cols","containerSelector","setEditFocus","assertNavigable","focusNextCell","focusPrevCell","destIndex","lastNonLocked","changeContainer","updateColumnIndices","sourceColumnIndex","nextSourceIndex","toSkip","updateIndicesForLevel","colsForParentLevel","colsForLevel","cellSelectionMode","activeService","inactiveService","tryFocus","lock","filter$$1","emitCRUDEvent","ariaRoot","resizeCheck","orientationSubscription","documentClickSubscription","shouldCloseCell","windowBlurSubscription","clickSubscription","keydownSubscription","focusInSubscription","focusOutSubscription","hasChanges","saveAsPDF","lockedHeader","notifyResize","newWidth","oldWidth","addRowOffset","filterRowOffset","showPager","autoFitColumns","toAdd","lastFromGroup","previous","offsetColumn","hasCallback","isDetailExpanded","selectableChanges","hostClasses","lockedClasses","virtualClasses","noScrollbarClass","navigatable","showTopToolbar","ariaColCount","showBottomToolbar","agg","updateRowHeight","take$$1","scrollObservable","firstLoaded","rowHeightService","firstItemOffset","nextTake","nonVisibleBuffer","NON_DATA_CELL_CLASSES","elementAt","rowAt","SCROLLER_FACTORY_TOKEN","DEFAULT_SCROLLER_FACTORY","wheelDeltaY","deltaY","VERTICAL_AXIS","maybeNativeElement","scrollerFactory","suspendService","columnInfo","columnsStartIdx","resizeSensors","containerScrollTop","scroller","handleRowSync","handleRowNavigationLocked","updateViewportColumns","firstChange","handleInitialScrollToSkip","rebind","skipScroll","viewportWidthChange","resetNavigationViewport","attachContainerScroll","initResizeService","hasLockedContainer","syncRowsHeight","lockedContainer","lockedTable","cleanupScroller","createScroller","lockedScrollTop","preventLockedScroll","scrollDelta","expandDetail","collapseDetail","onContainerScroll","handleColumnScroll","rowViewport","startRow","endRow","startColumn","endColumn","scrollerSubscription","syncContainerHeight","sensor","scrollToVirtualRow","normalizeScrollLeft","elementScrollLeft","needsViewport","lastItemOffset","viewportStart","viewportEnd","lastItemHeight","setViewport","hasScrollbar","calculateViewportColumns","startIdx","endIdx","currentColumns","viewportColumnsWidth","columnsEndIdx","updateColumnViewport","columnUpdateFrame","lockedCount","setColumnViewport","normalizedScrollLeft","rtlScrollPosition","offsetLeft","hostRole","DataBindingDirective","originalData","applyState","onStateChange","updateGridData","notifyDataChange","SelectionDirective","ExpandDetailsDirective","expandedDetailKeysChange","expandedDetailKeys","initiallyExpanded","toggleState","_expandBy","expandDetailsKey","keyGetter","expandDetailBy","groupPanelEmpty","noRecords","pagerFirstPage","pagerLastPage","pagerPreviousPage","pagerNextPage","pagerPage","pagerItemsPerPage","pagerOf","pagerItems","pagerPageNumberInputTitle","filterEqOperator","filterNotEqOperator","filterIsNullOperator","filterIsNotNullOperator","filterIsEmptyOperator","filterIsNotEmptyOperator","filterStartsWithOperator","filterContainsOperator","filterNotContainsOperator","filterEndsWithOperator","filterGteOperator","filterGtOperator","filterLteOperator","filterLtOperator","filterIsTrue","filterIsFalse","filterBooleanAll","filterAfterOrEqualOperator","filterAfterOperator","filterBeforeOperator","filterBeforeOrEqualOperator","filterFilterButton","filterClearButton","filterAndLogic","filterOrLogic","unlock","sortAscending","sortDescending","sortedAscending","sortedDescending","sortedDefault","columnsApply","columnsReset","filterDateToday","filterDateToggle","filterNumericDecrement","filterNumericIncrement","CustomMessagesComponent","FilterRowComponent","filterRowClass","areDifferent","cloneFilters","copyObject","cloneFilter","diffFilters","FilterCellComponent","_templateContext","operatorTexts","FilterOperatorBase","refreshText","setFilter","defaultOperator","rootFilter","insertDefaultFilter","trimFilterByField","localizeOperators$1","BaseFilterCellComponent","operatorList","_operators","defaultOperators","operationListSubscription","currentFilter","numericOperators","NumericFilterComponent","columnFormat","filterByField","localizationChange","NumericFilterCellComponent","filterDelay","showOperators","messageFor","composing","changeRequests","unsubscribeStart","unsubscribeEnd","subscribeChanges","unsubscribeChanges","changeRequestsSubscription","EMPTY_VALUE_OPERATORS","isEmptyValueOperator","FilterInputWrapperComponent","_operator","emptyValueOperator","filterInputDisabled","applyNoValueFilter","_defaultOperator","currentOperator","removeFilter","updateFilter","EMPTY_FILTER_OPERATORS","FilterCellWrapperComponent","applyFilter","overrideBaseClasses","onClear","showButton","stringOperators","StringFilterComponent","StringFilterCellComponent","FilterCellOperatorsComponent","clearText","dropdown","clearClick","clearKeydown","stringOperators$1","AutoCompleteFilterCellComponent","_valueField","BooleanFilterComponent","BooleanFilterCellComponent","dateOperators","DateFilterComponent","DateFilterCellComponent","ColGroupComponent","LoadingComponent","loadingText","ResizableContainerDirective","_lockedWidth","attachResize","kendoGridResizableContainer","removeView","FocusGroup","registerGroup","unregisterGroup","focusableChildren","LogicalCellDirective","idService","logicalSlaveCell","cellId","navigationChange","onNavigationChange","registerNoChanges","indexChange","rowIndexChange","registerChanges","updateElement","autoFocusCell","microtask","registerCellOnCurrentRow","isCellFocused","ariaColIndex","id$1","LogicalRowDirective","navigation","logicalSlaveRow","logicalSlaveCellsCount","logicalCellsCount","cellIndex","ariaRowIndex","FORMAT_REGEX","FieldAccessorPipe","intlService","ɵpipe","pure","columnsToResize","fns","TableDirective","firstResize","initState","bufferCount","autoFitSubscription","registerTable","autoFitObservable","originalWidth","measureColumn","headerIndex","isParentSpan","isLastInSpan","FILTER_OPERATORS","ContainsFilterOperatorComponent","DoesNotContainFilterOperatorComponent","EndsWithFilterOperatorComponent","EqualFilterOperatorComponent","IsEmptyFilterOperatorComponent","IsNotEmptyFilterOperatorComponent","IsNotNullFilterOperatorComponent","IsNullFilterOperatorComponent","NotEqualFilterOperatorComponent","StartsWithFilterOperatorComponent","GreaterFilterOperatorComponent","GreaterOrEqualToFilterOperatorComponent","LessFilterOperatorComponent","LessOrEqualToFilterOperatorComponent","AfterFilterOperatorComponent","AfterEqFilterOperatorComponent","BeforeEqFilterOperatorComponent","BeforeFilterOperatorComponent","importedModules","SharedFilterModule","FilterHostDirective","resolver","componentType","initComponent","FilterCellHostDirective","RowFilterModule","normalize","PagerComponent","pagerContext","totalPages","pageChangeSubscription","pagerWrapClass","gridPagerClass","widgetClass","PagerElementComponent","onChanges","PagerPrevButtonsComponent","textFor","PagerNextButtonsComponent","PagerNumericButtonsComponent","reminder","pageText","buttons","PagerInputComponent","incomingValue","hasPages","PagerInfoComponent","currentPageText","maxItems","PagerPageSizesComponent","_pageSizes","normalizedItems","changePageSize","pageSizeChange","showInitialPageSize","importedModules$1","PagerModule","GroupHeaderComponent","hasDetails","groupCount","detailOffset","columnCount","groupItemClass","DropTargetDirective","leave","withoutField","alreadyGrouped","indicatorRules","GroupPanelComponent","cue","dropTargets","attachTargets","currentTitles","targetSubscription","isGroupable","enterStream","leaveStream","dropStream","removeLock","canDrop","groupHeaderClass","GroupIndicatorComponent","groupIndicatorClass","toggleDirection","removeDescriptor","isDeleteButton","isSortIcon","skipButtons","DraggableColumnDirective","nav","updateTouchAction","performDrag","upEvent","notifyDrop","cursorElement","elementUnderCursor","notifyDrag","hideThenShow","DragAndDropModule","GroupModule","allowUnsort","showIndexes","initialDirection","normalize$1","columnChooser","mergeObjects","inSameParent","rules","HeaderComponent","reorderService","sortedFields","toggleSort","sortColumn","sortDescriptor","_leafColumns","isTailing","hasItems","canReorder","directions","targetLocked","draggableLocked","toggleLock","trackMove","calculateBefore","normalizeTarget","firstSpan","levelColumns","targetElement","headerWidth","allLeafColumns","isInSpanColumn$1","ColumnHandleDirective","allLeafs","currentLeafs","ignore","isParentSpanColumn","measureColumns","shouldUpdate","initColumnWidth","originalX","resizeColumns","resizeStartWidth","sizeToFit","resizedColumn","tableDelta","updateWidth","resizeTable","leftStyle","rightStyle","SelectAllCheckboxDirective","selectAllChange","stateSet","destroyClick","isChecked","trident","selectAllState","updateAll","stateToBool","FilterMenuComponent","_r1","hasFilters","validFilters","isNoValueOperator","findParent","parentLogicOfDefault","FilterMenuContainerComponent","parentService","_childFilter","trimFilters","submit","FilterMenuInputWrapperComponent","_currentFilter","operatorChange","StringFilterMenuInputComponent","StringFilterMenuComponent","firstFilter","NumericFilterMenuComponent","NumericFilterMenuInputComponent","DateFilterMenuComponent","BooleanFilterMenuComponent","radioValue","filtersByField","FilterMenuHostDirective","DateFilterMenuInputComponent","picker","FilterMenuModule","ColumnListComponent","columnChange","unlockedCount","_columns","updateColumnState","hasFiltered","hasVisibleLocked","hasUnlockedFiltered","domSubscriptions","updateDisabled","forEachCheckBox","checkboxes","getElementsByClassName","hasLocked","checkedItems","checkbox","checkedUnlocked","filteredColumns","ColumnChooserComponent","leafNamedColumns","closeClick","changeVisibility","ColumnMenuService","ColumnMenuItemBase","ColumnMenuChooserComponent","collapse","ColumnMenuFilterComponent","ColumnMenuItemContentTemplateDirective","ColumnMenuItemComponent","itemClick","updateContentState","ColumnMenuSortComponent","sortedAsc","sortedDesc","ColumnMenuComponent","_r13","ColumnMenuLockComponent","unlockedRootCount","toggleHierarchy","allChanged","changeLocked","toggleColumn","ColumnMenuModule","importedModules$2","HeaderModule","CommandColumnComponent","CheckboxColumnComponent","SelectionCheckboxDirective","destroyKeyDown","onKeyDown","setCheckedState","toggleByIndex","TableBodyComponent","cellKeydownSubscription","cellKeydownHandler","trackByWrapper","viewItem","messageKey","hasEdited","absoluteRowIndex","clickHandler","mouseupSubscription","contextmenuSubscription","touchstartSubscription","touchendSubscription","touchSubscription","originalNoRecordText","clickTimeout","isEditedColumn","eventTarget","currentTarget","cellClickArgs","emitCellClick","isEdited","isEditedRow","columnCellIndex","CellComponent","_editTemplateContext","isCommand","_rowIndex","updateCellContext","isColumnEditable","editContext","columnContext","isFieldEditable","_changes","updateTemplateContext","commandCellClass","EditCommandDirective","commandClass","beginEdit","CancelCommandDirective","endEdit","SaveCommandDirective","RemoveCommandDirective","AddCommandDirective","beginAdd","importedModules$3","BodyModule","FooterComponent","importedModules$4","FooterModule","ToolbarComponent","hasLocalData","EditingDirectiveBase","defaultEditService","createDefaultService","userEditService","addHandler","removeHandler","cancelHandler","saveHandler","createModel","saveModel","closeRow","closeEditor","shouldRemove","removeConfirmation","RowEditingDirectiveBase","editHandler","ɵRowEditingDirectiveBase_BaseFactory","TemplateEditingDirective","originalValues","assignValues","createNewItem","ReactiveEditingDirective","createFormGroup","InCellEditingDirective","cellClickHandler","cellCloseHandler","hasGroups","groupDescriptorsPresent","descriptors","findGroup","includeFooters","groupItems","itemCount","GroupBindingDirective","resetGroupsState","groupsPresent","expandGroupChildren","owner","removeParentDescriptors","dataResult","processGroups","skippedHeaders","kendoGridGroupBinding","GridModule","NotificationKind","do","undefinedValueNotification","completeNotification","MatCardContent","MatCard","MatCardModule","throwIfEmpty","errorFactory","defaultErrorFactory","ThrowIfEmptyOperator","ThrowIfEmptySubscriber","setOrigin","setSize","rectOuter","expandCopy","rectInner","rect1","rect2","SubjectSubscriber","AnonymousSubject","MatProgressSpinner__svg_circle_1_Template","_spinnerAnimationLabel","_getStrokeDashOffset","_getStrokeCircumference","_getCircleStrokeWidth","_getCircleRadius","MatProgressSpinner__svg_circle_2_Template","MatSpinner__svg_circle_1_Template","MatSpinner__svg_circle_2_Template","MatProgressSpinnerBase","_MatProgressSpinnerMixinBase","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS","diameter","MatProgressSpinner","_diameter","_fallbackAnimation","trackedDiameters","_diameters","_getSpinnerAnimationLabel","_noopAnimations","_forceAnimations","strokeWidth","_styleRoot","_attachStyleNode","_strokeWidth","animationClass","styleRoot","currentDiameter","diameters","diametersForElement","styleTag","_getAnimationText","strokeCircumference","_getViewBox","MatSpinner","MatProgressSpinnerModule","_initOptions","parentTransform","elementTransform","elementMatrix","_clippedBBox","transformedPoint","_hasFill","_hasStroke","mapTo","MatDrawerContainer_div_0_Template","_onBackdropClicked","_isShowingBackdrop","MatDrawerContainer_mat_drawer_content_3_Template","MatSidenavContainer_div_0_Template","MatSidenavContainer_mat_sidenav_content_3_Template","matDrawerAnimations","transformDrawer","MAT_DRAWER_DEFAULT_AUTOSIZE","MAT_DRAWER_CONTAINER","MatDrawerContent","_container","scrollDispatcher","_contentMarginChanges","_contentMargins","MatDrawer","_doc","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_disableClose","_opened","_animationStarted","_animationEnd","_animationState","openedChange","_openedStream","openedStart","_closedStream","closedStart","onPositionChanged","_modeChanged","opened","_takeFocus","_isFocusWithinDrawer","_updateFocusTrapState","_autoFocus","hasMovedFocus","_openedVia","activeEl","openedVia","_setOpen","_animationStartListener","_animationDoneListener","MatDrawerContainer","viewportRuler","defaultAutosize","_drawers","_doCheckSubject","_validateDrawers","updateContentMargins","_autosize","_end","_backdropOverride","_userContent","_allDrawers","drawer","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","_left","_getWidth","_right","_isPushed","_setContainerClass","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_closeViaBackdropClick","autosize","MatSidenavContent","MatSidenav","_fixedInViewport","_fixedTopGap","_fixedBottomGap","ɵMatSidenav_BaseFactory","fixedInViewport","fixedTopGap","fixedBottomGap","MatSidenavContainer","ɵMatSidenavContainer_BaseFactory","MatSidenavModule","INLINE","LAYOUT_VALUES","validateValue","validateWrapValue","isFlowHorizontal","LayoutStyleBuilder","buildCSS","ɵLayoutStyleBuilder_BaseFactory","LayoutDirective","elRef","styleUtils","styleBuilder","marshal","DIRECTIVE_KEY","styleCache","layoutCache","DefaultLayoutDirective","ɵDefaultLayoutDirective_BaseFactory","fxLayout","CLEAR_MARGIN_CSS","LayoutGapStyleBuilder","gapValue","endsWith","GRID_SPECIFIER","directionality","between","marginRight","marginBottom","minus","marginLeft","paddingStyles","applyStyleToElements","lastItem","gapCss","getMarginType","layout","margins","buildGapCSS","inputs$1","LayoutGapDirective","observerSubject","extraTriggers","trackValue","destroySubject","onLayoutChange","buildChildObservable","triggerUpdate","matcher","childrenNodes","willDisplay","orderA","styler","lookupStyle","orderB","layoutGapCacheRowRtl","layoutGapCacheRowLtr","layoutGapCacheColumnRtl","layoutGapCacheColumnLtr","addStyles","gridMode","mru","childrenStyle","addedNodes","removedNodes","DefaultLayoutGapDirective","ɵDefaultLayoutGapDirective_BaseFactory","fxLayoutGap","extendObject","FlexStyleBuilder","layoutConfig","grow","basis","hasCalc","usingCalc","isPercent","hasUnits","isValue","isFixed","clearStyles","useColumnBasisZero","hasWrap","inputs$2","FlexDirective","flexGrow","flexShrink","triggerReflow","layoutParts","getFlexFlowDirection","addFlexToParent","isHorizontal","flexRowWrapCache","flexRowCache","flexColumnWrapCache","flexColumnCache","activatedValue","DefaultFlexDirective","ɵDefaultFlexDirective_BaseFactory","fxFlex","FlexOrderStyleBuilder","ɵFlexOrderStyleBuilder_BaseFactory","inputs$3","FlexOrderDirective","flexOrderCache","DefaultFlexOrderDirective","ɵDefaultFlexOrderDirective_BaseFactory","fxFlexOrder","FlexOffsetStyleBuilder","horizontalLayoutKey","ɵFlexOffsetStyleBuilder_BaseFactory","inputs$4","FlexOffsetDirective","flexOffsetCacheRowRtl","flexOffsetCacheColumnRtl","flexOffsetCacheColumnLtr","flexOffsetCacheRowLtr","DefaultFlexOffsetDirective","ɵDefaultFlexOffsetDirective_BaseFactory","fxFlexOffset","FLEX_FILL_CSS","FlexFillStyleBuilder","_input","ɵFlexFillStyleBuilder_BaseFactory","FlexFillDirective","flexFillCache","LayoutAlignStyleBuilder","crossAxis","ɵLayoutAlignStyleBuilder_BaseFactory","inputs$6","LayoutAlignDirective","layoutAlignHorizontalInlineCache","layoutAlignHorizontalRevInlineCache","layoutAlignVerticalInlineCache","layoutAlignVerticalRevInlineCache","layoutAlignVerticalRevCache","layoutAlignVerticalCache","layoutAlignHorizontalRevCache","layoutAlignHorizontalCache","layoutKeys","DefaultLayoutAlignDirective","ɵDefaultLayoutAlignDirective_BaseFactory","fxLayoutAlign","FlexModule","createStackElements","stackElements","POPOVER_VIEW_DATA","Scheduler","isNumeric","renderAllAttr","FlexLayoutModule","serverModuleLoaded","configOptions","serverLoaded","SubjectSubscription","subscriberIndex","RootNode","invalidateHandler","_invalidate","cors","loadElements","fixedScale","_devicePixelRatio","_rescale","clearRect","renderTo","promiseAll","promises","msPointers","MSPointerEvent","pointers","FIELD_REGEX","getterCache","_match","indexAccessor","fieldList","history","loadRouting","getHistory","addToHistory","RouterOutletService","outerValue","outerIndex","notifyNext","notifyError","notifyComplete","subscribeToResult","outerSubscriber","subscribeTo","doRound","arg0","cloneDate","hour","setDate","hours","minutes","milliseconds","expected","expectedMonth","setMonth","Direction","weekDay","Forward","newDay","durationInMonths","durationInYears","Day","weekStartDay","firstWeekInYear","diffInMS","Monday","Backward","prevWeekDate","nextWeekDate","NavigationComponent_li_4_ng_template_2_Template","date_r2","navigationTitle","NavigationComponent_li_4_ng_template_3_Template","NavigationComponent_li_4_Template","isRangeStart","activeViewValue","ViewListComponent_table_1_th_3_Template","name_r5","colWidth","ViewListComponent_table_1_Template","weekNames","ViewListComponent_col_6_Template","ViewListComponent_tbody_7_Template","handleDateChange","date_r7","cellUID","focusedDate","cellTemplateRef","weekNumberTemplateRef","CalendarComponent_kendo_calendar_navigation_1_Template","handleNavigation","onPageChange","activeViewEnum","navigationItemTemplate","DateInputComponent_span_5_Template","arrow","handleButtonClick","touchstart","dragstart","_c13","_c14","_c15","DatePickerComponent_ng_template_9_ng_template_3_Template","_c20","DatePickerComponent_ng_template_9_Template","handleChange","mergeTime","cellTemplate","monthCellTemplate","yearCellTemplate","decadeCellTemplate","centuryCellTemplate","weekNumberTemplate","headerTitleTemplate","disabledDates","_c21","HorizontalViewListComponent_tbody_2_Template","cellEnter","cellLeave","date_r1","selectionRange","activeRangeEnd","_c73","DateRangePopupComponent_ng_template_2_Template","DateRangeComponent_kendo_daterange_popup_1_Template","HeaderComponent_ng_template_1_Template","HeaderComponent_ng_template_2_Template","_c74","ViewComponent_ng_template_0_Template","ViewComponent_tr_2_Template","ViewComponent_tr_3_th_1_Template","name_r6","ViewComponent_tr_3_Template","ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template","row_r7","getWeekNumber","firstDate","ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template","_c75","ViewComponent_tr_4_ng_template_1_td_0_Template","getWeekNumberContext","ViewComponent_tr_4_ng_template_1_Template","ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template","cell_r17","ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template","ViewComponent_tr_4_ng_container_2_td_1_3_Template","ViewComponent_tr_4_ng_container_2_td_1_Template","cellIndex_r18","rowIndex_r8","getStyles","tableCellIndex","isRangeMid","isRangeEnd","ViewComponent_tr_4_ng_container_2_Template","ViewComponent_tr_4_Template","navElement","Action","EMPTY_SELECTIONRANGE","MIDNIGHT_DATE","MIN_DATE","MAX_DATE","isSet","setMinutes","setSeconds","isValidRange","shiftWeekNames","domContainerFactory","hasExistingValue","isInSelectionRange","either","clampRange","initialEnd","updatedEnd","EMPTY_DATA","ACTIONS","PrevView","NextView","FirstInView","LastInView","CenturyViewService","isActiveView","selectedDate","viewDate","lastDate","isSelectedDateInRange","today","rowOffset","baseDate","cellOffset","cellDate","isWeekend","isRangeSplitEnd","isRangeSplitStart","isToday","cellTitle","dates","aboveMin","belowMax","firstYear","viewsCount","viewsInRange","centuriesToSubtract","EMPTY_DATA$1","ACTIONS$1","DecadeViewService","decadesToSubtract","EMPTY_DATA$2","ACTIONS$2","MonthViewService","_intlService","isDateDisabled","firstMonthDate","firstMonthDay","lastMonthDate","lastMonthDay","firstDay","cellDay","beginningOfPeriod","formatDate","abbrMonthNames","wideMonthNames","prependCell","monthsToSubtract","weekendRange","dateFormatNames","nameType","EMPTY_DATA$3","ACTIONS$3","YearViewService","currentYear","changedYear","candidateValue","yearsToSubtract","CalendarViewEnum","decade","century","BusViewService","viewChanged","clamp","viewOffset","requiresZoneOnBlur","tbody","repeat","mapper","renderWeekHeader","viewElement","contentElement","getScrollable","monthView","yearView","decadeView","getBody","CalendarDOMService","calendarHeight","calculateHeights","hostContainer","monthViewHeight","headerHeight","scrollableContentHeight","calendarWidth","monthViewWidth","scrollableContentWidth","yearViewHeight","scrollableYearContentHeight","yearViewWidth","decadeViewHeight","centuryViewHeight","decadeViewWidth","centuryViewWidth","navigationItemHeight","viewType","viewDimension","dimension","viewProp","hostClone","bottomOffset","topOffset","lastScroll","ReplaySubject","offsetBufferRows","rowsForHeight","skipWithOffset","offsetSize","ScrollDirection","scrollModifiers","scrollNormalizers","scrollValidators","VirtualizationComponent","itemWidth","maxScrollDifference","scrollOffsetSize","scrollDuration","activeIndexChange","scrollChange","totalSize","getContainerProperty","initServices","createRowHeightService","containerScrollSubscription","scroll$","emitActiveIndex","animationSubscription","containerScrollPosition","containerTop","containerBottom","containerOffsetSize","indexOffset","getContainerScrollDirection","scrollRange","scrollStep","modifyScroll","normalizeScroll","isScrollValid","containerScroll","maxScroll","containerMaxScroll","difference","lastActiveIndex","containerScrollSize","wrapperClasses","horizontalClass","totalVertexLength","NavigationComponent","bus","indexToScroll","ensureHeights","maxViewHeight","intlSubscription","totalChanged","isInArray","datesList","getTake","virtualization","addToDate","getComponentClass","ViewListComponent","activeDateChange","animateToIndex","minViewsToRender","showWeekNumbers","isMonthView","getWeekNames","getBottomOffset","viewHeight","rowLength","date1","date2","activeViewChanged","generateDates","activeDate","updateIndex","isIndexVisible","isListScrolled","getScrollableHeight","getComponentMonthClass","getComponentYearClass","getComponentDecadeClass","getComponentCenturyClass","headerTitleTemplateRef","setActiveDate","KEY_TO_ACTION","UpperView","LowerView","canMoveUp","canMoveDown","magnitude","divideByMagnitude","powerByMagnitude","navScrolled","monthScrolled","navSubscription","scrollSiblingOf","viewSubscription","scrolledElement","siblingComponent","calculateScroll","scrollableElement","MonthCellTemplateDirective","YearCellTemplateDirective","DecadeCellTemplateDirective","CenturyCellTemplateDirective","WeekNumberCellTemplateDirective","HeaderTitleTemplateDirective","NavigationItemTemplateDirective","PickerService","sameDateSelected","dateCompletenessChange","minValidator","maxValidator","noop$1","DisabledDatesService","disabledWeekDays","isDateArray","normalizedDisabledDates","notifyInvalidInput","notifyServiceChange","virtualizationProp","CALENDAR_VALUE_ACCESSOR","CALENDAR_RANGE_VALIDATORS","KENDO_INPUT_PROVIDER","CalendarComponent","disabledDatesService","pickerService","activeViewChange","activeViewDateChange","_focusedDate","onControlChange","onControlTouched","syncNavigation","setClasses","calendar","setAriaActivedescendant","bottomViewEnum","configure","viewChangeSubscription","verifyChanges","topViewEnum","sync","navigationView","unbindCallback","focusTarget","isInAngularZone","canNavigateDown","isSameDate","emitSameDate","emitBlur","emitFocus","isScrolled","arrowKeyPressed","focusedCellId","widgetId","widgetRole","calendarTabIndex","ariaDisabled","monthCellTemplateRef","yearCellTemplateRef","decadeCellTemplateRef","centuryCellTemplateRef","navigationItemTemplateRef","tmp_3_0","activeCellTemplate","incompleteDateValidator","incomplete","incompleteDate","Arrow","DATE_PART_REGEXP","TIME_PART_REGEXP","SHORT_PATTERN_LENGTH_REGEXP","unpadZero","symbols","leadingZero","monthNames","typedMonthPart","knownParts","allFormatedMonths","dayPeriods","allDayPeriods","sampleFormat","dateFormatString","setExisting","splitDateFormat","getExisting","symbol","currentChar","resetSegmentValue","resetLeadingZero","switchToNext","dateParts","baseFormat","replaced","suffix","currentMaxLength","parsedDate","matchMonth","dayPeriod","matchDayPeriod","isZeroCurrentChar","isAbbrMonth","partMap","incrementLeadingZero","middleNumber","parseDate","monthNumber","patternValue","partPattern","peekDate","patternLength","patternSatisfied","hasLeadingZero","setLeadingZero","part","peekValue","padZero","typedChar","monthAsNum","lowerChart","dateFormatParts","partLength","resultText","resultFormat","currentSymbol","dateFieldName","DateInputComponent","ariaReadOnly","incompleteDateValidation","isPopupOpen","hasPopup","valueUpdate","formatSections","hasMousedown","focusedPriorToMousedown","isDateIncomplete","currentFormat","incompleteValidator","kendoDate","symbolsMap","dateSymbolMap","updateFormatSections","verifyRange","isEqualToKendoDate","getDateObject","getKendoDate","updateElementValue","selectDateSegment","modifyDateSegmentValue","caret","modifyPart","putDateInRange","triggerChange","updateIncompleteValidationStatus","selectNearestSegment","previousFormatSymbol","selectionPresent","placeholderToggled","texts","getTextAndFormat","showPlaceholder","isPosition","currentDate","mousewheelHandler","handleMouseWheel","switchDateSegment","updateOnPaste","oldTextOrigin","oldFormat","newTextOrigin","oldTextSeparator","oldText","deletedSymbol","approximateStringMatching","navigationOnly","switchPart","parsePart","wrapperClass","handleMousedown","handleDragAndDrop","DatePickerComponent","readOnlyInput","disabledDatesValidation","popupUID","_show","disabledDatesValidateFn","pickerSubscriptions","handleSameSelection","handleDateCompletenessChange","_disabledDates","disabledDate","focusInput","toggleFocus","popupClasses","handleWindowBlur","handleInputChange","inputRole","handleIconClick","TIME_PART","HorizontalViewListComponent","initService","clampDate","viewsHasChanged","isInDates","isListInRange","noop$2","RANGE_CALENDAR_VALUE_ACCESSOR","RANGE_CALENDAR_RANGE_VALIDATORS","MultiViewCalendarComponent","disabledDatesRangeValidation","isHovered","isPrevDisabled","isNextDisabled","prevView","nextView","disabledDatesRangeValidateFn","_selectionRange","range$$1","updateButtonState","selectedRange","disabledDatesInRange","viewList","prevButtonTitle","nextButtonTitle","canNavigate","handleMouseEnter","handleMouseLeave","tmp_5_0","emitCellEvent","DateRangePopupTemplateDirective","DateRangeService","activeRangeEnd$","focusedDate$","endInput$","startInput$","dateRangePopup$","range$","dateRangePopup","cancelPopup","isPopup","isStart","isEnd","hasActiveContent","startInput","endInput","activeRange","DateRangePopupComponent","dateRangeService","calendarSubscriptions","popupSubscriptions","_calendar","subscribeFocusBlur","registerPopup","contentCalendar","viewCalendar","activateSubscription","blurSubscription","setRange","_appendTo","defaultTemplate","addPopupSubscriptions","DateRangeComponent","showDefault","contentPopup","hasContentPopup","DateRangeSelectionDirective","autoCorrectOn","activeRangeEndChange","selectionRangeChange","isEqualCalendarRange","updateFocusedDate","setActiveRangeEnd","handleHover","rangeEnd","acceptAndEmit","calendarRange","shouldAutoCorrect","activeEnd","updateRange","hasCompleteRange","setFocusedDate","kForOf","KForOf","_differ","kForTrackBy","_applyChanges","viewContainerLength","tuples","kForTemplate","todayAvailable","rangeLength","l10nChange","setTodayAvailability","todayMessage","getTitle","moveToBottom","nextDate","isTodayInRange","handleTodayClick","WeekNamesService","includeWeekNumber","ViewComponent","weekService","disabledDatesChange","updateData","currentCellIndex","unsubscribeCallback","rowCtx","firstWeekDateContext","cls","cellMouseoverHandler","mouseLeaveHandler","closestCell","cellByIndex","emitCellLeave","viewIndex","CalendarCommonModule","TemplatesModule","CalendarMessages","ɵCalendarMessages_BaseFactory","CalendarLocalizedMessagesDirective","CalendarCustomMessagesComponent","VirtualizationModule","CalendarModule","MultiViewCalendarLocalizedMessagesDirective","MultiViewCalendarModule","CalendarsModule","DateInputMessages","ɵDateInputMessages_BaseFactory","DateInputLocalizedMessagesDirective","DateInputModule","DatePickerMessages","ɵDatePickerMessages_BaseFactory","DatePickerLocalizedMessagesDirective","DatePickerCustomMessagesComponent","ɵ0$e","DatePickerModule","COMPONENT_MODULES","DateRangeModule","div$1","ul$1","li$1","TIMELIST_WRAPPER","TimePickerDOMService","timeListHeight","distanceFromMin","borderValue","barrier","limitDown","limitUp","HOURS_IN_DAY","HoursService","boundRange","insertUndividedMax","toListItem","selectedValue","getHour","countFromMin","addLast","addMissing","last$$1","isLastMissing","isMissing","divideByStep","lastHour","valueInList","missingItem","limitRange","clamp$1","distanceFromMin$1","limit$1","limitDown$1","limitUp$1","MINUTES_IN_HOUR","MinutesService","minute","getMinute","lastMinute","clamp$2","distanceFromMin$2","limit$2","limitDown$2","limitUp$2","SECONDS_IN_HOUR","SecondsService","getSecond","lastSecond","isAM","inReverseRange","DayPeriodService","hourAM","candidateAM","normalizedRange","minHour","maxHour","COMPONENT_MODULES$1","TimePickerModule","ɵ0$o","DateTimePickerModule","COMPONENT_MODULES$2","DateInputsModule","PairwiseOperator","PairwiseSubscriber","hasPrev","_arrayLikeToArray","innerObservable","destroy$","PopoverComponent","mergeAll","isFunction","getArray","_defaultPrevented","_events","one","handlersIsFunction","MAT_CHECKBOX_DEFAULT_OPTIONS","MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY","clickAction","MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR","MatCheckbox","MatCheckboxChange","MatCheckboxBase","_MatCheckboxMixinBase","indeterminateChange","_currentAnimationClass","_currentCheckState","_indeterminate","_syncIndeterminate","_transitionCheckState","indeterminate","_getAnimationClassForCheckStateTransition","animSuffix","nativeCheckbox","_onInteractionEvent","_getAriaChecked","_MatCheckboxRequiredValidatorModule","MatCheckboxModule","BUTTON_HOST_ATTRIBUTES","MatButtonBase","_MatButtonMixinBase","MatButton","isRoundButton","_hasHostAttributes","isIconButton","MatAnchor","_haltDisabledEvents","MatButtonModule","mobileQuery","mobileQueryListener","tick","windowRef","bottomSpace","SharedService","setAccessor","getAccessor","capitalized","defineAccessors","MatProgressBarBase","_MatProgressBarMixinBase","MAT_PROGRESS_BAR_LOCATION","progressbarId","MatProgressBar","_isNoopAnimation","_bufferValue","animationEnd","_animationEndSubscription","_rectangleFillValue","bufferValue","_primaryValueBar","_bufferTransform","_primaryTransform","MatProgressBarModule","DIR_DOCUMENT","Directionality","BidiModule","literals","10","100","20","200","30","300","40","400","5","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","arabicToRoman","roman","forkJoin","forkJoinInternal","emitted","webpackEmptyAsyncContext","MatSelect_span_4_Template","MatSelect_span_5_span_1_Template","triggerValue","MatSelect_span_5_ng_content_2_Template","MatSelect_span_5_Template","customTrigger","MatSelect_ng_template_8_Template","_panelDoneAnimatingStream","_getPanelTheme","_transformOrigin","_triggerFontSize","_getPanelAriaLabelledby","matSelectAnimations","transformPanelWrap","transformPanel","SELECT_PANEL_MAX_HEIGHT","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","MatSelectChange","MatSelectBase","_MatSelectMixinBase","MAT_SELECT_TRIGGER","_MatSelectBase","_parentFormField","scrollStrategyFactory","_liveAnnouncer","_panelOpen","o1","o2","_uid","_triggerAriaLabelledBy","_destroy","_valueId","_overlayPanelClass","controlType","_disableOptionCentering","disableOptionCentering","_typeaheadDebounceInterval","typeaheadDebounceInterval","optionSelectionChanges","_scrollStrategyFactory","_selectionModel","_initializeSelection","_setSelectionByValue","_panelDoneAnimating","panelOpen","_initKeyManager","_resetOptions","newAriaLabelledby","_getTriggerAriaLabelledby","updateErrorState","_canOpen","withHorizontalOrientation","_highlightCorrectOption","_isRtl","_handleOpenKeydown","_handleClosedKeydown","isArrowKey","isOpenKey","isTyping","previouslySelectedOption","selectedOption","hasDeselectedOptions","previouslyFocusedIndex","overlayDir","_positioningSettled","setInactiveStyles","_selectValue","_sortValues","correspondingOption","withVerticalOrientation","withAllowedModifierKeys","panel","_scrollOptionIntoView","changedOrDestroyed","_onSelect","wasSelected","_propagateChanges","sortComparator","valueToEmit","_getChangeEvent","labelId","_getLabelId","getLabelId","_ariaDescribedby","MatSelect","_scrollTop","_offsetY","_positions","scrollBuffer","_getItemHeight","_triggerRect","_calculateOverlayPosition","overlayElement","labelCount","_calculateOverlayOffsetX","overlayRect","viewportSize","getViewportSize","paddingWidth","SELECT_MULTIPLE_PANEL_PADDING_X","SELECT_PANEL_PADDING_X","leftOverflow","rightOverflow","optionOffsetFromPanelTop","optionHeightAdjustment","maxOptionsDisplayed","_getItemCount","topSpaceAvailable","bottomSpaceAvailable","panelHeightTop","panelHeightBottom","_adjustPanelUp","_adjustPanelDown","_getOriginBasedOnOption","distanceBelowViewport","distanceAboveViewport","selectedOptionOffset","_calculateOverlayScroll","_calculateOverlayOffsetY","_checkOverlayWithinViewport","ɵMatSelect_BaseFactory","_getAriaActiveDescendant","_onAttached","MatSelectModule","httpClient","sortFunction","aVal","bVal","publishReplay","RefDataService","eventCoordinates","SimpleSnackBar_div_2_Template","MatSnackBarContainer_ng_template_1_Template","MAT_SNACK_BAR_DATA","MatSnackBarConfig","politeness","announcementMessage","horizontalPosition","verticalPosition","MAX_TIMEOUT","MatSnackBarRef","containerInstance","_afterDismissed","_onAction","_dismissedByAction","onAction","dismiss","_onExit","_finishDismiss","exit","_durationTimeoutId","dismissWithAction","dismissedByAction","_onEnter","SimpleSnackBar","snackBarRef","hasAction","matSnackBarAnimations","snackBarState","MatSnackBarContainer","snackBarConfig","_announceDelay","_onAnnounce","_assertNotAttached","_applySnackBarClasses","_live","_completeExit","onEnter","_screenReaderAnnounce","_announceTimeoutId","panelClasses","inertElement","liveElement","focusedElement","HTMLElement","MatSnackBarModule","MAT_SNACK_BAR_DEFAULT_OPTIONS","MatSnackBar","_parentSnackBar","_defaultConfig","_snackBarRefAtThisLevel","simpleSnackBarComponent","snackBarContainerComponent","handsetCssClass","_openedSnackBarRef","_attach","openFromComponent","containerRef","userConfig","_attachSnackBarContainer","_animateSnackBar","afterDismissed","_dismissAfter","isLeft","isRight","alignStartReverse","DEFAULT_OPTIONS","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","forEachReverse","_fieldMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","_initMap","elementStart","groupBox","_initGroups","groupsSize","groupOrigin","elementOrigin","groupStart","arrangeElements","groupIdx","lineSize","bboxes","scaledStart","scaledSize","newStart","_newGroup","addGroup","_addToGroup","SwitchMapOperator","SwitchMapSubscriber","exportGroup","rootGroup","exportRoot","animationFrameScheduler","exportSVG","MatDivider","_inset","inset","MatDividerModule","_cache","Wrapper","getClosureSafeProperty","objWithPropertyToExtract","fillProperties","overriddenName","newLineIndex","concatStringsWithSpace","after","__forward_ref__","forwardRefFn","resolveForwardRef","isForwardRef","actual","comparison","ɵɵdefineInjectable","defineInjectable","getInjectableDef","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","getInjectorDef","NG_INJ_DEF","NG_INJECTOR_DEF","_injectImplementation","ngInjectableDef","ngInjectorDef","InjectFlags","getInjectImplementation","setInjectImplementation","impl","injectRootLimpMode","injectableDef","Optional","noSideEffects","ChangeDetectionStrategy","ChangeDetectorStatus","isDefaultChangeDetectionStrategy","changeDetectionStrategy","ViewEncapsulation","__globalThis","__window","__self","__global","_global","EMPTY_OBJ","EMPTY_ARRAY","NG_COMP_DEF","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_LOC_ID_DEF","ɵloc","NG_FACTORY_DEF","NG_ELEMENT_ID","__NG_ELEMENT_ID__","_renderCompCount","ɵɵdefineComponent","componentDefinition","declaredInputs","providersResolver","onPush","OnPush","directiveDefs","pipeDefs","Emulated","setInput","schemas","tView","directiveTypes","feature","pipeTypes","invertObject","extractDirectiveDef","extractPipeDef","ɵɵsetComponentScope","getComponentDef","getDirectiveDef","getPipeDef","autoRegisterModuleById","bootstrap","declarations","transitiveCompileScopes","ɵɵsetNgModuleScope","ngModuleDef","getNgModuleDef","secondary","newLookup","minifiedKey","publicName","declaredName","ɵɵdefinePipe","pipeDef","throwNotFound","HEADER_OFFSET","CONTAINER_HEADER_OFFSET","isLView","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","getFactoryDef","fullCode","formatRuntimeError","renderStringify","stringifyForError","throwProviderNotFoundError","injectorName","injectorDetails","NgOnChangesFeatureImpl","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","privateName","setSimpleChangesStore","previousChange","ngInherit","SVG_NAMESPACE","MATH_ML_NAMESPACE","DOCUMENT","setDocument","isProceduralRenderer","domRendererFactory3","rendererType","unwrapRNode","getNativeByIndex","lView","getNativeByTNode","getTNode","getComponentLViewByIndex","nodeIndex","slotValue","readPatchedData","readPatchedLView","isCreationMode","viewAttachedToChangeDetector","getConstant","resetPreOrderHookFlags","PREORDER_HOOK_FLAGS","updateTransplantedViewCount","lContainer","viewOrContainer","instructionState","lFrame","createLFrame","bindingsEnabled","isInCheckNoChangesMode","getBindingsEnabled","ɵɵenableBindings","ɵɵdisableBindings","getLView","getTView","ɵɵrestoreView","viewToRestore","contextLView","getCurrentTNode","currentTNode","getCurrentTNodePlaceholderOk","getCurrentParentTNode","setCurrentTNode","isCurrentTNodeParent","setCurrentTNodeAsNotParent","setIsInCheckNoChangesMode","getBindingRoot","bindingRootIndex","bindingStartIndex","getBindingIndex","bindingIndex","setBindingIndex","nextBindingIndex","incrementBindingIndex","setInI18nBlock","isInI18nBlock","inI18n","setCurrentDirectiveIndex","currentDirectiveIndex","getCurrentDirectiveDef","tData","getCurrentQueryIndex","setCurrentQueryIndex","getDeclarationTNode","declTNode","enterDI","SkipSelf","parentTNode","parentLView","Host","DECLARATION_VIEW","allocLFrame","enterView","newView","newLFrame","currentLFrame","childLFrame","elementDepthCount","currentNamespace","leaveViewLight","oldLFrame","leaveDI","leaveView","nextContextImpl","nestingLevel","currentView","walkUpViews","getSelectedIndex","setSelectedIndex","getSelectedTNode","ɵɵnamespaceSVG","ɵɵnamespaceMathML","ɵɵnamespaceHTML","registerPostOrderHooks","directiveStart","directiveEnd","lifecycleHooks","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","executeCheckHooks","hooks","callHooks","executeInitAndCheckHooks","initPhase","incrementInitPhaseFlags","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","isInitHook","hook","directive","NO_PARENT_INJECTOR","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","setUpAttributes","native","isProc","namespaceURI","attrName","attrVal","setAttributeNS","isAnimationProp","isNameOnlyAttributeMarker","mergeHostAttrs","dst","srcMarker","mergeHostAttribute","markerInsertPosition","dstValue","hasParentInjector","parentLocation","getParentInjectorIndex","getParentInjectorView","startView","parentView","includeViewProviders","setIncludeViewProviders","nextNgElementId","getOrCreateNodeInjectorForNode","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","parentData","declarationViewOffset","lViewCursor","tViewType","diPublicInInjector","bloomBit","BLOOM_SIZE","bloomAdd","injectAttributeImpl","attrNameToInject","attrsLength","notFoundValueOrThrow","lookupTokenUsingModuleInjector","Self","moduleInjector","previousInjectImplementation","getOrCreateInjectable","bloomHash","bloomHashBitOrFactory","previousTView","hostTElementNode","DECLARATION_COMPONENT_VIEW","shouldSearchParent","bloomHasToken","searchTokensOnInjector","createNodeInjector","currentTView","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","providerTokenOrDef","dirDef","throwCyclicDependencyError","previousIncludeViewProviders","directiveIndex","directiveDef","ngDoCheck","wrappedOnChanges","preOrderHooks","preOrderCheckHooks","registerPreOrderHooks","tokenId","injectorView","isFirstHostTNode","_tNode","_lView","ɵɵgetFactoryOf","typeAny","injectorDef","ɵɵgetInheritedFactory","ownConstructor","ownFactory","objectPrototype","ɵɵinjectAttribute","ANNOTATIONS","PARAMETERS","PROP_METADATA","makeDecorator","parentClass","additionalProcessing","typeFn","metaCtor","makeMetadataCtor","DecoratorFactory","annotationInstance","ngMetadataName","annotationCls","propName","makeParamDecorator","ParamDecoratorFactory","ParamDecorator","annotation","unusedKey","makePropDecorator","PropDecoratorFactory","decoratorInstance","PropDecorator","CREATE_ATTRIBUTE_DECORATOR__POST_R3__","attributeName","Attribute","_desc","ANALYZE_FOR_ENTRY_COMPONENTS","ContentChildren","isViewQuery","descendants","ContentChild","ViewChildren","ViewChild","R3ResolvedDependencyType","getCompilerFacade","globalNg","ɵcompilerFacade","isType","deepForEach","addToArray","removeFromArray","newArray","keyValueArraySet","keyValueArray","keyValueArrayIndexOf","arrayInsert2","keyValueArrayGet","_arrayIndexOfSorted","ES5_DELEGATE_CTOR","ES2015_INHERITED_CLASS","ES2015_INHERITED_CLASS_WITH_CTOR","ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR","reflect","_reflect","paramTypes","paramAnnotations","parentCtor","typeStr","tsickleCtorParams","ctorParameters","ctorParam","convertTsickleDecoratorIntoMetadata","decorators","_zipTypesAndAnnotations","getOwnMetadata","getParentCtor","_ownParameters","typeOrFunc","annotations","ownAnnotations","_ownAnnotations","propMetadata","parentPropMetadata","ownPropMetadata","_ownPropMetadata","lcProperty","functionBody","moduleUrl","runtime","enumIdentifier","decoratorInvocations","decoratorInvocation","annotationArgs","ctor","parentProto","ɵ0$2","Inject","getReflect","reflectDependencies","convertDependencies","compiler","dep","Token","setTokenAndResolvedType","param","__ChangeDetectorRef__","ChangeDetectorRef","Invalid","reflectDependency","resolveComponentResources","resourceResolver","componentResolved","urlMap","cachedResourceResolve","resp","unwrapResponse","componentResourceResolutionQueue","templateUrl","styleUrls","styleOffset","styleUrl","fullyResolved","componentDefPendingResolution","componentDefResolved","clearResolutionOfComponentResourcesQueue","componentNeedsResolution","THROW_IF_NOT_FOUND","NEW_LINE","SOURCE","USE_VALUE","_currentInjector","setCurrentInjector","former","injectInjectorOnly","ɵɵinject","ɵɵinvalidFactoryDep","policy","inject","injectArgs","types","catchInjectorError","injectorErrorName","tokenPath","formatError","getPolicy","trustedHTMLFromString","html","trustedScriptFromString","trustedScriptURLFromString","changingThisBreaksApplicationSecurity","unwrapSafeValue","allowSanitizationBypassAndThrow","actualType","getSanitizationBypassType","getTypeName","bypassSanitizationTrustHtml","trustedHtml","bypassSanitizationTrustStyle","trustedStyle","bypassSanitizationTrustScript","trustedScript","bypassSanitizationTrustUrl","trustedUrl","bypassSanitizationTrustResourceUrl","trustedResourceUrl","getInertBodyHelper","defaultDoc","DOMParser","parseFromString","isDOMParserAvailable","inertDocument","implementation","createHTMLDocument","inertHtml","inertBodyElement","templateEl","inertBody","stripCustomNsAttrs","elAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","_sanitizeUrl","sanitizeSrcset","srcset","tagSet","sets","inertBodyHelper","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","sanitizedSomething","traverseContent","TEXT_NODE","chars","nodeValue","endElement","checkClobberedElement","elAttr","lower","encodeEntities","nextNode","DOCUMENT_POSITION_CONTAINED_BY","outerHTML","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","_sanitizeHtml","unsafeHtmlInput","unsafeHtml","getInertBodyElement","mXSSAttempts","parsedHtml","sanitizeChildren","getTemplateContent","isTemplateElement","SecurityContext","ɵɵsanitizeHtml","sanitizer","getSanitizer","ɵɵsanitizeStyle","unsafeStyle","STYLE","ɵɵsanitizeUrl","unsafeUrl","ɵɵsanitizeResourceUrl","unsafeResourceUrl","ɵɵsanitizeScript","unsafeScript","ɵɵtrustConstantHtml","ɵɵtrustConstantScript","ɵɵtrustConstantResourceUrl","getUrlSanitizer","ɵɵsanitizeUrlOrResourceUrl","getDebugContext","getOriginalError","defaultErrorLogger","_console","originalError","_findOriginalError","_findContext","errorLogger","getErrorLogger","CUSTOM_ELEMENTS_SCHEMA","NO_ERRORS_SCHEMA","normalizeDebugBindingName","CAMEL_CASE_REGEXP","normalizeDebugBindingValue","getLContext","mpValue","findViaComponent","isDirectiveInstance","directiveInstance","directiveIndexEnd","traverseNextElement","findViaDirective","getDirectivesAtNodeIndex","findViaNativeElement","existingCtx","createLContext","attachPatchData","rElement","localRefs","getComponentViewByInstance","componentIndices","elementComponentIndex","includeComponents","directiveStartIndex","defaultScheduler","ɵ0$4","ɵɵresolveWindow","ɵɵresolveDocument","ɵɵresolveBody","maybeUnwrapFn","_icuContainerIterate","RendererStyleFlags2","icuContainerIterate","tIcuContainerNode","getLViewParent","getRootContext","viewOrComponent","componentOrLView","getRootView","getFirstLContainer","getNearestLContainer","CHILD_HEAD","getNextLContainer","applyToElementOrContainer","lNodeToHandle","beforeNode","isComponent","rNode","nativeAppendChild","nativeInsertBefore","nativeRemoveNode","parentRElement","applyView","applyContainer","updateTextNode","createCommentNode","createElementNode","createElementNS","detachMovedView","declarationContainer","movedViews","declarationViewIndex","insertionLContainer","removeIndex","indexInContainer","viewToDetach","declarationLContainer","removedLView","RENDERER","lQueries","QUERIES","destroyLView","rootView","lViewOrLContainer","cleanUpView","firstView","destroyViewTree","toCall","executeOnDestroys","tCleanup","cleanup","lCleanup","lastLCleanupIndex","idxOrTargetGetter","useCaptureOrSubIdx","instanceCleanupFn","processCleanups","getParentRElement","getClosestRElement","nativeAppendOrInsertBefore","nativeParentNode","getInsertInFrontOfRNode","_getInsertInFrontOfRNodeWithI18n","getInsertInFrontOfRNodeWithNoI18n","_processI18nInsertBefore","setI18nHandling","getInsertInFrontOfRNodeWithI18n","processI18nInsertBefore","childRNode","childTNode","parentRNode","getFirstNativeNode","tNodeType","getBeforeNodeForView","elIcuContainerChild","rNodeOrLContainer","nextRNode","componentView","componentHost","firstProjectedTNode","projection","viewIndexInContainer","nextViewIndex","firstTNodeOfView","nativeParent","nativeRemoveChild","applyNodes","isProjection","rawSlotValue","applyProjectionRecursive","projectionNext","applyProjection","tProjectionNode","componentLView","nodeToProjectOrRNodes","writeDirectStyle","writeDirectClass","classIndexOf","classToSearch","startingIndex","foundIndex","NG_TEMPLATE_SELECTOR","isCssClassMatching","cssClassToMatch","isProjectionMode","isInlineTemplate","hasTagAndTypeMatch","currentSelector","isNodeMatchingSelector","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","compareAgainstClassName","bindingsMode","maybeAttrName","matchTemplateAttribute","isNodeMatchingSelectorList","isSelectorInSelectorList","selectorListLoop","currentSelectorInList","maybeWrapInNotSelector","isNegativeMode","stringifyCSSSelector","currentChunk","valueOrMarker","attrValue","NO_CHANGE","ɵɵadvance","selectIndexInternal","checkNoChangesMode","toTStylingRange","getTStylingRangePrev","tStylingRange","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","setTStylingRangeNextDuplicate","_CLEAN_PROMISE","ɵ0$5","refreshContentQueries","directiveDefIdx","createLView","tHostNode","rendererFactory","RENDERER_FACTORY","getOrCreateTNode","createTNodeAtIndex","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","mergedAttrs","localNames","initialInputs","tViews","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","createTNode","allocExpando","numSlotsToAlloc","initialValue","allocIdx","renderView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","staticViewQueries","hostLView","renderComponent","renderChildComponents","incompleteFirstPass","refreshView","isInCheckNoChangesPass","hooksInitPhaseCompleted","movedLView","markTransplantedViewsForRefresh","embeddedLView","embeddedTView","refreshEmbeddedViews","hostBindingOpCodes","opCode","directiveIdx","bindingRootIndx","hostBindingFn","processHostBindingOpCodes","refreshComponent","refreshChildComponents","firstUpdatePass","renderComponentOrTemplate","normalExecutionPath","creationModeIsActive","prevSelectedIndex","executeContentQueries","createDirectivesInstances","addComponentLogic","setInputsFromAttrs","instantiateAllDirectives","elementIndex","invokeHostBindingsInCreationMode","invokeDirectivesHostBindings","saveResolvedLocalsInData","viewData","localRefExtractor","localIndex","getOrCreateTComponentView","createTView","constsOrFactory","initialViewLength","createViewBlueprint","expandoStartIndex","directiveRegistry","pipeRegistry","locateHostElement","elementOrSelector","ShadowDom","storeCleanupWithContext","cleanupFn","getLCleanup","getTViewCleanup","generatePropertyAliases","inputAliasMap","propStore","internalName","elementPropertyInternal","nativeOnly","dataValue","inputData","setInputsForProperty","childComponentLView","markDirtyIfOnPush","mapPropName","resolveDirectives","hasDirectives","registry","markAsComponentHost","findDirectiveDefMatches","exportsMap","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","initializeInputAndOutputAliases","cacheMatchingLocalNames","registerHostBindingOpCodes","directiveVarsIdx","elementIndx","lastSelectedElementIdx","hostTNode","numberOfDirectives","directiveFactory","nodeInjectorFactory","addToViewTree","elementAttributeInternal","setElementAttribute","initialInputData","inputsToStore","createLContainer","hostNative","componentHostIdx","refreshContainsDirtyView","componentTView","syncViewWithBlueprint","markViewDirty","tickRootContext","rootContext","rootComponent","detectChangesInternal","detectChangesInRootView","viewQueryFn","CLEAN_PROMISE","loadComponentRenderer","currentDef","unwrapLView","textBindingInternal","computeStaticStyling","writeToHost","markDirty","playerHandler","flushPlayers","INJECTOR$1","INJECTOR_SCOPE","NOT_YET","CIRCULAR","EMPTY_ARRAY$1","NULL_INJECTOR","getNullInjector","defType","additionalProviders","createInjectorWithoutInjectorInstances","_resolveInjectorDefTypes","records","injectorDefTypes","dedupStack","processProvider","processInjectorType","makeRecord","assertNotDestroyed","previousInjector","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","nextInjector","defOrWrappedDef","isDuplicate","importTypesWithProviders","imported","defProviders","injectorType","ngModuleType","isTypeProvider","isValueProvider","providerToFactory","providerToRecord","multiRecord","paramLength","inheritedInjectableDef","typeName","getInheritedInjectableDef","getUndecoratedInjectableFactory","unwrappedProvider","isExistingProvider","classRef","hasDeps","INJECTOR_IMPL__POST_R3__","INJECTOR_IMPL","Injector","NULL","assertDomElement","loadLContext","getOwningComponent","elementOrDir","getRootComponents","getInjector","getDirectives","throwOnNotFound","getHostElement","componentOrDirective","getListeners","lContext","firstParam","secondParam","listenerElement","useCaptureOrIndx","useCapture","sortListeners","_published","publishDefaultGlobalUtils","publishGlobalUtil","COMPILED","renderComponent$1","componentDef","componentTag","hostRenderer","hostRNode","rootFlags","createRootContext","rootTView","createRootComponentView","createRootComponent","hostFeatures","viewRenderer","rootLView","rootTNode","instantiateRootComponent","LifecycleHooksFeature","whenRendered","getSuperType","ɵɵInheritDefinitionFeature","superType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","defData","mergeHostAttrsAcrossInheritance","prevViewQuery","prevContentQueries","prevHostBindings","COPY_DIRECTIVE_FIELDS","COPY_COMPONENT_FIELDS","ɵɵCopyDefinitionFeature","defAny","_symbolIterator","devModeEqual","isListLikeIterableA","isListLikeIterable","isListLikeIterableB","iterator1","iterator2","item1","item2","areIterablesEqual","WrappedValue","isWrapped","isJsObject","updateBinding","getBinding","bindingUpdated","bindingUpdated2","exp1","exp2","different","bindingUpdated3","exp3","bindingUpdated4","exp4","ɵɵattribute","interpolationV","isBindingUpdated","interpolation1","v0","interpolation2","i0","v1","interpolation3","i1","v2","interpolation4","i2","v3","interpolation5","i3","v4","interpolation6","i4","v5","interpolation7","i5","v6","interpolation8","i6","v7","ɵɵattributeInterpolate1","interpolatedValue","ɵɵattributeInterpolate2","ɵɵattributeInterpolate3","ɵɵattributeInterpolate4","ɵɵattributeInterpolate5","ɵɵattributeInterpolate6","ɵɵattributeInterpolate7","ɵɵattributeInterpolate8","ɵɵattributeInterpolateV","interpolated","ɵɵtemplate","attrsIndex","localRefsIndex","adjustedIndex","tViewConsts","templateFirstCreatePass","ɵɵreference","angularCoreDiEnv","getFactoryOf","USE_VALUE$1","isUseClassProvider","isUseFactoryProvider","getInjectableMetadata","srcMeta","compilerMeta","typeArgumentCount","userDeps","isUseValueProvider","isUseExistingProvider","Injectable","SWITCH_COMPILE_INJECTABLE","SWITCH_COMPILE_INJECTABLE__POST_R3__","ngFactoryDef","compileInjectable","compileFactory","injectFn","R3FactoryTarget","constructResolvingPath","findFirstClosedCycle","injectionError","constructResolvingMessage","errMsg","wrappedError","addKey","injectors","noAnnotationError","signature","parameter","_globalKeyRegistry","numberOfKeys","_allKeys","newKey","reflector","reflectionCapabilities","caps","hasLifecycleHook","setter","importUri","resourceUri","resolveIdentifier","resolveEnum","ReflectiveDependency","_EMPTY_LIST","resolvedFactories","multiProvider","resolvedFactory","dependencies","resolveReflectiveFactory","factoryFn","resolvedDeps","_dependenciesFor","aliasInstance","fromKey","_extractToken","constructDependencies","resolveReflectiveProvider","resolveReflectiveProviders","resolvedProviderMap","normalizedProvidersMap","provider2","resolvedProvider","mergeResolvedReflectiveProviders","_normalizeProviders","_createDependency","paramMetadata","UNDEFINED","ResolvedReflectiveProviders","ReflectiveInjector","fromResolvedProviders","ReflectiveInjector_","_providers","_constructionCounter","keyIds","objs","_getByKey","createChildFromResolved","inj","instantiateResolved","_instantiateProvider","outOfBoundsError","_getMaxNumberOfObjects","_instantiate","ResolvedReflectiveFactory","originalException","_getByReflectiveDependency","INJECTOR_KEY","_getByKeySelf","_getByKeyDefault","keyId","_new","noProviderError","_getObjByKeyId","_throwOrNull","inj_","getProviderAtIndex","_mapProviders","ɵɵinvalidFactory","ɵɵproperty","setDirectiveInputsWhichShadowsStyling","isClassBased","ɵɵelementStart","elementStartFirstCreatePass","ɵɵelementEnd","elementEnd","hasClassInput","hasStyleInput","ɵɵelement","ɵɵelementContainerStart","elementContainerStartFirstCreatePass","ɵɵelementContainerEnd","ɵɵelementContainer","ɵɵgetCurrentView","listenerFn","eventTargetResolver","listenerInternal","ɵɵsyntheticHostListener","findExistingListener","tNodeIdx","cleanupEventName","listenerIdxInLCleanup","isTNodeDirectiveHost","processOutputs","lCleanupIndex","existingListener","lastListenerFn","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","propsLength","minifiedName","executeListenerWithErrorHandling","wrapWithPreventDefault","wrapListenerIn_markDirtyAndPreventDefault","nextListenerFn","ɵɵnextContext","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","ngProjectAsAttrIdx","getProjectAsAttrValue","ɵɵprojectionDef","componentNode","projectionHeads","tails","componentChild","slotIndex","ɵɵprojection","selectorIndex","ɵɵpropertyInterpolate","ɵɵpropertyInterpolate1","ɵɵpropertyInterpolate2","ɵɵpropertyInterpolate3","ɵɵpropertyInterpolate4","ɵɵpropertyInterpolate5","ɵɵpropertyInterpolate6","ɵɵpropertyInterpolate7","ɵɵpropertyInterpolate8","ɵɵpropertyInterpolateV","EMPTY_ARRAY$3","markDuplicates","tStylingKey","isPrevDir","isClassBinding","tStylingAtIndex","isMap","foundDuplicate","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","textEnd","keyEnd","valueEnd","getLastParsedKey","getLastParsedValue","parseClassNameNext","consumeClassToken","consumeWhitespace","parseStyleNext","consumeStyleKey","consumeSeparator","ch1","ch2","ch3","lastChIndex","consumeQuotedText","consumeStyleValue","resetParserState","quoteCharCode","ɵɵstyleProp","checkStylingProperty","ɵɵclassProp","ɵɵstyleMap","checkStylingMap","styleKeyValueArraySet","styleStringParser","parseStyle","ɵɵclassMap","classStringParser","parseClassName","stylingFirstUpdatePass","updateStyling","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","oldKeyValueArray","newKeyValueArray","oldKey","setKey","updateStylingMap","styleKeyValueArray","unwrappedValue","toStylingKeyValueArray","isHostBindings","stylingKey","hostDirectiveDef","residual","collectStylingFromTAttrs","collectStylingFromDirectives","templateStylingKey","bindings","getTemplateHeadTStylingKey","setTemplateHeadTStylingKey","collectResidual","wrapInStaticStylingKey","tStylingKeyWithStatic","isHostBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","markDuplicateOfResidualStyling","insertTStylingBinding","currentDirective","desiredMarker","currentMarker","tRange","isStylingValuePresent","findStylingValue","isProcedural","DashCase","isImportant","Important","applyStyling","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","ɵɵtext","textNative","ɵɵtextInterpolate","ɵɵtextInterpolate1","ɵɵtextInterpolate2","ɵɵtextInterpolate3","ɵɵtextInterpolate4","ɵɵtextInterpolate5","ɵɵtextInterpolate6","ɵɵtextInterpolate7","ɵɵtextInterpolate8","ɵɵtextInterpolateV","ɵɵclassMapInterpolate1","ɵɵclassMapInterpolate2","ɵɵclassMapInterpolate3","ɵɵclassMapInterpolate4","ɵɵclassMapInterpolate5","ɵɵclassMapInterpolate6","ɵɵclassMapInterpolate7","ɵɵclassMapInterpolate8","ɵɵclassMapInterpolateV","ɵɵstyleMapInterpolate1","ɵɵstyleMapInterpolate2","ɵɵstyleMapInterpolate3","ɵɵstyleMapInterpolate4","ɵɵstyleMapInterpolate5","ɵɵstyleMapInterpolate6","ɵɵstyleMapInterpolate7","ɵɵstyleMapInterpolate8","ɵɵstyleMapInterpolateV","ɵɵstylePropInterpolate1","valueSuffix","ɵɵstylePropInterpolate2","ɵɵstylePropInterpolate3","ɵɵstylePropInterpolate4","ɵɵstylePropInterpolate5","ɵɵstylePropInterpolate6","ɵɵstylePropInterpolate7","ɵɵstylePropInterpolate8","ɵɵstylePropInterpolateV","ɵɵhostProperty","ɵɵsyntheticHostProperty","localeEn","LOCALE_DATA","registerLocaleData","localeId","extraData","LocaleDataIndex","LocaleId","ExtraData","findLocaleData","normalizedLocale","normalizeLocale","getLocaleData","parentLocale","getLocaleCurrencyCode","CurrencyCode","getLocalePluralCase","PluralCase","common","locales","unregisterAllLocaleData","pluralMapping","DEFAULT_LOCALE_ID","USD_CURRENCY_CODE","ELEMENT_MARKER","ICU_MARKER","I18nCreateOpCode","LOCALE_ID","setLocaleId","tNodeInsertBeforeIndex","i18nParent","anchorRNode","addTNodeAndUpdateInsertBeforeIndex","previousTNodes","newTNode","existingTNode","isI18nText","isNewTNodeCreatedBefore","setInsertBeforeIndex","getTIcu","createTNodePlaceholder","getCurrentICUCaseIndex","tIcu","currentCase","currentCaseLViewIndex","changeMask","changeMaskCounter","applyCreateOpCodes","createOpCodes","insertInFrontOf","appendNow","APPEND_EAGERLY","SHIFT","COMMENT","applyMutableOpCodes","mutableOpCodes","rootRNode","rootIdx","textNodeIndex","parentIdx","refIdx","caseIndex","anchorIdx","commentValue","commentNodeIndex","applyUpdateOpCodes","updateOpCodes","bindingsStartIndex","checkBit","skipCodes","sanitizeFn","tNodeOrTagName","rText","applyIcuSwitchCase","applyIcuUpdateCase","activeCaseIndex","icuExpression","bindingValue","cases","resolvedCase","plural","getPluralCase","getCaseIndex","applyIcuSwitchCaseRemove","removeCodes","nodeOrIcuIndex","BINDING_REGEXP","ICU_REGEXP","NESTED_ICU","ICU_BLOCK_REGEXP","MARKER","SUBTEMPLATE_REGEXP","PH_REGEXP","NGSP_UNICODE_REGEXP","i18nStartFirstCreatePass","parentTNodeIndex","subTemplateIndex","existingTNodeStack","msgParts","replaceNgsp","isRootTemplateMessage","removeInnerTemplateTranslation","getTranslationForTemplate","i18nParseTextIntoPartsAndICU","i18nStartFirstCreatePassProcessTextNode","icuStart","createTNodeAndAddOpCode","isClosing","existingTNodes","isICU","i18nNodeIdx","_removes","_stack","_index","enterIcu","icuContainerIteratorNext","removeOpCode","loader","setTNodeInsertBeforeIndex","hasBinding","generateBindingUpdateOpCodes","destinationNode","maskIndex","sizeIndex","textParts","textValue","toMaskBit","tagMatched","inTemplate","bindingMask","mainBinding","addUpdateIcuSwitch","setTIcu","valueArr","nestedIcus","icuIndex","parseIcuCase","addUpdateIcuUpdate","parseICUBlock","icuType","binding","blocks","prevPos","braceStack","braces","caseName","unsafeCaseHtml","inertRootNode","walkIcuTree","sharedUpdateOpCodes","addCreateNodeAndAppend","lowerAttrName","addCreateAttribute","addRemoveNode","COMMENT_NODE","isNestedIcu","addRemoveNestedIcu","appendToParentIdx","createAtIdx","PP_MULTI_VALUE_PLACEHOLDERS_REGEXP","PP_PLACEHOLDERS_REGEXP","PP_ICU_VARS_REGEXP","PP_ICU_PLACEHOLDERS_REGEXP","PP_ICUS_REGEXP","PP_CLOSE_TEMPLATE_REGEXP","PP_TEMPLATE_ID_REGEXP","i18nPostprocess","replacements","templateIdsStack","phs","tmpl","placeholders","templateId","isCloseTemplateTag","currentTemplateId","_type","_idx","ɵɵi18nStart","messageIndex","tI18n","sameViewParentTNode","ɵɵi18nEnd","ɵɵi18n","ɵɵi18nAttributes","previousElementIndex","i18nAttributesFirstPass","ɵɵi18nExp","ɵɵi18nApply","applyI18n","ɵɵi18nPostprocess","viewProviders","resolveProvider$1","lInjectablesBlueprint","providerFactory","beginIndex","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesViewProvidersFactoryExist","componentProviders","multiFactoryAdd","multiFactory","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","indexInFactory","providerIsTypeProvider","existingCallbacksIndex","isComponentProvider","lData","multiResolve","factories","componentCount","multiProviders","processProvidersFn","noComponentFactoryError","ERROR_COMPONENT","ComponentFactoryResolver","_ngModule","_factories","projectableNodes","rootSelectorOrNode","injectElementRef","createElementRef","SWITCH_ELEMENT_REF_FACTORY__POST_R3__","SWITCH_ELEMENT_REF_FACTORY","SWITCH_RENDERER2_FACTORY","SWITCH_RENDERER2_FACTORY__POST_R3__","injectRenderer2","nodeAtIndex","getOrCreateRenderer2","Sanitizer","major","minor","patch","trackByFn","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","_nextPrevious","_nextAdded","_nextMoved","_nextIdentityChange","_reset","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","previousRecord","_prev","_moveAfter","_reinsertAfter","_addAfter","reinsertRecord","_addToMoves","nextRecord","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","toIndex","_prevDup","_nextDup","_tail","atOrAfterIndex","duplicates","recordList","moveOffset","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","_addToAdditions","_addToChanges","IterableDiffers","supports","copied","KeyValueDiffers","collectNativeNodes","lNode","lViewInAContainer","lViewFirstChildTNode","slotIdx","nodesInSlot","_cdRefInjectingView","checkNoChangesInternal","vcRef","appRef","_view","checkNoChangesInRootView","SWITCH_CHANGE_DETECTOR_REF_FACTORY__POST_R3__","injectChangeDetectorRef","SWITCH_CHANGE_DETECTOR_REF_FACTORY","isPipe","createViewRef","keyValDiff","defaultIterableDiffers","defaultKeyValueDiffers","SWITCH_TEMPLATE_REF_FACTORY__POST_R3__","injectTemplateRef","SWITCH_TEMPLATE_REF_FACTORY","TemplateRef","R3TemplateRef","_declarationLView","_declarationTContainer","declarationViewLQueries","createTemplateRef","SWITCH_VIEW_CONTAINER_REF_FACTORY__POST_R3__","injectViewContainerRef","SWITCH_VIEW_CONTAINER_REF_FACTORY","ViewContainerRef","createContainerRef","R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","viewRefs","getViewRefs","ngModuleRef","contextInjector","parentInjector","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","containerLength","trackMovedView","insertView","parentNativeNode","addViewToContainer","attachToViewContainerRef","getOrCreateViewRefs","viewRefsArr","commentNode","nativeNextSibling","expressionChangedAfterItHasBeenCheckedError","currValue","isFirstCheck","_addDebugContext","viewDebugError","logError","viewDestroyedError","shiftInitState","priorInitState","newInitState","initIndex","shouldCallLifecycleInitHook","asTextData","asElementData","asProviderData","asPureExpressionData","asQueryList","Services","setCurrentNode","createRootView","createComponentView","createNgModuleRef","overrideProvider","overrideComponentView","clearOverrides","checkAndUpdateView","checkNoChangesView","destroyView","resolveDep","createDebugContext","updateDirectives","updateRenderer","dirtyParentQueries","_tokenKeyCache","tokenKey","unwrapValue","nodeIdx","bindingIdx","unwrap","globalBindingIdx","oldValues","UNDEFINED_RENDERER_TYPE_ID","EMPTY_RENDERER_TYPE_ID","createRendererType2","_renderCompCount$1","resolveRendererType2","isFilled","checkBinding","checkAndUpdateBinding","checkBindingNoChanges","bindingName","markParentViewsForCheck","currView","viewContainerParent","markParentViewsForCheckProjectedViews","endView","declaredViewContainer","parentNodeDef","viewParentEl","renderNode","renderElement","renderText","elementEventFullName","isComponentView","isEmbeddedView","filterQueryId","splitMatchedQueriesDsl","matchedQueriesDsl","matchedQueries","matchedQueryIds","references","valueType","splitDepsDsl","sourceName","getParentRenderElement","renderHost","renderParent","componentRendererType","DEFINITION_CACHE","resolveDefinition","visitRootRenderNodes","lastRenderRootNode","visitSiblingRenderNodes","nodeDef","visitRenderNode","visitProjectedRenderNodes","ngContentIndex","compView","hostElDef","projectedNodes","execRenderNodeAction","ngContent","bindingFlags","embeddedViews","_embeddedViews","NS_PREFIX_RE","splitNamespace","calcBindingFlags","interpolate","valueCount","constAndInterp","_toStringWithNull","inlineInterpolate","EMPTY_ARRAY$4","EMPTY_MAP","UNDEFINED_VALUE","InjectorRefTokenKey","INJECTORRefTokenKey","NgModuleRefTokenKey","moduleProvideDef","moduleDef","providersByKey","modules","resolveNgModuleDep","depDef","_def","providerInstance","_createProviderInstance","targetsModule","moduleTransitivelyPresent","providerDef","injectable","depValues","_createClass","_callFactory","detachEmbeddedView","elementData","renderDetachView$1","renderAttachEmbeddedView","prevRenderNode","EMPTY_CONTEXT","createComponentFactory","viewDefFactory","getComponentViewDefinitionFactory","_inputs","_outputs","inputsArr","templateName","outputsArr","viewDef","componentNodeIndex","componentProvider","_viewRef","_component","_elDef","createViewContainerData","elDef","elData","viewRef_","vcElementData","dvcElementData","projectedViews","_projectedViews","nodeFlags","childFlags","markNodeAsProjectedTemplate","attachProjectedView","oldViewIndex","newViewIndex","createChangeDetectorRef","renderNodes","disposables","createTemplateData","_parentView","createInjector$1","allowPrivateServices","moduleType","bootstrapComponents","_moduleType","_bootstrapComponents","_destroyListeners","provDef","initNgModule","injectFlags","lifecycles","callNgModuleLifecycle","Renderer2TokenKey","ElementRefTokenKey","ViewContainerRefTokenKey","TemplateRefTokenKey","ChangeDetectorRefTokenKey","InjectorRefTokenKey$1","INJECTORRefTokenKey$1","checkIndex","nonMinifiedName","securityContext","outputDefs","depDefs","outputIndex","directChildFlags","childMatchedQueries","createProviderInstance","_createProviderInstance$1","createPipeInstance","createDirectiveInstance","outputObservable","eventHandlerClosure","callFactory","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","searchView","findCompView","cdView","allProviders","publicProviders","updateProp","callLifecycleHooksChildrenFirst","callProviderLifecycles","callElementProvidersLifecycles","toRefArray","nonMinified","SCHEDULER","isBoundToModule","tElementNode","rootViewInjector","createChainedInjector","elementName","getNamespace$1","extractAttrsAndClassesFromSelector","nodesforSlot","_rootLView","setClassMetadata","clazz","registerModuleFactory","assertSameOrNotExisting","incoming","registerNgModuleType","visited","recurse","getRegisteredNgModuleType","destroyCbs","ngLocaleIdDef","_r3Injector","ɵɵpureFunction0","slotOffset","pureFn","ɵɵpureFunction1","pureFunction1Internal","ɵɵpureFunction2","pureFunction2Internal","ɵɵpureFunction3","pureFunction3Internal","ɵɵpureFunction4","pureFunction4Internal","ɵɵpureFunction5","exp5","ɵɵpureFunction6","exp6","ɵɵpureFunction7","exp7","ɵɵpureFunction8","exp8","ɵɵpureFunctionV","exps","pureFunctionVInternal","getPureFunctionReturnValue","returnValueIndex","lastReturnValue","bindingRoot","ɵɵpipe","pipeName","getPipeDef$1","pipeFactory","pipeInstance","ɵɵpipeBind1","unwrapValue$1","isPure","ɵɵpipeBind2","ɵɵpipeBind3","ɵɵpipeBind4","ɵɵpipeBindV","__isAsync","symbolIterator","_results","QueryList","resultsTree","queryList","LQuery_","setDirty","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","indexInDeclarationView","LQueries_","dirtyQueriesWithMatches","getTQuery","isStatic","queriesForTemplateRef","childQueryIndex","tqueryClone","TQueries_","tquery","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","TQuery_","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","nodeMatchIdx","directiveOrProviderIdx","matchIdx","createResultForNode","matchingIdx","createResultByTNodeType","createSpecialToken","materializeViewResults","queryIndex","lQuery","tQueryMatches","matchedNodeIdx","collectQueryResults","lViewResults","embeddedLViews","ɵɵqueryRefresh","ɵɵstaticViewQuery","descend","viewQueryInternal","ɵɵviewQuery","createTQuery","createLQuery","ɵɵcontentQuery","contentQueryInternal","ɵɵstaticContentQuery","tViewContentQueries","saveContentQueryAndDirectiveIndex","ɵɵloadQuery","ɵɵtemplateRefExtractor","ɵɵinjectPipeChangeDetectorRef","angularCoreEnv","ɵ0$c","jitOptions","resetJitOptions","EMPTY_ARRAY$5","moduleQueue","enqueueModuleForDelayedScoping","flushingModuleQueue","flushModuleScopingQueueAsMuchAsPossible","isResolvedDeclaration","setScopeOnDeclaredComponents","declaration","compileNgModule","compileNgModuleDefs","expandModuleWithProviders","compileInjector","resetCompiledComponents","transitiveScopes","transitiveScopesFor","patchComponentDefWithScope","ngSelectorScope","compilation","isNgModule","scopes","exported","importedType","importedScope","declared","exportedType","exportedScope","isModuleWithProviders","compilationDepth","compileComponent","ngComponentDef","maybeQueueResolutionOfComponentResources","addDirectiveFactoryDef","preserveWhitespaces","defaultEncapsulation","directiveMetadata","typeSourceSpan","createParseSourceSpan","animations","interpolation","usesInheritance","addDirectiveDefToUndecoratedParents","compileDirective","ngDirectiveDef","getDirectiveMetadata","sourceMapUrl","facade","Directive","extendsDirectlyFromObject","extractQueriesMetadata","isContentQuery","lifecycle","usesOnChanges","splitByComma","viewQueries","objPrototype","shouldAddAbstractDirective","isQueryAnn","queriesMeta","ann","isInputAnnotation","static","convertToR3QueryMetadata","LIFECYCLE_HOOKS","hookName","metadataName","compilePipe","ngPipeDef","getPipeMetadata","Pipe","SWITCH_COMPILE_DIRECTIVE","SWITCH_COMPILE_COMPONENT","SWITCH_COMPILE_PIPE","bindingPropertyName","Output","HostBinding","hostPropertyName","HostListener","SWITCH_COMPILE_COMPONENT__POST_R3__","SWITCH_COMPILE_DIRECTIVE__POST_R3__","SWITCH_COMPILE_PIPE__POST_R3__","NgModule","SWITCH_COMPILE_NGMODULE","SWITCH_COMPILE_NGMODULE__POST_R3__","APP_INITIALIZER","ApplicationInitStatus","appInits","donePromise","rej","asyncInitPromises","initResult","APP_ID","_appIdRandomProviderFactory","_randomChar","APP_ID_RANDOM_PROVIDER","PLATFORM_INITIALIZER","PLATFORM_ID","APP_BOOTSTRAP_LISTENER","PACKAGE_ROOT_URL","Console","LOCALE_ID$1","DEFAULT_CURRENCY_CODE","TRANSLATIONS","TRANSLATIONS_FORMAT","MissingTranslationStrategy","SWITCH_IVY_ENABLED__POST_R3__","ivyEnabled","ngModuleFactory","componentFactories","Compiler_compileModuleSync__POST_R3__","Compiler_compileModuleSync","Compiler_compileModuleAsync__POST_R3__","Compiler_compileModuleAsync","Compiler_compileModuleAndAllComponentsSync__POST_R3__","Compiler_compileModuleAndAllComponentsSync","Compiler_compileModuleAndAllComponentsAsync__POST_R3__","Compiler_compileModuleAndAllComponentsAsync","Compiler","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","compileModuleAndAllComponentsAsync","COMPILER_OPTIONS","Zone","enableLongStackTrace","shouldCoalesceEventChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","onUnstable","assertZonePatched","delayChangeDetectionForEventsDelegate","maybeDelayChangeDetection","_nesting","_outer","_inner","lastRequestAnimationFrameId","nativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","getNativeRequestAnimationFrame","fakeTopEventTask","scheduleEventTask","updateMicroTaskStatus","checkStable","invoke","delayChangeDetectionForEvents","onInvokeTask","applyThis","applyArgs","invokeTask","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","_hasPendingMicrotasks","microTask","macroTask","onHandleError","EMPTY_PAYLOAD","runTask","cancelTask","runGuarded","NgZone","Testability","_pendingCount","_isZoneStable","_didWork","_callbacks","taskTrackingZone","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","using","TestabilityRegistry","_applications","_testabilityGetter","addToWindow","testability","findInAncestors","findTestabilityInTree","setTestabilityGetter","_devMode","_runModeLocked","isDevMode","enableProdMode","compileNgModuleFactory","compileNgModuleFactory__POST_R3__","moduleFactory","isBoundToModule__POST_R3__","ALLOW_MULTIPLE_PLATFORMS","createPlatform","inits","createPlatformFactory","parentPlatformFactory","extraProviders","getPlatform","injectedProviders","assertPlatform","requiredToken","destroyPlatform","PlatformRef","_modules","ngZoneOption","ngZoneEventCoalescing","ngZoneInjector","moduleRef","exceptionHandler","initStatus","runInitializers","_moduleDoBootstrap","_callAndReportToErrorHandler","compilerOptions","optionsReducer","bootstrapModuleFactory","ngDoBootstrap","ApplicationRef","_exceptionHandler","_initStatus","_bootstrapListeners","_views","_runningTick","_stable","componentTypes","_onMicrotaskEmptySubscription","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","share","componentOrFactory","compRef","testabilityRegistry","registerApplication","unregisterApplication","_loadComponent","attachToAppRef","detachFromAppRef","getModuleFactory__PRE_R3__","noModuleError","getModuleFactory__POST_R3__","getModuleFactory","DEFAULT_CONFIG","factoryPathPrefix","factoryPathSuffix","SystemJsNgModuleLoader","_compiler","loadFactory","loadAndCompile","exportName","checkNotEmpty","factoryClassSuffix","modulePath","nativeNode","_debugContext","addChild","providerTokens","childIndex","siblingIndex","refIndex","queryAll","_queryElementChildren","_queryNodeChildren","DebugElement__PRE_R3__","eventObj","asNativeElements","debugEls","discoverLocalRefs","getInjectionTokens","NodePrototype","getOwnPropertyDescriptors","isPrimitiveValue","copyDomProperties","bindingIndexes","metadataParts","collectPropertyBindings","lowercaseTNodeAttrs","eAttrs","lowercaseName","baseVal","getDebugNode__POST_R3__","_queryAllR3","invokedListeners","eventListeners","unwrappedListener","elementsOnly","_queryNodeChildrenR3","_queryNativeNodeDescendants","rootNativeNode","getNativeByTNodeOrNull","_addQueryMatchR3","nodeOrContainer","_queryNodeChildrenInContainerR3","nextLView","childView","debugNode","getDebugNode$1","_nativeNodeToDebugNode","getDebugNodeR2__PRE_R3__","getDebugNode__PRE_R3__","getDebugNodeR2","_nativeNode","indexDebugNode","DebugNode","DebugElement","platformCore","_iterableDiffersFactory","_keyValueDiffersFactory","_localeFactory","ɵ0$f","APPLICATION_MODULE_PROVIDERS","zoneSchedulerFactory","ApplicationModule","anchorDef","templateFactory","elementDef","namespaceAndName","fixedAttrs","bindingDefs","suffixOrSecurityContext","parentEl","listenToElementOutputs","handleEventClosure","renderEventHandlerClosure","listenTarget","listenerView","disposable","checkAndUpdateElementValue","setElementAttribute$1","setElementClass","setElementStyle","setElementProperty","queryDef","bindingType","filterId","queryIds","nodeMatchedQueries","tplDef","checkAndUpdateQuery","newValues","calcQueryValues","boundValue","getQueryValue","embeddedView","dvc","projectedView","queryValueType","ngContentDef","appendNgContent","purePipeDef","argCount","_pureExpressionDef","pureArrayDef","pureObjectDef","propToIndex","nbKeys","textDef","staticText","_addInterpolationPart","viewBindingCount","viewDisposableCount","viewNodeFlags","viewRootNodeFlags","viewMatchedQueries","currentParent","currentRenderParent","currentElementHasPublicProviders","currentElementHasPrivateProviders","validateNode","isNgContainer","newParent","rootNodeFlags","bindingCount","outputCount","nodeCount","parentEnd","createView","initView","createViewNodes","compRenderer","nodeData","compViewDef","execComponentViewsAction","ViewAction","CreateViewNodes","execQueriesAction","markProjectedViewsForCheck","execEmbeddedViewsAction","CheckNoChanges","CheckAndUpdate","callInit","checkAndUpdateNode","argStyle","v8","v9","bindLen","checkAndUpdateElementInline","checkAndUpdateTextInline","checkAndUpdateDirectiveInline","checkAndUpdatePureExpressionInline","checkAndUpdateNodeInline","checkAndUpdateElementDynamic","checkAndUpdateTextDynamic","checkAndUpdateDirectiveDynamic","checkAndUpdatePureExpressionDynamic","checkAndUpdateNodeDynamic","checkNoChangesNode","checkNoChangesNodeInline","checkNoChangesNodeDynamic","checkNoChangesQuery","Destroy","detachProjectedView","destroyViewNodes","callViewAction","execProjectedViewsAction","CheckNoChangesProjectedViews","CheckAndUpdateProjectedViews","queryFlags","staticDynamicQueryFlag","checkType","initServicesIfNeeded","debugSetCurrentNode","debugCreateRootView","debugCreateEmbeddedView","debugCreateComponentView","debugCreateNgModuleRef","debugOverrideProvider","debugOverrideComponentView","debugClearOverrides","debugCheckAndUpdateView","debugCheckNoChangesView","debugDestroyView","debugHandleEvent","debugUpdateDirectives","debugUpdateRenderer","createProdRootView","prodCheckAndUpdateNode","prodCheckNoChangesNode","elInjector","createRootData","defWithOverride","applyProviderOverridesToView","callWithDebugContext","DebugAction","viewDefOverrides","hasOverrides","hasDeprecatedOverrides","providerOverrides","deprecatedBehavior","providerOverridesWithScope","calcHasOverrides","moduleSet","applyProviderOverrides","applyProviderOverridesToNgModule","comp","compFactory","hostViewDef","elementIndicesWithOverwrittenProviders","elIndicesWithOverwrittenProviders","lastElementDef","findElementIndicesWithOverwrittenProviders","applyProviderOverridesToElement","elIndex","checkNoChanges","_currentAction","_currentView","_currentNodeIndex","nextDirectiveWithBinding","debugCheckAndUpdateNode","debugCheckNoChangesNode","nextRenderNodeWithBinding","givenValues","bindingValues","elView","elOrCompView","childDef","collectReferences","findHostElement","logViewDef","logNodeIndex","renderNodeIndex","getRenderNodeIndex","currRenderNodeIndex","nodeLogger","refName","oldAction","oldView","oldNodeIndex","getCurrentDebugContext","debugContextFactory","removeDebugNodeFromIndex","debugCtx","debugEl","debugChildEl","debugRefEl","createNgModuleFactory","defFactory","_ngModuleDefFactory","cloneNgModuleDefinition","childrenField","_getPrototypeOf","vWrap","Transformation","_optionsChange","scaleX","scaleY","originPoint","_taggedTemplateLiteral","Matrix","det","IDENTITY","renderPath","bezierCurveTo","closePath","KEY_STR","encodeBase64","utfInput","MatCalendarBody_tr_0_Template","_cellPadding","numCols","MatCalendarBody_tr_1_td_1_Template","_firstRowOffset","labelMinRequiredCells","MatCalendarBody_tr_1_td_2_Template","item_r6","_cellClicked","colIndex_r7","rowIndex_r3","_cellWidth","_isActiveCell","_isRangeStart","compareValue","_isRangeEnd","_isInRange","_isComparisonBridgeStart","_isComparisonBridgeEnd","_isComparisonStart","_isComparisonEnd","_isInComparisonRange","_isPreviewStart","_isPreviewEnd","_isInPreview","cssClasses","_isSelected","_isComparisonIdentical","todayValue","MatCalendarBody_tr_1_Template","row_r2","MatMonthView_th_3_Template","day_r1","long","narrow","MatCalendar_ng_template_0_Template","MatCalendar_mat_month_view_2_Template","_dateSelected","dateFilter","maxDate","minDate","dateClass","comparisonStart","comparisonEnd","MatCalendar_mat_year_view_3_Template","_monthSelectedInYearView","_goToDateInView","MatCalendar_mat_multi_year_view_4_Template","_yearSelectedInMultiYearView","MatDatepickerToggle__svg_svg_2_Template","MatDatepickerIntl","calendarLabel","openCalendarLabel","closeCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","MatCalendarCell","MatCalendarBody","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","previewChange","_enterHandler","_skipNextFocus","_getCellFromElement","_leaveHandler","isTableCell","startValue","endValue","columnChanges","cellNumber","movePreview","previousCell","previousRow","rangeEnabled","DateRange","MatDateSelectionModel","_adapter","_selectionChanged","MatSingleDateSelectionModel","adapter","_isValidDateInstance","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","MAT_DATE_RANGE_SELECTION_STRATEGY","MatMonthView","_dateFormats","_dateAdapter","_rangeStrategy","_userSelection","_activeDate","oldActiveDate","validDate","getValidDateOrNull","deserialize","_hasSameMonthAndYear","_init","_setRanges","_minDate","_maxDate","comparisonChange","rangeStartDate","rangeEndDate","selectedYear","selectedMonth","createDate","_getDateInCurrentMonth","addCalendarDays","getNumDaysInMonth","addCalendarYears","_previewEnd","_previewStart","_focusActiveCell","_todayDate","_getCellCompareValue","_monthLabel","getMonthNames","toLocaleUpperCase","firstOfMonth","_firstWeekOffset","getDayOfWeek","getFirstDayOfWeek","_initWeekdays","_createWeekCells","_matCalendarBody","previewRange","createPreview","firstDayOfWeek","narrowWeekdays","getDayOfWeekNames","weekdays","_weekdays","daysInMonth","dateNames","getDateNames","_weeks","_shouldEnableDate","cellClasses","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","_previewChanged","_handleCalendarBodyKeydown","yearsPerPage","MatMultiYearView","yearSelected","isSameMultiYearView","_setSelectedYear","_todayYear","minYearOfPage","getActiveOffset","_years","_createCellForYear","_yearSelected","yearName","getYearName","_shouldEnableYear","_selectedYear","_getActiveCell","dateAdapter","year1","year2","startingYear","getStartingYear","MatYearView","monthSelected","_setSelectedMonth","normalizedDate","_monthSelected","_todayMonth","_getMonthInCurrentYear","_yearLabel","_months","_createCellForMonth","monthName","_shouldEnableMonth","activeYear","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxYear","maxMonth","minYear","minMonth","_selectedMonth","MatCalendarHeader","maxYearOfPage","minYearName","maxYearName","formatYearRange","_isSameView","MatCalendar","currentPeriodClicked","previousClicked","nextClicked","periodButtonLabel","periodButtonText","previousEnabled","prevButtonLabel","nextEnabled","nextButtonLabel","_moveFocusOnNextTick","_startAt","_clampedActiveDate","viewChangedResult","_calendarHeaderPortal","headerComponent","focusActiveCell","_getCurrentViewComponent","multiYearView","sameDate","normalizedYear","normalizedMonth","matDatepickerAnimations","fadeInCalendar","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","MatDatepickerContentBase","_MatDatepickerContentMixinBase","MatDatepickerContent","_model","_rangeSelectionStrategy","_subscriptions","_closeButtonText","datepicker","selectionFinished","updateSelection","touchUi","_selectYear","_selectMonth","_viewChanged","_handleUserSelection","_closeButtonFocused","_getMinDate","_getMaxDate","_getDateFilter","calendarHeaderComponent","_getSelected","MatDatepickerBase","_inputStateChanges","_touchUi","openedStream","closedStream","_focusedElementBeforeOpen","_backdropHarnessClass","_datepickerInput","getStartValue","getThemePalette","_panelClass","_popupRef","_setConnectedPositions","_destroyPopup","_openAsDialog","_openAsPopup","_popupComponentRef","_dialogRef","completeClose","_forwardContentValues","_createPopup","getConnectedOverlayOrigin","primaryX","secondaryX","primaryY","secondaryY","MatDatepicker","ɵMatDatepicker_BaseFactory","MatDatepickerInputEvent","MatDatepickerInputBase","dateChange","_valueChange","_validatorOnChange","_cvaOnChange","_valueChangesSubscription","_localeSubscription","_parseValidator","_lastValueValid","_filterValidator","controlValue","_matchesFilter","_minValidator","_maxValidator","_getValueFromModel","_isValidValue","oldDate","_assignValue","_formatValue","_parentDisabled","_canEmitChangeEvent","_outsideValueChanged","dateInputsHaveChanged","readOnly","_openPopup","lastValueWasValid","_assignValueToModel","MAT_DATEPICKER_VALUE_ACCESSOR","MatDatepickerInput","MAT_DATEPICKER_VALIDATORS","dateFormats","_formField","_datepicker","_registerModel","_registerInput","validValue","_dateFilter","wasMatchingValue","modelValue","_onInput","toIso8601","matDatepicker","MatDatepickerToggleIcon","MatDatepickerToggle","parsedTabIndex","_watchStateChanges","datepickerStateChanged","inputStateChanged","datepickerToggled","_customIcon","_button","MatDatepickerModule","listenerOptions","AutofillMonitor","_monitoredElements","isAutofilled","_info","CdkTextareaAutosize","_previousMinRows","_textareaElement","_measuringClass","FIREFOX","_minRows","_setMinHeight","_maxRows","_setMaxHeight","resizeToFitContent","minRows","_cachedLineHeight","maxRows","_initialHeight","textareaClone","_cacheTextareaLineHeight","textarea","placeholderText","_scrollToCaretPosition","_getDocument","_noopInputHandler","TextFieldModule","onLoad","CombineLatestOperator","CombineLatestSubscriber","toRespond","_outerValue","_tryResultSelector","defaultMeasureBox","baselineMarkerSize","TextMetrics","styleKey","cachedResult","measureBox","baselineMarker","_baselineMarker","textStr","MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","MAT_BUTTON_TOGGLE_GROUP","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","MatButtonToggleGroup","MatButtonToggleChange","appearance","_buttonToggles","deferEvents","_updateModelValue","_rawValue","_clearSelection","MatButtonToggle","MatButtonToggleBase","_MatButtonToggleMixinBase","_isSingleSelector","buttonToggleGroup","_appearance","_syncButtonToggle","_isPrechecked","_buttonElement","newChecked","buttonId","MatButtonToggleModule","urlParsingNode","GenericBrowserDomAdapter","BrowserDomAdapter","groupEnd","evt","getDefaultDocument","DocumentFragment","baseElement","cookie","TRANSITION_ID","appInitializerFactory","transitionId","SERVER_TRANSITION_PROVIDERS","BrowserGetTestability","getAllTestabilities","getAllRootElements","testabilities","didWork","didWork_","getTestability","isShadowRoot","exportNgVar","CORE_TOKENS","inspectNativeElementR2","_createNgProbeR2","coreTokens","ELEMENT_PROBE_PROVIDERS__POST_R3__","ELEMENT_PROBE_PROVIDERS__PRE_R3__","ELEMENT_PROBE_PROVIDERS","EVENT_MANAGER_PLUGINS","EventManager","plugins","_eventNameToPlugin","_plugins","_findPluginFor","addGlobalEventListener","plugin","EventManagerPlugin","getGlobalEventTarget","SharedStylesHost","_stylesSet","additions","onStylesAdded","DomSharedStylesHost","_hostNodes","_styleNodes","styleEl","hostNode","_addStylesToHost","styleNode","NAMESPACE_URIS","COMPONENT_REGEX","COMPONENT_VARIABLE","HOST_ATTR","CONTENT_ATTR","shimContentAttribute","componentShortId","shimHostAttribute","compId","decoratePreventDefault","eventHandler","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","namespaceUri","removeAttributeNS","contentAttr","hostAttr","hostEl","shadowRoot","attachShadow","addHost","removeHost","nodeOrShadowRoot","DomEventsPlugin","EVENT_NAMES","HAMMER_GESTURE_CONFIG","HAMMER_LOADER","HammerGestureConfig","overrides","Hammer","HammerGesturesPlugin","isCustomEvent","getZone","cancelRegistration","buildHammer","HAMMER_PROVIDERS__POST_R3__","HAMMER_PROVIDERS__PRE_R3__","HAMMER_PROVIDERS","HammerModule","MODIFIER_KEYS","_keyMap","_chromeNumKeyPadMap","MODIFIER_KEY_GETTERS","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","onAndCancel","domEventName","_normalizeKey","fullKey","modifierName","keyIdentifier","getEventKey","modifierGetter","getEventFullKey","keyName","DomSanitizer","DomSanitizerImpl","domSanitizerImplFactory","initDomAdapter","makeCurrent","INTERNAL_BROWSER_PLATFORM_PROVIDERS","BROWSER_SANITIZATION_PROVIDERS__POST_R3__","BROWSER_SANITIZATION_PROVIDERS","platformBrowser","BROWSER_MODULE_PROVIDERS","BrowserModule","parentModule","createMeta","Meta","forceCreation","_getOrCreateElement","attrSelector","_parseSelector","getTag","_setMetaElementAttributes","removeTagElement","_containsAttributes","_getMetaKeyMap","META_KEYS_MAP","httpEquiv","createTitle","newTitle","ChangeDetectionPerfRecord","msPerTick","numTicks","AngularProfiler","profileName","isProfilerAvailable","performanceNow","profileEnd","PROFILER_GLOBAL_NAME","enableDebugTools","disableDebugTools","escapeHtml","escapedText","'","makeStateKey","TransferState","onSerializeCallbacks","transferState","initTransferState","unescapedText","initialState","BrowserTransferStateModule","By","debugElement","elementMatches","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","surface","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","_surfacePoint","pointShape","loadingStates","resolveDataURL","_suspendedTracking","currentShape","_currentShape","newer","older","MatFormField_ng_container_3_Template","MatFormField_div_4_Template","MatFormField_label_9_ng_container_2_Template","MatFormField_label_9_ng_content_3_Template","MatFormField_label_9_span_4_Template","MatFormField_label_9_Template","_r14","updateOutlineGap","_shouldAlwaysFloat","_hasLabel","hideRequiredMarker","MatFormField_div_10_Template","MatFormField_div_11_Template","MatFormField_div_13_Template","_subscriptAnimationState","MatFormField_div_14_div_1_Template","_hintLabelId","hintLabel","MatFormField_div_14_Template","MAT_ERROR","MatError","matFormFieldAnimations","transitionMessages","MatFormFieldControl","nextUniqueId$1","_MAT_HINT","MatHint","MatLabel","MatPlaceholder","MAT_PREFIX","MatPrefix","MAT_SUFFIX","MatSuffix","nextUniqueId$2","MatFormFieldBase","_MatFormFieldMixinBase","MAT_FORM_FIELD_DEFAULT_OPTIONS","MAT_FORM_FIELD","MatFormField","_labelOptions","_defaults","_outlineGapCalculationNeededImmediately","_outlineGapCalculationNeededOnStable","_showAlwaysAnimate","_hintLabel","floatLabel","_getDefaultFloatLabelState","_animationsEnabled","_hideRequiredMarker","_processHints","_floatLabel","_explicitFormFieldControl","_controlNonStatic","_controlStatic","_hasFloatingLabel","_connectionContainerRef","_validateControlChild","_validatePlaceholders","_syncDescribedByIds","_prefixChildren","_suffixChildren","_hintChildren","_errorChildren","_placeholderChild","_labelChildNonStatic","_labelChildStatic","_canLabelFloat","shouldLabelFloat","_shouldLabelFloat","_hasPlaceholder","_label","_validateHints","userAriaDescribedBy","_getDisplayedMessages","startHint","endHint","setDescribedByIds","labelEl","_isAttachedToDOM","startWidth","gapWidth","startEls","gapEls","containerStart","_getStartEnd","labelChildren","labelStart","labelWidth","outlineGapPadding","getRootNode","underlineRef","_inputContainerRef","_hideControlPlaceholder","autofilled","_shouldForward","onContainerClick","MatFormFieldModule","DOCS_URL","errorSolutions","formatMessage","errorSolution","intlMethod","dateFormatNames$1","dateFieldName$1","firstDay$1","format$1","formatDate$1","formatNumber$1","numberSymbols$1","parseDate$1","parseNumber$1","splitDateFormat$1","weekendRange$1","LOCALE_REGEX","cldrServiceFactory","CldrIntlService","IntlService","format$$1","IntlModule","yy","yyyy","HH","MM","SS","includeThousandsSeparator","thousandsSeparatorSymbol","allowDecimal","decimalSymbol","decimalLimit","requireDecimal","allowNegative","allowLeadingZeroes","integerLimit","instanceOf","logToConsole","OuterSubscriber","innerIndex","UserDetail","afAuth","approvedState","partialAccessState","adminState","allowedToView","showModalBlockNewUsers","userInfo$","itemsCollection","usrDetails","currentUserDetail","isAdmin","verified","setUserSettings","getCurrentUserSettings","setUserInstructons","getCurrentUserInstructons","userDetail","Institutions","Individuals","updateProfile","initUser","fetchCurrentUserDetails","appVerifier","confirmationResult","resalt","creationDate","sendEmailVerification","updatePhoneNumber","updateEmail","resL","logOut","deleteUser","userInternal","EmailAuthProvider","linkWithCredential","usercred","PhoneAuthProvider","AuthService","MapOperator","MapSubscriber","Point","pipeFromArray","_kendoExportVisual","exportVisual","_handler","_enableTracking","domNode","currentSize","_resize","_elementOffset","coord","inverseTransform","_typeof","_possibleConstructorReturn","assertThisInitialized","hasV8BreakIterator","v8BreakIterator","supportedInputTypes","supportsPassiveEvents","rtlScrollAxisType","scrollBehaviorSupported","shadowDomIsSupported","Platform","_platformId","BLINK","CSS","SAFARI","PlatformModule","candidateInputTypes","getSupportedInputTypes","featureTestInput","normalizePassiveListenerOptions","supportsPassiveEventListeners","supportsScrollBehavior","scrollToFunction","getRtlScrollAxisType","scrollContainer","containerStyle","pointerEvents","contentStyle","_getShadowRoot","createShadowRoot","_supportsShadowDom","ShadowRoot","FinallyOperator","FinallySubscriber","handleAllowedTrigger","canActivateChild","IsUserApprovedGuard","initClip","clearClip","opactity","loggedIn","DisActiveteLoginGuard","subjectOrSubjectFactory","MulticastOperator","stylesArray","_DOM","getDOM","setRootDomAdapter","DomAdapter","PlatformLocation","useBrowserPlatformLocation","BrowserPlatformLocation","LOCATION_INITIALIZED","getLocation","_history","getBaseHref","supportsState","pushState","replaceState","forward","createBrowserPlatformLocation","joinWithSlash","slashes","stripTrailingSlash","pathEndIdx","normalizeQueryParams","LocationStrategy","provideLocationStrategy","platformLocation","PathLocationStrategy","APP_BASE_HREF","_platformLocation","getBaseHrefFromDOM","_baseHref","onPopState","onHashChange","internal","includeHash","externalUrl","prepareExternalUrl","HashLocationStrategy","platformStrategy","_urlChangeListeners","_platformStrategy","browserBaseHref","_stripIndexHtml","getState","_stripBaseHref","_notifyUrlChangeListeners","_urlChangeSubscription","onNext","onThrow","onReturn","createLocation","CURRENCIES_EN","NumberFormatStyle","Plural","FormStyle","TranslationWidth","FormatWidth","NumberSymbol","getLocaleDateFormat","getLastDefinedValue","DateFormat","getLocaleTimeFormat","TimeFormat","getLocaleDateTimeFormat","getLocaleNumberSymbol","NumberSymbols","CurrencyDecimal","Decimal","CurrencyGroup","getLocaleNumberFormat","NumberFormats","getLocaleCurrencies","Currencies","checkFullData","extractTime","getCurrencySymbol","symbolNarrow","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","DateType","TranslationType","timezone","parsedNb","tzHour","tzMin","dateSetter","timeSetter","isoStringToDate","getNamedFormat","dateTimezoneOffset","getTimezoneOffset","timezoneToOffset","addDateMinutes","convertTimezoneToLocal","dateFormatter","DATE_FORMATS","formatter","dateStrGetter","Eras","Abbreviated","Wide","Narrow","dateGetter","FullYear","weekNumberingYearGetter","Month","Months","Standalone","weekGetter","Days","Short","DayPeriods","Format","Hours","Minutes","Seconds","FractionalSeconds","timeZoneGetter","Extended","ShortGMT","Long","getDateFormatter","getLocaleId","Full","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","opt_values","padNumber","minusSign","negWrap","neg","strNum","formatFractionalSeconds","getDatePart","localeMinus","MinusSign","extended","getDateTranslation","formStyle","MonthsFormat","MonthsStandalone","getLocaleMonthNames","DaysFormat","DaysStandalone","getLocaleDayNames","currentHours","currentMinutes","rule","getLocaleExtraDayPeriodRules","getLocaleExtraDayPeriods","afterFrom","beforeTo","amPm","DayPeriodsFormat","DayPeriodsStandalone","getLocaleDayPeriods","getLocaleEraNames","getFirstThursdayOfYear","firstDayOfYear","THURSDAY","getThursdayThisWeek","datetime","monthBased","nbDaysBefore1stDayOfMonth","thisThurs","firstThurs","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","DECIMAL_SEP","ZERO_CHAR","DIGIT_CHAR","formatNumberToLocaleString","groupSymbol","digitsInfo","formattedText","isZero","parsedNumber","toPercent","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","roundNumber","integerLen","exponent","lgSize","gSize","Exponential","negPre","negSuf","posPre","posSuf","formatCurrency","currencyCode","parseNumberFormat","getNumberOfCurrencyDigits","patternParts","positive","negative","positiveParts","integer","trunkLen","fractionLen","zeros","numStr","MAX_DIGITS","fractionSize","roundAt","digit","dropTrailingZeros","carry","reduceRight","NgLocalization","NgLocaleLocalization","Zero","One","Two","Few","Many","parseCookieValue","cookieStr","eqIndex","cookieValue","NgClass","_iterableDiffers","_keyValueDiffers","_ngEl","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","_removeClasses","_applyClasses","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","rawClassVal","klass","ngClass","NgForOfContext","ngForOf","NgForOf","_ngForOf","_ngForOfDirty","ngForTrackBy","insertTuples","RecordViewTuple","_perViewChange","ilen","ngForTemplate","NgIf","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","_updateView","assertTemplate","ngIfThen","ngIfElse","SwitchView","_templateRef","_created","NgSwitch","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","_ngSwitch","_updateDefaultCases","_defaultViews","matched","useDefault","enforceState","ngSwitch","NgSwitchCase","_addCase","_matchCase","ngSwitchCase","NgSwitchDefault","_addDefault","NgStyle","_ngStyle","nameAndUnit","_setStyle","ngStyle","NgTemplateOutlet","ngTemplateOutletContext","ngTemplateOutlet","_shouldRecreateView","_updateExistingContext","ctxChange","_hasContextShapeChanged","prevCtxKeys","currCtxKeys","invalidPipeArgumentError","ObservableStrategy","updateLatestValue","_promiseStrategy","_observableStrategy","AsyncPipe","_latestValue","_subscription","_obj","_strategy","_dispose","_selectStrategy","createSubscription","_updateLatestValue","DatePipe","DecimalPipe","_locale","strToNumber","CurrencyPipe","_defaultCurrencyCode","CommonModule","PLATFORM_BROWSER_ID","isPlatformBrowser","isPlatformServer","ViewportScroller","BrowserViewportScroller","supportsScrolling","elSelected","getElementsByName","scrollToElement","scrollRestoration","supportScrollRestoration","scrollRestorationDescriptor","getScrollRestorationProperty","colorNames","regexp","BaseColor","toBytes","toHex","toCss","Bytes","RGB","HSV","HSL","toHSV","toHSL","hex","hue2rgb","safe","measureText","hasDocument","preferred","hasFeature","SurfaceFactory","BROWSER_PROVIDER","CLASS_NAME","classRegex","CoreModule","MediaChange","mqAlias","StylesheetMap","stylesheet","styleName","addOrientationBps","disableDefaultBps","disableVendorPrefixes","printWithBreakpoints","mediaTriggerAutoRestore","ssrObserveBreakpoints","LAYOUT_CONFIG","SERVER_TOKEN","BREAKPOINT","mergeAlias","buildLayoutCSS","BaseDirective2","activatedAlias","bp","releaseElement","updateWithValue","useCache","shouldCache","genStyles","applyStyleToElement","sideEffect","addIfMissing","getFlowDirection","hasInlineValue","DEFAULT_BREAKPOINTS","overlapping","HANDSET_PORTRAIT","HANDSET_LANDSCAPE","TABLET_PORTRAIT","TABLET_LANDSCAPE","WEB_PORTRAIT","WEB_LANDSCAPE","ScreenTypes","ORIENTATION_BREAKPOINTS","HANDSET","TABLET","WEB","ALIAS_DELIMITERS","firstUpperCase","remainder","validateSuffixes","camelCase","BREAKPOINTS","bpFlattenArray","mergeByAlias","sortDescendingPriority","sortAscendingPriority","BreakPointRegistry","findByMap","findWithPredicate","searchFn","MatchMedia","pendingRemoveListenerFns","_observable$","registerQuery","mqList","filterOthers","matchMedia$","registration$","lastChange","mediaQueries","ALL_STYLES","styleSheet","mq","buildQueryCss","onMQLEvent","buildMQL","onchange","constructMql","PRINT","BREAKPOINT_PRINT","PrintHook","registeredBeforeAfterPrintHooks","isPrintingBeforeAfterEvent","beforePrintEventListeners","afterPrintEventListeners","isPrinting","PrintQueue","deactivations","printAlias","findByAlias","findByQuery","printBreakPoints","isPrintEvent","getEventBreakpoints","beforePrintListener","startPrinting","updateStyles","afterPrintListener","stopPrinting","registerBeforeAfterPrintHooks","collectActivations","bpList","activatedBreakpoints","addPrintBreakpoints","printBreakpoints","addBreakpoint","isPrintBreakPoint","MediaObserver","filterOverlaps","destroyed$","_media$","watchActivations","media$","locator","toMediaQuery","buildObservable","withPrintQuery","findAllActivations","activations","updateEvent","applyCssPrefixes","StyleUtils","_serverStylesheet","_serverModuleLoaded","_applyMultiValueStyleToElement","lookupInlineStyle","_getServerStyle","inlineOnly","immediateValue","getStyleForElement","_setServerStyle","addStyleToElement","styleValue","_readStyleAttribute","_writeStyleAttribute","styleAttribute","styleList","colonIndex","StyleBuilder","validateBasis","_validateCalcValue","calc","MediaMarshaller","elementMap","elementKeyMap","watcherMap","updateMap","clearMap","observeActivations","updateFn","clearFn","initBuilderMap","buildElementKeyMap","watchExtraTriggers","bpMap","getActivatedValues","keyMap","valueMap","clearElement","builders","triggers","watchers","newSubscription","lastHope","interceptEvents","blockPropagation","onMediaChange","oldMap","FilterOperator","FilterSubscriber","translateToPoint","transofrm","UnsubscriptionError","UnsubscriptionErrorImpl","ObserveOnOperator","ObserveOnSubscriber","ObserveOnMessage","scheduleMessage","createError","LogLevel","levelStringToEnum","INFO","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","Logger","_logLevel","_logHandler","_userLogHandler","setUserLogHandler","logCallback","customLogLevel","userLogHandler","ignored","instances_1","MAT_INPUT_VALUE_ACCESSOR","MAT_INPUT_INVALID_TYPES","MatInputBase","_MatInputMixinBase","MatInput","inputValueAccessor","_autofillMonitor","_readonly","_neverEmptyInputTypes","_inputValueAccessor","_previousNativeValue","_isServer","_isNativeSelect","_isTextarea","_validateType","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","_previousPlaceholder","validity","badInput","_isNeverEmpty","_isBadInput","selectElement","firstOption","_focusChanged","MatInputModule","stackAxis","previousBBox","IDENTITY_MATRIX_HASH","matrixHash","_bboxCache","_matrixHash","assert","assertion","assertionError","stringToByteArray","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","HAS_NATIVE_SUPPORT","webSafe","init_","byteToCharMap","byte1","haveByte2","byte2","haveByte3","byte3","outByte3","outByte4","encodeString","decodeString","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","ENCODED_VALS","ENCODED_VALS_WEBSAFE","base64Encode","base64Decode","deepCopy","deepExtend","Deferred","getUA","isMobileCordova","isBrowserExtension","isReactNative","isElectron","isIE","isUWP","isNodeSdk","CONSTANTS","FirebaseError","ErrorFactory","serviceName","replaceTemplate","fullMessage","PATTERN","jsonEval","isValidFormat","safeGet","contextObj","querystring","querystringParams","arrayVal","Sha1","chain_","buf_","pad_","inbuf_","total_","blockSize","compress_","lengthMinusBlock","inbuf","totalBits","executor","onNoObservers","ObserverProxy","unsubscribes","observerCount","forEachObserver","methods_1","implementsAnyMethods","unsubscribeOne","finalError","sendOne","validateArgCount","minCount","maxCount","argError","argName","validateCallback","validateContextObject","stringToByteArray$1","stringLength","_reparent","childrenChange","queueScheduler","_ctorUnsubscribe","flattenUnsubscriptionErrors","teardown","subscriptionIndex","errs","DEFAULT_FONT","DEFAULT_FILL","BlockScrollStrategy","_previousHTMLStyles","_isEnabled","_canBeEnabled","_previousScrollPosition","getViewportScrollPosition","htmlStyle","bodyStyle","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","CloseScrollStrategy","_scrollSubscription","scrolled","threshold","_initialScrollPosition","NoopScrollStrategy","isElementScrolledOutsideView","scrollContainers","containerBounds","isElementClippedByScrolling","scrollContainerRect","RepositionScrollStrategy","ScrollStrategyOptions","OverlayConfig","ConnectionPositionPair","ConnectedOverlayPositionChange","BaseOverlayDispatcher","_attachedOverlays","OverlayKeyboardDispatcher","_keydownListener","overlays","_keydownEvents","_isAttached","OverlayOutsideClickDispatcher","_cursorStyleIsSet","_clickListener","composedPath","_outsidePointerEvents","_cursorOriginalValue","isTestEnvironment","OverlayContainer","_createContainer","containerClass","oppositePlatformContainers","OverlayRef","_host","_pane","_keyboardDispatcher","_outsideClickDispatcher","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","_backdropClickHandler","_positionStrategy","attachResult","_previousHostParent","_updateStackingOrder","_updateElementSize","_updateElementDirection","_togglePointerEvents","_attachBackdrop","_toggleClasses","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","sizeConfig","enablePointer","showingClass","backdropToDetach","finishDetach","boundingBoxClass","cssUnitPattern","FlexibleConnectedPositionStrategy","connectedTo","_lastBoundingBoxSize","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","_scrollables","_preferredPositions","_positionChanges","_resizeSubscription","_offsetX","_appliedPanelClasses","_validatePositions","_boundingBox","_isInitialRender","_lastPosition","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","originRect","viewportRect","flexibleFits","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","score","weight","_previousPushAmount","extendStyles","lastPosition","scrollables","flexibleDimensions","growAfterOpen","canPush","_transformOriginSelector","endX","overlayStartX","_getOffset","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","pushX","pushY","overflowRight","overflowBottom","overflowTop","overflowLeft","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","_getScrollVisibility","changeEvent","xOrigin","yOrigin","smallestDistanceToViewportEdge","previousHeight","previousWidth","_hasExactPosition","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","_pushOverlayOnScreen","virtualKeyboardOffset","originBounds","overlayBounds","scrollContainerBounds","getElementRef","isOriginClipped","isOriginOutsideView","isOverlayOutsideView","overflows","currentOverflow","units","ConnectedPositionStrategy","originPos","overlayPos","withPush","withFallbackPosition","onPositionChange","setDirection","withDefaultOffsetX","withDefaultOffsetY","GlobalPositionStrategy","_cssPosition","_topOffset","_bottomOffset","_leftOffset","_rightOffset","_alignItems","_justifyContent","_height","shouldBeFlushHorizontally","shouldBeFlushVertically","marginTop","OverlayPositionBuilder","Overlay","_positionBuilder","_directionality","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CdkOverlayOrigin","CdkConnectedOverlay","_lockPosition","_flexibleDimensions","_push","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","overlayKeydown","overlayOutsideClick","_templatePortal","_updatePositionStrategy","_attachOverlay","_detachOverlay","_buildConfig","attachments","outsidePointerEvents","_createPositionStrategy","currentPosition","withGrowAfterOpen","lockPosition","transformOriginSelector","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","OverlayModule","_defineProperty","_setPrototypeOf","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","third","quadraticToCubicControlPoints","scaledPoint","translateWith","isRelative","lastControlIn","previousCommand","cubicControlPoints","SEGMENT_REGEX","SPLIT_REGEX","pathInstance","number","parseParameters","ARC","BOTTOM","CENTER","CIRCLE","CROSS","DATE","DEFAULT_PRECISION","HEIGHT","INSIDE","MIN_VALUE","OBJECT","OUTSIDE","ROUNDED_RECT","STRING","TOP","WHITE","WIDTH","classArray","SPACE_REGEX","alignPathToPixel","util","clockwise","angle1","angle2","convertableToNumber","deepExtendOne","propInit","propValue","propType","destProp","SIZE_STYLES_REGEX","isSizeField","getSpacing","defaultSpacing","compile","getTemplate","grep","inArray","interpolateValue","handlerMap","callObserver","requiresHandlers","mousewheelDelta","MAX_DEPTH","FontLoader","fetchFonts","setDefaultOptions","sparseArrayLimits","isDark","DELETED","_values","createHashSet","defaultErrorHandler","autoMajorUnit","relativeValue","theta","cosT","sinT","rotatePoint","targetBox","arrayPoint","Box","targetCenter","dw","r3","r4","sizeFunc","numericComparer","innerRadius","Ring","newRadius","radianAngle","ax","ay","sector","midAndle","midPoint","hw","vector","startVector","endVector","angles","allAngles","startAngleIndex","endAngleIndex","wrapPoint","ShapeBuilder","fromArc","innerEnd","initUserOptions","reflow","getService","chartService","childrenCount","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","renderVisual","Animation","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","highlight","createHighlight","customVisual","_highlight","highlightOptions","highlightVisualArgs","getSender","series","category","runningTotal","gradientOptions","createGradient","shrinkToFit","hasSetSize","borderWidth","reflowPaddingBox","paddingBox","unpad","contentBox","translateChildren","background","hasBox","fromRect","toRect","visualStyle","pointData","borderRadius","setCornerRadius","visualOptions","getElement","RADIAL","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","boxDiff","boxes","rootOptions","gradients","createBackground","drawingGradient","hashCode","usedSpace","currentStops","currentStop","innerRadialStops","RadialGradient","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","groupElements","groupElementsCount","groupElementStart","groupSize","elementBox","groupElementsSize","DrawingText","rectToBox","ROWS_SPLIT_REGEX","_initContainer","_autoReflow","floatElement","textOptions","rowIdx","visualFn","_boxReflow","visualBox","hasSize","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","_textBox","snapTo","titleOptions","titles","collapseVerticalMargins","prevBox","culture","widget","alignRotation","alignEnd","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","distanceLeft","distanceRight","alignCenter","childAlias","noteTemplate","auto","aliasFor","wrapperBox","lineStart","alignTo","linePoints","createLine","defaultVisual","FORMAT_REPLACE_REGEX","formatString","placeholderFormat","chart","pannable","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineEnd","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createNotes","labelsCount","labelOptions","clearLabels","normalizeLabelRotation","autoRotateLabels","labelsRange","createAxisLabel","mirror","axisX","axisY","visualSize","notes","parseNoteValue","note","createPlotBands","gridLines","_gridLines","lineGroup","lineBox","majorUnit","tickLineOptions","tickPositions","skipUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_alignLines","_lineGroup","createTicks","_backgroundPath","plotBands","plotArea","_plotbandGroup","altAxis","axes","slotX","slotY","getSlot","createPlotBandLabel","bandRect","textbox","labelTemplate","minorGridLines","majorGridLines","axisLineVisible","linePos","lineOptions","gridLinesVisual","sizeFn","titleSize","space","getActualTickSize","boxSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","labelsBetweenTicks","getLabelsTickPositions","tickIx","labelTickIndex","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelBox","labelOffset","labelX","labelY","slotWidth","labelAngle","autoRotateLabelAngle","slot","shouldRenderNote","noteSlot","secondAxis","defaultText","localeAuto","isPannable","maxLabelOffset","lastLabel","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","startTick","endTick","rangeSize","seriesMin","seriesMax","axisDir","lineDir","axisOrigin","lineInfo","rawScale","justified","axisCrossingValue","MILLISECONDS","SECONDS","MINUTES","HOURS","DAYS","WEEKS","MONTHS","YEARS","TIME_PER_MINUTE","TIME_PER_HOUR","TIME_PER_DAY","TIME_PER_WEEK","TIME_PER_MONTH","TIME_PER_YEAR","TIME_PER_UNIT","absoluteDateDiff","addTicks","ticks","adjustDST","addDuration","dateValue","daysToSubtract","startOfWeek","roundedDate","tzDiff","addHours","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","baseUnitStep","startDate","parseDates","_ticks","CategoryAxis","categories","srcCategories","definedMin","definedMax","totalRange","_seriesMax","rangeIndices","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","stepSize","scaleOptions","tickIndices","getHash","_hash","hasMinor","getTickPositions","filterOutOfRangePositions","slotBox","singleSlot","limittedSlot","categoryIndex","pointCategoryIndex","totalIndex","pointOffset","totalRangeIndices","scaleToDelta","totalMin","totalMax","scaleRange","labelContext","axisLabelText","hideOutOfRangeNotes","rangeMin","rangeMax","_categoriesMap","DateLabelFormats","weeks","BASE_UNITS","FIT","categoryRange","_range","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","displayEnd","_indices","minIdx","maxIdx","valueIndex","valueRange","upper","roundedStep","autoBaseUnit","startUnit","startStep","unitSteps","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","autoUnitIx","totalUnits","DateCategoryAxis","dataRange","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","lastCategory","minDiff","categoryIx","defaultBaseUnit","initUnit","displayRange","divisionOptions","dataRangeOptions","divisionRange","rangeLabels","valuesCount","dateAt","dateIndex","totalLimits","panRange","pointsRange","datesRange","indicesRange","displayIndices","minDelta","maxDelta","autoBaseUnitStep","maxDiff","rangeDiff","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","autoRotateRangeLabels","hideOverlappingLabels","firstRangeLabel","lastRangeLabel","rangeLabel","overlaps","unitFormat","createLabel","rotateLabel","dateRange","limitCoordinate","MIN_VALUE_RANGE","autoOptions","narrowRange","autoMin","axisMin","autoAxisMin","autoMax","axisMax","autoAxisMax","roundToMajorUnit","remainderClose","autoAxisOptions","totalOptions","totalAxisOptions","userOptions","userSetMin","userSetMax","clearNullValues","userSetLimits","totalMajorUnit","NumericAxis","stepValue","divisions","getDivisions","skipStep","translateRange","divisor","ratio","axisOptions","baseUnitTime","actualUnits","unitsToAdd","axisCrossingValues","DateValueAxis","limittedRange","logMaxRemainder","throwNegativeValuesError","initRange","logMin","logMax","LogarithmicAxis","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","minorOptions","_minorIntervalOptions","minorStep","createGridLines","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","reflowLabels","adjacentBox","skipOption","stepOption","divCount","divAngle","majorIntervals","minorAngle","minorRadius","band","plotBandSlot","ring","createRing","totalDivs","slotAngle","fromValue","slotStart","instanceOptions","angularDistance","polarAxis","bandStyle","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","axisType","minorSkipStep","dataPoints","removeDuplicates","initialControlPoint","lastControlPoint","Segment","tangent","firstControlPoint","secondControlPoint","controlPoints","cp0","invertAxis","lineFunction","calculateFunction","xField","yField","restrict","switchOrientation","isLine","monotonic","isMonotonicByField","oldXField","restrictControlPoint","cp","xValue","yValue","_axis","getCategory","prepareUserOptions","chartsVisual","chartContainer","_plotArea","backgroundVisual","_bgVisual","countNumbers","Aggregates","sumOrNull","avg","getField","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","seriesTypes","valueFields","otherFields","_makeValue","pointIx","fieldData","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","srcFields","srcFieldName","canonicalFields","sourceFieldName","percentRegex","standardDeviationRegex","initGlobalRanges","deviationMatch","valueGetter","createValueGetter","average","getAverage","deviation","getStandardDeviation","errorRange","globalRange","standardError","getStandardError","binder","pointValue","percentValue","isSample","squareDifferenceSum","INITIAL_ANIMATION_DURATION","FADEIN","BORDER_BRIGHTNESS","START_SCALE","INTERPOLATE","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HEATMAP","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","SERIES_HOVER","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT","SELECT_END","SHOW_TOOLTIP","HIDE_TOOLTIP","LOGARITHMIC","CATEGORY","INSIDE_END","OUTSIDE_END","MOUSEWHEEL","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","seriesValueAxis","evalOptions","dryRun","needsEval","excluded","categoriesCount","seriesCount","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","seriesIx","pointType","invertAxes","isStacked100","otherValues","categorySum","otherStack","isStacked","plotValue","isStackedBar","otherValue","categoryAxisCrossingValue","axisName","stackName","pIx","plotRange","chartSeries","limitsCache","limits","stackLimits","errorTotals","errorBars","lowValue","highValue","seriesErrorRanges","getErrorRange","addPointErrorBar","stackedErrorRange","errorBar","createPoint","noteText","addErrorBar","doEval","pointOptions","axisRange","namedValueAxes","categorySlots","chartPoints","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","limitSlot","axisIndex","_outOfRangeCallback","currentSeries","currentCategory","categoryAt","_bindPoint","outOfRangePoint","_bindCache","bindCache","bindPoint","over","createNote","tooltipTracking","markers","_rendered","createMarker","labelText","brightness","markerBorder","_childBox","childBox","reflowLabel","noteTargetBox","markerBox","shadow","halfSize","verticalAlign","clipBox","formatPointValue","toGeometryPoints","segmentVisual","getNearestPoint","toGeometryPoint","lintPoint","stepAxis","stepDir","calculateStepPoints","previousPoint","stepPoint","curve","renderSegments","_segments","sortedPoints","sortPoints","pointCount","seriesMissingValues","createSegment","_addSegment","missingValues","nearestPoint","allPoints","nearestPointDistance","_setEnd","setX","anyHasZIndex","clipPath","_setChildrenAnimation","animationPoints","LineChart","updateStackRange","evalPointOptions","prevSegment","stackPoints","createFill","createStroke","_strokeSegments","createStrokeSegments","segmentsFromPoints","createStackSegments","strokeSegments","fillSegments","hasStackSegments","hasStackSegment","stackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","curveProcessor","previousSegment","_gapStackPoints","_stackPoints","stackPoint","_outOfRangeMinPoint","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","axisRanges","chartAxisRanges","chartRange","textBox","parentBox","hasGradientOverlay","rectVisual","createRect","strokeOpacity","getBorderColor","createGradientOverlay","baseColor","_brightness","borderColor","gap","slots","slotSize","positionAxis","negativeColor","cluster","clusterType","getStackWrap","stackWrap","stackGroup","wraps","_stackGroup","stackType","zeroSlot","childrenLength","_setAnimationOptions","pointVisual","ocSlot","lhSlot","realBody","mid","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","tooltip","areNumbers","splitValue","downColor","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","medianSlot","median","mean","meanSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","outliers","outerFence","outlierValue","markersBorder","reflowOutliers","renderOutliers","whiskers","filterOutliers","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","createMissingValue","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","namedYAxes","highlightGroup","_maxSize","negativeValues","updateBubblesSize","minR","minSize","maxR","minArea","areaRatio","area","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","tooltipAnchor","seriesItem","wrapData","bulletOptions","bullet","pointColor","tooltipOptions","getStyle","crosshair","formatService","initAxisName","stickyMode","getAnchor","moveLine","showAt","getBox","dim","axisLineBox","currentAxis","chartsBox","shouldClip","clipRect","_clipBox","unclipLabels","charts","overlapsBox","unclipElements","alignToClipBox","ID","buildTitle","Pane","removeAxis","removeChart","allAxes","vGridLines","hGridLines","notifyRender","axisValueField","paneIndex","appendIfNotNull","segmentVisible","pointVisibility","bindSegments","equalsIgnoreCase","filterSeriesByType","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","AREA_REGEX","findNext","pointHasValue","outPoint","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","_outOfRangeMaxPoint","initSeries","legend","crosshairs","originalOptions","createPanes","createCrosshairs","paneDefaults","paneOptions","panes","panesLength","currentPane","crosshairOptions","currentCrosshair","matchingPane","findPane","appendAxis","axisToRemove","filteredAxes","appendChart","chartToRemove","filteredCharts","inactiveItems","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","xAxes","yAxes","paneIx","paneAxes","axisIx","any","seriesByPane","seriesPaneName","reflowPanes","detachLabels","reflowAxes","reflowCharts","panesArray","cleanGradients","removeCrosshairs","crossingAxes","crossingValues","valuesToAdd","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","alignAxisTo","_mirrored","groupAxes","axisGroupBox","shrinked","paneBox","reflowPaneAxes","alignAxes","shrinkAxisWidth","autoRotateAxisLabels","shrinkAxisHeight","fitAxes","groupedAxes","rotated","allPaneAxes","chartPane","remainingHeight","autoHeightPanes","percents","axesCount","axisA","axisB","multipath","chartsBoxes","addBackgroundPaths","seriesIndex","filterPoints","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","appendAxisAt","isSingleAxis","_dispatchEvent","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","DefaultAggregates","seriesType","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","fromPath","createCurveSegments","RangeAreaChart","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","createSegments","totalCategories","summary","prevPoint","AREA_SERIES","OUT_OF_RANGE_SERIES","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","groupSeriesByPane","paneSeries","addToLegend","visibleSeries","filterVisibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","axisPane","categoryField","aggregateSeries","filterSeries","currentRangeIndices","outOfRangePoints","categoriesHash","dateAxis","srcData","getFn","mapCategories","seriesSourcePoints","aggregator","categoryItem","categoryIdx","aggregatePoints","categoriesToAdd","firstSeries","categoryAxes","axisSeries","groupSeries","barChart","stackableChartOptions","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","isJustified","axisRequiresRounding","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","_eventCoordinates","pointPane","targetOptions","_points","arrayPoints","toggleHighlight","hasHighlight","togglePointHighlight","toggleHandler","highlightVisual","acceptKey","mouseKey","toChartAxisRanges","ranges","_panAxes","updateAxisOptions","redraw","updatedAxes","pan","_marquee","zoomPane","_zoomPane","paneByPoint","_zoomPaneClipBox","_selectionPosition","selectionPosition","_updateAxisRanges","startLocation","rate","zoomRange","Layout","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","HORIZONTAL","CUSTOM","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","PlotAreaFactory","createDiv","closestHandle","_dateAxis","initOptions","createElements","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderRightWidth","_mousewheelHandler","_mousewheel","_domEvents","_move","_tap","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","_mwTimeout","moveTarget","_rangeEventArgs","oldRange","rightClick","_toModelCoordinates","_slot","leftMaskWidth","rightMaskWidth","toValue","zDir","zoom","relative","tooltipPoints","_slotAnchor","_defaultAnchor","categoryText","categoryFormat","slotCenter","fromScale","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","inferredDate","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","xAxesOptions","yAxesOptions","createXYAxis","xValues","yValues","themeLabels","seriesDefaults","animationDelay","labelsOptions","labelsDistance","lp","labelHeight","createSegmentVisual","borderOptions","fallbackFill","singleSegment","RAD_60","RAD_30","createLegendItem","legendOptions","pointVisible","legendItems","seriesColors","colorsCount","anglePerValue","constantAngle","explode","segmentOptions","evalSegmentOptions","seriesConfigs","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","firstBox","_takeDistance","boxX","labelDistance","boxY","hAlignLabel","connectors","_connectorLines","connectorLine","centerPoint","crossing","pointInCircle","pieCenter","bboxBottom","reverseValue","createPieChart","pieChart","holeSize","seriesWithoutSize","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","onCircle","_polarAxisCenter","centerSegment","xComparer","_hasMissingValuesGap","scatterChart","valueRadius","seriesSegments","groupBySeriesIx","slotSector","childSector","RadarPlotArea","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","firstSegment","maxSegment","lastUpperSide","nextSegment","nextPercentage","dynamicHeight","segmentSpacing","decreasingWidth","neckRatio","finalNarrow","labelPadding","dynamicSlope","dynamicSlopeReflow","constantSlopeReflow","createFunnelChart","funnelChart","labelColor","halfBorderWidth","minLightnessOffset","hsl","indexX","indexY","xRange","yRange","xIndex","yIndex","bindCategories","createAxisLabels","xCategories","yCategories","createHeatmapChart","xAxisOptions","yAxisOptions","COLOR","FIRST","NOTE_TEXT","errorLow","errorHigh","AXIS_NAMES","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","themeOptions","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","preloadFonts","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","aliases","resolveAxisAliases","applyDefaults","applySeriesColors","chartArea","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","seriesName","categoryName","pointByCategoryName","pointsBySeriesName","togglePointsHighlight","_sharedTooltip","_tooltip","findPoint","pointsByCategoryIndex","_surfaceWrap","renderAs","_destroySurface","Surface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","setup","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","exportOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","_mousewheelZoom","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","toggleDrag","toggleZoom","_createSharedTooltip","axisDefaults","themeAxisDefaults","mapAxisOptions","axisColor","applyAxisDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","applySeriesDefaults","seriesColor","_createPlotArea","_modelOptions","subtitle","orderTitles","skipSeries","selections","_clickHandler","_mouseleaveHandler","_mouseover","_mouseout","_toDocumentCoordinates","_shouldAttachMouseMove","_toggleDragZoomEvents","_hoveredPoint","_plotAreaHovered","_stopChartHandlers","_gestureDistance","suspendTracking","_zooming","resumeTracking","mousewheelZoom","scaleDelta","updateRanges","_drawingChartElement","backgroundContainsPoint","_startNavigation","_suppressHover","_endNavigation","onPane","totalDelta","_mousewheelZoomRate","chartEvent","findPointPane","coordinates","_padding","_elementPadding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","_getChartElement","_showInactiveOpacity","activePoint","multipleSeries","highlightPoints","chartInstance","_activeChartInstance","_chartInstanceFromPoint","_updateSeriesOpacity","_applySeriesOpacity","inactivePoints","supportsPointInactiveOpacity","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","inactiveOpacity","activeSeries","_activePoint","hasInactiveOpacity","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","hasDefaultInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_hideInactiveOpacity","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","hideCrosshairs","keepTooltipOpen","_redrawTimeout","autoBind","bindCategoryAxisFromSeries","uniqueCategories","bindable","dataIx","srcDates","sortDates","uniqueDates","rowCount","rowIx","colCount","colIx","transpose","transitionsState","pointsBySeriesIndex","applyOptions","updateMouseMoveHandler","_clearRedrawTimeout","bar","rangeColumn","verticalLine","pie","donut","verticalArea","scatter","scatterLine","bubble","candlestick","ohlc","boxPlot","verticalBullet","polarArea","polarLine","radarArea","radarLine","waterfall","DATA_FIELDS","fieldValue","originalValue","NO_CROSSHAIR","wrapNumber","_initialWidth","stage","displayState","_autoWidth","_calculateWidth","currentChart","pointsCount","pointWidth","_initialOpacity","chartPadding","minPos","clearHideTimeout","_visible","tooltipStyle","_hideTimeout","_hideAnimation","NAVIGATOR_PANE","NAVIGATOR_AXIS","ClonedObject","chartObserver","_redrawSelf","initSelection","mainAxis","roundedRange","axisClone","selectStart","selectEnd","filterAxes","silent","slavePanes","clearSeriesPointsCache","navigatorAxis","naviRange","inNavigator","liveDrag","redrawSlaves","showHint","fromIx","toIx","readSelection","_dragEnd","backgroundBox","_selectStart","_selectEnd","__navi","naviOptions","Navigator","attachAxes","attachSeries","valueAxes","justifyAxis","_collapse","autoBindElements","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","noTransitionsRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","ANGULAR_SPEED","ARROW_POINTER","BAR_POINTER","DEFAULT_LINE_WIDTH","DEGREE","RADIAL_POINTER","RADIAL_RANGE_POINTER","buildLabelElement","styleGeometry","styleBox","getRange","contextService","surfaceElement","pointerValue","pointer","_setValueOptions","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","renderAxisTick","tickRenderOptions","tickGroup","renderLabels","scaleLine","renderLine","scaleTicks","renderTicks","renderRanges","linePath","_oldValue","repaint","pointerBox","pointerRangeBox","trackBox","pointerHalfSize","toScale","translateX","translateY","_margin","elementOptions","getElementOptions","pointerShape","newPoints","oldPoints","speed","minSlot","sizeAxis","pointerPath","oldShape","renderTrack","trackOptions","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","_draw","scaleElements","plotAreaBox","scaleBox","GEO_ARC_ADJUST_ANGLE","drawTicks","tickAngles","getRadiusX","tickStart","tickEnd","rangeSegment","renderArc","labelElements","repositionRanges","labelsGroup","rangeDistance","isInside","hasLabelElements","ticksSize","hasRanges","setRadiusX","setRadiusY","paddingHeight","labelPos","labelElement","prevLabelPos","labelTransform","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","createRange","rangeGeom","rangePlaceholderColor","tickArc","majorTickAngles","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","newPoint","xDiff","yDiff","newAngle","oldAngle","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","_initialPlotArea","fitScale","alignScale","_buildPointers","midDiff","oldDiff","getDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingY","pointersArr","rangeLineCap","setEndAngle","setStartAngle","startColor","currentColor","placeholderRangeAngle","addRange","setOptions","initProperties","quietZoneLength","addQuietZone","convertedValue","addData","addCheckSum","extend","characterMap","cCheckSumTotal","kCheckSumTotal","kCheckSumMinLength","checkSumMod","DASH_VALUE","DASH","START","STOP","addPattern","addCharacter","setBaseUnit","cValue","getWeightedSum","kValue","weightedSum","weightedValue","invalidCharacterError","minBaseUnitLength","addStart","pushCheckSum","addStop","prepareValues","addBase","minRatio","maxRatio","splitCharacter","patternMappings","patternString","minBaseUnit","getBaseUnit","getBaseWidth","addCharacterGap","Code39ExtendedBase","addExtended","patterns","extendedMappings","patternIndex","shiftCharacters","dataCharacter","specialAsciiCodes","shiftValuesAsciiCodes","SHIFT0","SHIFT1","SHIFT2","SHIFT3","TERMINATION_BAR","charData","checkValues","_getCheckValues","_findCharacterByValue","wightedSum","characterByValue","numberRegex","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","checkSum","alphanumericRegex","encoding","_initMoves","FNC4","isCode","encodingState","_moves","numberMatch","_moveFNC","_shiftState","_moveState","fnc","previousState","shifted","MOVE","states128","next4","getSubstring","_initSubStates","dependentStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","startState","startAI","endAI","applicationIdentifiers","multiKey","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","applicationIdentifier","getApplicationIdentifier","unsupportedAIError","_initStates","getNextState","checkSumType","checkSums","checkSumLength","Modulo10","evenSum","oddSum","Modulo11","checkValue","Modulo11Modulo10","Modulo10Modulo10","keyTable","valueAsString","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","arrToAdd","limitedHeight","Encodings","code11","code39","code39extended","code93","code93extended","code128","code128a","code128b","code128c","surfaceSize","surfaceType","_setOptions","_initSurfaceElement","_createSurface","_destroySurfaceElement","_render","encodedValue","textToDisplay","textMargin","barHeight","_getBackground","_getText","_bandsGroup","_getBands","stepX","patternItem","_textbox","splitInto","chunkLength","toBitsString","bitString","toDecimal","dataString","inputString","errorCorrectionLevel","modes","previousMode","chooseMode","modeString","nextMode","getModes","getVersion","DataModeInstances","getStringBitsLength","getDataCodewordsCount","getDataString","modeIndicator","bitsInCharacterCount","getVersionIndex","getBitsCharacterCount","getModeCountString","inputLength","mod3","characters","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","bytesCount","getBytesCount","significantOnes","VersionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","terminator","powersOfTwo","powersOfTwoResult","irregularAlignmentPatternsStartDistance","15","16","18","19","22","24","26","28","31","32","33","36","37","39","finderPattern","alignmentPattern","errorCorrectionPatterns","paddingCodewords","maskPatternConditions","alphaRegex","alphaNumericRegex","byteRegex","generatorPolynomials","fillFunctionCell","matrices","bit","fillDataCell","xorPolynomials","multiplyPolynomials","multiplyByConstant","generateErrorCodewords","errorCodewordsCount","generatorPolynomial","errorCodewords","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","dataCodewordsCount","encodeBCH","codeLength","generatorNumber","polynomialLength","valueNumber","numberX","numberY","yLength","xLength","dividePolynomials","getNumberAt","addFormatInformation","addVersionInformation","quotient","mod","addCentricPattern","addFinderSeparator","nextX","nextY","scoreFinderPatternOccurance","scores","rowColumn","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","mod5","generatePowersOfTwo","generateGeneratorPolynomials","crossPattern","squarePattern","quietZoneSize","contentSize","encodingResult","createQRCodeDataEncoder","getEncodingResult","versionInformation","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","blockIdx","codewordIdx","getBlocks","initialDataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","padDataString","initMatrices","addFinderPatterns","startDistance","addAlignmentPatterns","addTimingFunctions","cellVisitor","getNextCell","getNextRemainderCell","fillData","adjacentSameBits","modulesLength","matrixIndex","scoreMaskMatrixes","optimalMatrix","encodeVersionInformation","encodedString","encodeFormatInformation","encodeData","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","imageRect","logoSize","_getLogoSize","logoUrl","crossSize","crossOffset","_renderShape","matrixSize","defautLogoSize","datums","WGS84","toSquare","math","atan","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","datum","greatCircleTo","initialBearing","initialDatum","bearing","fromLat","fromLng","dToR","initialDest","azimuthFrom","azimuthTo","prevLambda","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","converged","sinA","u2","deltao","lngAndLat","fromLatLng","PI_DIV_4","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","proj","lng0","centralMeridian","_projectLat","ecc","con","_inverseY","ecch","phi","dphi","_proj","_tm","_itm","inverse","convertToHtml","removeChildren","prepend","originElement","toHyphens","toPixels","detectOS","formFactorRxs","tablet","testRegex","regexes","getEventMap","eventMap","getSupportedFeatures","detectBrowser","mobileChrome","crios","mouseAndTouchPresent","eventCapture","transforms","hasTransitions","lowPrefix","delayedClick","eventFilter","closestMatchingTarget","applyEventMap","setDefaultEvents","FUNCTION","that","extent","_extent","_zoom","_itemText","appendHtml","showElement","hideElement","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","newMin","newMax","directionsMap","createButton","navigateUpButton","navigateRightlButton","navigateDownButton","navigateLeftButton","_keyroot","_tabindex","_keydownHandler","_keydown","TABINDEX","panStep","_pan","CHANGE","zoomInButton","zoomOutButton","zoomStep","initialNw","initialSe","nw","locs","include","containsAny","Extent","CENTER_CHANGE","INIT","widgetService","_anchor","documentPoint","scrollElement","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","layers","compileTemplate","roundPoint","renderSize","newSize","subdomains","_viewType","locationToLayer","viewOrigin","extentToPoint","tileSize","urlTemplate","_center","_viewOrigin","firstTileIndex","pointToTileIndex","indexToPoint","subdomainIndex","tile","tileCount","createTile","tileOptions","wrapIndex","subdomainText","errorUrlTemplate","wrapValue","urlResult","urlOptions","quadkey","_create","maxDist","_release","cancelCapture","forcedEnabled","scrollSize","_virtualMin","_virtualMax","getTotal","scaledTotal","minScale","centerOffset","forcedMinScale","maxScale","newScale","rescale","outOfBounds","movable","dragDelta","resistance","translateAxis","elastic","dimensions","userEvents","gesture","closestAnchor","previousGesture","previousCenter","scaleWith","dragMove","transformStyle","webkitTransformOrigin","_saveCoordinates","by","newCoordinates","_initRoot","_markers","_translateSurface","_readData","_hasData","geometries","_clearMarkers","_loader","cancelled","renderPointsAsMarkers","_createMarker","_panning","locationToView","layerIndex","_layerIndex","shapeIndex","_eventArgs","_tooltipAnchor","_tooltipContext","eventOffset","_panHandler","panHandler","_loadGeometryTo","_featureCreated","shapeCreated","featureCreated","_loadPolygon","_setLineFill","_loadPoint","_shapeCreated","rings","_buildPolygon","viewToLocation","_loadShape","fromLngLat","scaleType","_scaleType","locationField","_createSymbol","_drawSymbol","Scales","Symbols","_domain","domainRange","_ratio","rel","geo","CLICK","MOUSE_ENTER","MOUSE_LEAVE","MARKER_CLASS","_markerClickHandler","_markerClick","_addOne","addTo","titleField","markerIndex","_createMarkerEventArgs","_mouseEnterHandler","_mouseEnter","_mouseLeaveHandler","_mouseLeave","_createEventArgs","_markerMouseEnter","_markerMouseLeave","Marker","_tickProxy","_tick","onCancel","timePassed","_easeProxy","ease","moveAxis","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","getTouches","api","invalidZeroEvents","_updateLocationData","velocity","timeStamp","timeDelta","initialDelta","touchInfo","useClickAsTap","pressEvent","_clicks","supportDoubleTap","_moved","_holdTimeout","_hold","minHold","_clickTimeout","_shouldNotMove","_withinIgnoreThreshold","activeTouches","activeTouchIndex","jQueryEvent","xDelta","yDelta","withEachUpEvent","downEvents","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","pressed","_surfaceMoveHandler","_surfaceEndHandler","_elementStartHandler","_elementClickHandler","defaultAction","preventDragEvent","_elementDragStartHandler","_elementSelectHandler","preventIfMovingProxy","preventIfMoving","_isMoved","_disposeAll","UserEvents","touch1","touch2","_isMultiTouch","_apiCall","isMoved","_maxTouchesReached","_eachTouch","matchingTouch","SCROLL","tapCapture","scaleTo","_moveTo","paneAxis","_snapBack","velocityMultiplier","captureNext","friction","easeOutExpo","_updateCoordinates","scrollMovable","alwaysVisible","paneSize","sizeRatio","hasScrolling","_native","useNative","scrollHeader","fixedContainer","wrapInner","avoidScrolling","velocityX","velocityY","horizontalSwipe","verticalSwipe","ownsElement","zoomSnapBack","animatedScroller","mousewheelScrolling","_wheelScrollHandler","_wheelScroll","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelTimeout","makeVirtual","virtualSize","contentResized","_scale","centerCoordinates","setCoordinates","setCallback","scrollBar","visibleScrollHints","pullOffset","pullTemplate","releaseTemplate","refreshTemplate","layersMap","renderPos","zoomControl","markerLayer","initObserver","_setEvents","crs","_initScroller","_initMarkers","_initControls","_initLayers","_setExtent","_getExtent","wraparound","locationObject","_layerSize","pointObject","toLocation","pointResult","layerToLocation","eventToLocation","viewSize","originLocation","newExtent","layerWidth","layerHeight","pivot","_setOrigin","_createAttribution","_createNavigator","_createZoomControl","defaultPosition","posSelector","_createControlElement","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","defs","_createLayer","layerOptions","markerDefaults","layerDefaults","layerConstructor","_scrollOffset","hideTooltip","_panComplete","_panEndTimestamp","_scaleToZoom","gestureCenter","centerLocation","_zoomAround","_resetScroller","xBounds","yBounds","newZoom","toZoom","fromZoom","BAR_GAP","BAR_SPACING","SANS","SANS12","SANS16","TRANSPARENT","boxPlotSeries","outliersField","meanField","bulletSeries","waterfallSeries","rangeArea","verticalRangeArea","heatmap","funnel","horizontalWaterfall","rangeBar","verticalBoxPlot","baseTheme","TooltipPopupComponent_ng_template_0_1_ng_template_0_Template","TooltipPopupComponent_ng_template_0_1_Template","seriesTooltipTemplateRef","seriesTooltipContext","TooltipPopupComponent_ng_template_0_2_ng_template_0_Template","TooltipPopupComponent_ng_template_0_2_Template","seriesSharedTooltipTemplateRef","seriesSharedTooltipContext","TooltipPopupComponent_ng_template_0_Template","TooltipPopupComponent_ng_template_2_Template","TooltipPopupComponent_ng_template_3_tr_4_td_1_Template","point_r15","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_1_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_2_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_Template","TooltipPopupComponent_ng_template_3_tr_4_ng_template_4_Template","TooltipPopupComponent_ng_template_3_tr_4_Template","colorMarker_r12","colorMarker","nameColumn_r13","nameColumn","TooltipPopupComponent_ng_template_3_Template","points_r9","categoryText_r10","colspan_r11","CrosshairTooltipComponent_ng_template_0_Template","CrosshairTooltipsContainerComponent_kendo_chart_crosshair_tooltip_0_Template","key_r1","ChartComponent_div_5_ng_template_1_Template","ChartComponent_div_5_Template","donutCenterStyle","donutCenterTemplate","ChartComponentGenerated","configurationService","axisLabelClick","dragEnd","dragStart","legendItemHover","legendItemLeave","noteClick","noteHover","noteLeave","paneRender","plotAreaClick","plotAreaHover","plotAreaLeave","seriesClick","seriesHover","seriesOver","seriesLeave","zoomEnd","zoomStart","THROTTLE_MS","ConfigurationService","initSource","onFastChange$","onChange$","EVENT_MAP","InstanceEventService","DonutCenterTemplateDirective","CollectionService","onItemChange$","copyChanges","toSimpleChanges","CollectionItemComponent","collectionService","SeriesItemComponentGenerated","closeField","colorField","currentField","downColorField","errorHighField","errorLowField","explodeField","fromField","highField","lowField","lowerField","medianField","noteTextField","openField","q1Field","q3Field","summaryField","toField","upperField","visibleInLegendField","xErrorHighField","xErrorLowField","yErrorHighField","yErrorLowField","configKey","SeriesTooltipComponentGenerated","SeriesTooltipComponent","markAsVisible","seriesTooltipTemplate","flag","SeriesItemComponent","pv","seriesTooltip","ThemeService","readTheme","readDefaultTheme","queryColor","setColors","setFonts","setSeriesColors","destroyElement","mapColor","queryStyle","defaultFont","titleFont","labelFont","seriesPos","legendItemClick","showTooltip","TooltipTemplateService","seriesTemplates","sharedTemplate","SeriesTooltipTemplateDirective","SharedTooltipTemplateDirective","xLow","xHigh","yLow","yHigh","COLLISION","BaseTooltip","onInit","scrollOffset","hasParent","bodyFactory","TooltipPopupComponent","templateService","getSharedTemplate","defaultSharedTooltipTemplate","sharedTemplateContext","pointTemplateRef","wrapPoints","defaultSeriesTooltipTemplate","mouseleaveSubscription","ɵ0$3","CrosshairTooltipComponent","AXES","CrosshairTooltipsContainerComponent","tooltipKeys","tooltipsMap","tooltipComponents","crossahirTooltipComponents","newMap","mapTooltips","removeTooltip","tooltips","axesCrosshairTooltipOptions","tooltipIdx","getTouch","domEvent","shouldBindGroup","groupNames","eventGroups","hammerInstance","eventHandlers","panstart","panmove","panend","pinchstart","pinchmove","pinchend","previousArgs","xLocation","yLocation","pointer1","pointer2","srcEvent","deltaX","eventGroup","nameIdx","recognizer","HAMMER","recognizers","Tap","Pan","Pinch","Press","dateValueAxisFormats","skeleton","ChartComponent","themeService","instanceEventService","resizeRateLimit","suppressTransitions","loadTheme","refreshWait","canRender","chartMouseleave","rtlChange","autoResize","resizeTimeout","redrawTimeout","findAxisByName","findPaneByIndex","findPaneByName","instanceObserver","createInstance","seriesComponents","toggleVisibility","togglePointVisibility","getDonutCenterStyle","crossahirTooltips","tooltipInstance","activeEmitter","updateDirection","createCrosshairTooltips","setChartAreaSize","hideElements","inZone","deferredRedraw","isRTL","tooltipMouseleave","AxisDefaultsComponentGenerated","AxisDefaultsComponent","AxisDefaultsLabelsComponentGenerated","AxisDefaultsLabelsComponent","CollectionComponent","processChanges","readItems","CategoryAxisItemComponentGenerated","CategoryAxisItemComponent","CategoryAxisComponentGenerated","CategoryAxisComponent","LegendComponentGenerated","LegendComponent","SeriesComponentGenerated","SeriesComponent","tooltipTemplateService","readTooltipTemplates","templates","setSeriesTemplates","SeriesLabelsComponentGenerated","SeriesLabelsComponent","TooltipComponentGenerated","setTemplate","setSharedTemplate","sharedTooltipTemplate","ValueAxisLabelsComponentGenerated","ValueAxisLabelsComponent","RootConfigurationService","ɵRootConfigurationService_BaseFactory","EVENT_MAP$1","navigatorFilter","StockInstanceEventService","ɵStockInstanceEventService_BaseFactory","NAVIGATOR_DEFAULTS","StockChartComponent","applyNavigatorDefaults","PREFIX","PrefixConfigurationService","rootService","NavigatorComponent","NavigatorSelectComponent","NavigatorSeriesItemComponent","NavigatorSeriesComponent","ChartModule","StockChartModule","SparklineModule","ChartsModule","EmptyError","EmptyErrorImpl","ɵZoneScheduler","targetZone","ɵBlockUntilFirstOperator","unscheduleTask","scheduleMacroTask","ɵAngularFireSchedulers","ɵkeepUnstableUntilFirstFactory","obs$","noopFunctions","ɵlazySDKProxy","ɵapplyMixins","derivedCtor","constructors","baseCtor","FIREBASE_OPTIONS","FIREBASE_APP_NAME","FirebaseApp","ɵfirebaseAppFactory","apps","initializeApp","hmr","hot","ɵlogAuthEmulatorError","ɵfetchInstance","moduleName","ɵAngularfireInstanceCache","cachedArgs","cachedArg","newInstance","FIREBASE_APP_PROVIDER","AngularFireModule","renderSVG","testFragment","testContainer","hasParser","chartDoc","importedDoc","adoptNode","delayTime","SubscribeOnObservable","subscribeOn","HttpHandler","HttpBackend","HttpHeaders","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","lcName","copyFrom","applyUpdate","toDelete","HttpUrlEncodingCodec","standardEncoding","paramParser","rawParams","codec","eqIdx","decodeKey","decodeValue","HttpParams","cloneFrom","encoder","fromString","eKey","encodeKey","encodeValue","isArrayBuffer","isBlob","isFormData","HttpRequest","fourth","reportProgress","mightHaveBody","urlWithParams","qIdx","setHeaders","setParams","HttpEventType","HttpResponseBase","defaultStatus","defaultStatusText","HttpHeaderResponse","ResponseHeader","HttpResponse","Response","HttpErrorResponse","addBody","HttpClient","events$","res$","callbackParam","HttpInterceptorHandler","interceptor","intercept","HTTP_INTERCEPTORS","NoopInterceptor","XSSI_PREFIX","XhrFactory","BrowserXhr","HttpXhrBackend","xhrFactory","detectedType","detectContentTypeHeader","reqBody","serializeBody","headerResponse","partialFromXhr","responseURL","getResponseUrl","originalBody","sentHeaders","onDownProgress","DownloadProgress","partialText","onUpProgress","UploadProgress","Sent","DONE","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","HttpXsrfCookieExtractor","cookieName","lastCookieString","lastToken","parseCount","cookieString","HttpXsrfInterceptor","tokenService","headerName","lcUrl","HttpInterceptingHandler","backend","chain","interceptors","HttpClientXsrfModule","HttpClientModule","withOptions","takeLast","navigationTrigger","restoredState","urlAfterRedirects","route","routeConfig","routerEvent","PRIMARY_OUTLET","convertToParamMap","navigationCancelingError","defaultUrlMatcher","segmentGroup","pathMatch","posParams","consumed","shallowEqual","equalArraysOrString","aSorted","bSorted","wrapIntoObservable","containsTree","containee","exact","equalQueryParams","equalSegmentGroups","containsQueryParams","containsSegmentGroup","equalPath","numberOfChildren","containsSegmentGroupHelper","containeePaths","fragment","_queryParamMap","DEFAULT_SERIALIZER","serialize","serializePaths","_parameterMap","serializePath","mapChildrenIntoArray","childOutlet","parseRootSegment","parseQueryParams","parseFragment","strParams","serializeSegment","encodeUriQuery","encodeUriString","encodeUriSegment","SEGMENT_RE","matchSegments","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","parseParens","parseMatrixParams","parseParam","valueMatch","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","pathFromRoot","findNode","findPath","nodeChildrenAsMap","setRouterState","createEmptyState","urlTree","createEmptyStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","futureSnapshot","_futureSnapshot","_routerState","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","flattenInherited","_resolvedData","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","serializeNode","advanceActivatedRoute","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","createNode","routeReuseStrategy","prevState","shouldReuseRoute","createOrReuseChildren","detachedRouteHandle","retrieve","setFutureSnapshotsOfActivatedRoutes","commands","numberOfDoubleDots","isAbsolute","cmdIdx","segmentPath","partIndex","computeNavigation","toRoot","startingPosition","isMatrixParams","createPositionApplyingDoubleDots","findStartingPosition","processChildren","updateSegmentGroupChildren","updateSegmentGroup","isCommandWithOutlets","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","oldSegment","newSegment","cmdWithOutlet","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","prefixedWith","slicedCommands","createNewSegmentGroup","getOutlets","createNewSegmentChildren","futureState","currState","forwardEvent","parentContexts","futureRoot","currRoot","deactivateChildRoutes","activateChildRoutes","futureNode","currNode","contexts","futureChild","childOutletName","deactivateRoutes","deactivateRouteAndItsChildren","future","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","onOutletDeactivated","activateRoutes","getOrCreateContext","shouldAttach","stored","onOutletReAttached","attachRef","advanceActivatedRouteNodeAndItsChildren","_loadedConfig","parentLoadedConfig","cmpFactoryResolver","activateWith","isUrlTree","INITIAL_VALUE","prioritizedGuardValue","isPending","innerAcc","ɵEmptyOutletComponent","validateConfig","getFullPath","currentRoute","standardizeConfig","loadChildren","getOutlet","absoluteRedirect","namedOutletsRedirect","redirectTo","configLoader","urlSerializer","allowRedirects","expandSegmentGroup","rootSegmentGroup","createUrlTree","noMatchError","rootCandidate","expandSegment","waitHead","waitTail","mapped","defaultIfEmpty","waitForMap","routesByOutlet","routeOutlet","groupRoutesByOutlet","expansions","expandSegmentAgainstRoute","noLeftoversInUrl","expandRoutes","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","newSegments","consumedSegments","lastChild","positionalParamSegments","rawSegmentGroup","cfg","rawSlicedSegments","getChildConfig","routerConfig","childModule","childConfig","slicedSegments","isEmptyPathRedirect","containsEmptyPathRedirectsWithNamedOutlets","mergeTrivialChildren","primarySegmentGroup","createChildrenForEmptySegments","containsEmptyPathRedirects","addEmptySegmentsToChildrenIfNeeded","runCanLoadGuards","shouldLoadResult","canLoadFails","canLoad","canLoadObservables","injectionToken","guardVal","guard","isCanLoad","applyRedirectCreatreUrlTree","newRoot","createSegmentGroup","createQueryParams","redirectToParams","actualParams","updatedSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","getClosestLoadedConfig","getChildRouteGuards","futurePath","checks","canDeactivateChecks","canActivateChecks","prevChildren","getRouteGuards","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","isActivated","fireActivationStart","fireChildActivationStart","runCanActivate","futureRSS","futureARS","canActivateObservables","isCanActivate","runCanActivateChild","canActivateChildGuardsMapped","guards","getCanActivateChild","guardsMapped","isCanActivateChild","rootComponentType","relativeLinkResolution","split$1","processSegmentGroup","routeState","inheritParamsAndData","routeNode","processSegment","routeWithSameOutletName","localeCompare","processSegmentAgainstRoute","rawSegment","getData","getSourceSegmentGroup","getPathIndexShift","getResolve","match$1","_sourceSegment","_segmentIndexShift","emptyPathMatch","containsEmptyPathMatchesWithNamedOutlets","primarySegment","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","switchTap","detachedTree","ROUTES","onLoadStartListener","onLoadEndListener","loadModuleFactory","newUrlPart","wholeUrl","defaultMalformedUriErrorHandler","defaultRouterHook","runExtras","Router","rootContexts","lastSuccessfulNavigation","currentNavigation","lastLocationChangeInfo","navigationId","isNgZoneEnabled","malformedUriErrorHandler","navigated","lastSuccessfulId","beforePreactivation","afterPreactivation","urlHandlingStrategy","onSameUrlNavigation","urlUpdateStrategy","resetConfig","currentUrlTree","rawUrlTree","browserUrlTree","routerState","currentRawUrl","extractedUrl","extract","rawUrl","extras","targetSnapshot","currentRouterState","targetRouterState","guardsResult","navigations","setupNavigations","processNavigations","eventsSubject","initialUrl","previousNavigation","urlTransition","shouldProcessUrl","serializeUrl","applyRedirects","finalUrl","serializer","recognize","recognize$1","skipLocationChange","setBrowserUrl","replaceUrl","routesRecognized","navStart","appliedUrlTree","guardsStart","currRSS","currARS","canDeactivate","canDeactivateObservables","isCanDeactivate","runCanDeactivate","runCanDeactivateChecks","runCanActivateChecks","checkGuards","guardsEnd","resetUrlToCurrentUrlTree","navCancel","resolveStart","dataResolved","canActivateChecksResolved","getResolver","resolveNode","resolvedData","runResolve","resolveEnd","redirecting","resetStateAndUrl","mergedTree","scheduleNavigation","navError","getTransition","setUpLocationChangeListener","navigateByUrl","locationSubscription","currentChange","extractLocationChangeInfoFromEvent","shouldScheduleNavigation","stateCopy","parseUrl","sameDestination","navigationExtras","relativeTo","queryParamsHandling","preserveFragment","removeEmptyProps","validateCommands","priorPromise","lastNavigation","browserNavPrecededByRouterNav","duplicateNav","setTransition","isCurrentPathEqualTo","storedState","storedUrl","RouterLink","attrBoolValue","routerLink","RouterLinkWithHref","locationStrategy","updateTargetUrlAndHref","RouterLinkActive","linkWithHref","routerLinkActiveOptions","routerEventsSubscription","links","linksWithHrefs","subscribeToEachLinkOnChanges","linkInputChangesSubscription","allLinkChanges","isLinkActive","hasActiveLinks","isActiveCheckFn","routerLinkActive","RouterOutlet","_activatedRoute","activateEvents","deactivateEvents","onChildOutletCreated","onChildOutletDestroyed","activatedRoute","childContexts","RouterPreloader","moduleLoader","preloadingStrategy","preload","processRoutes","preloadConfig","RouterScroller","viewportScroller","lastId","lastSource","restoredId","scrollPositionRestoration","anchorScrolling","setHistoryScrollRestoration","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","getScrollPosition","scheduleScrollEvent","scrollToPosition","scrollToAnchor","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","assignExtraOptionsToRouter","enableTracing","logGroup","logGroupEnd","routerNgProbeToken","RouterModule","provideRoutes","provideForRootGuard","createRouterScroller","getAppInitializer","ROUTER_INITIALIZER","getBootstrapListener","setOffset","platformLocationStrategy","useHash","RouterInitializer","initNavigation","resultOfPreactivationDone","initialNavigation","bootstrappedComponentRef","preloader","routerScroller","setUpPreloading","resetRootComponentType","appInitializer","bootstrapListener","getAriaReferenceIds","MESSAGES_CONTAINER_ID","CDK_DESCRIBEDBY_ID_PREFIX","CDK_DESCRIBEDBY_HOST_ATTRIBUTE","messageRegistry","messagesContainer","AriaDescriber","_canBeDescribed","_setMessageId","messageElement","referenceCount","_createMessageElement","_isElementDescribedByMessage","_addMessageReference","_isElementNode","_removeMessageReference","registeredMessage","_deleteMessageElement","_deleteMessagesContainer","describedElements","_removeCdkDescribedByReferenceIds","_createMessagesContainer","canBeAriaHidden","preExistingContainer","originalReferenceIds","existingId","filteredIds","referenceIds","messageId","trimmedMessage","ListKeyManager","_activeItemIndex","_activeItem","_letterKeyStream","_typeaheadSubscription","_allowedModifierKeys","_homeAndEnd","_skipPredicateFn","_pressedLetters","newItems","shouldWrap","_horizontal","debounceInterval","_getItemsArray","getLabel","previousActiveItem","isModifierAllowed","setNextItemActive","setPreviousItemActive","setLastItemActive","_setActiveItemByIndex","_setActiveItemByDelta","itemArray","_setActiveInWrapMode","_setActiveInDefaultMode","fallbackDelta","ActiveDescendantKeyManager","setActiveStyles","FocusKeyManager","InteractivityChecker","getClientRects","hasGeometry","frameElement","getFrameElement","getTabIndexValue","tabIndexValue","inputType","isPotentiallyTabbableIOS","isInputElement","isHiddenInput","isNativeFormElement","isAnchorElement","isAnchorWithHref","hasValidTabIndex","isPotentiallyFocusable","ignoreVisibility","FocusTrap","_checker","deferAnchors","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","attachAnchors","_startAnchor","_endAnchor","_toggleAnchorTabIndex","startAnchor","endAnchor","_createAnchor","_executeOnStable","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","_getRegionBoundary","isTabbable","tabbableChild","FocusTrapFactory","deferCaptureElements","CdkTrapFocus","_previouslyFocusedElement","focusTrap","_autoCapture","autoCapture","_captureFocus","autoCaptureChange","LIVE_ANNOUNCER_ELEMENT_TOKEN","LIVE_ANNOUNCER_DEFAULT_OPTIONS","LiveAnnouncer","elementToken","_liveElement","_createLiveElement","_previousTimeout","elementClass","previousElements","liveEl","CdkAriaLive","_politeness","elementText","_previousAnnouncedText","isFakeMousedownFromScreenReader","FOCUS_MONITOR_DEFAULT_OPTIONS","captureEventListenerOptions","FocusMonitor","_windowFocused","_elementInfo","_monitoredElementCount","_rootNodeFocusListenerCount","_documentKeydownListener","_lastTouchTarget","_setOriginForCurrentEventQueue","_documentMousedownListener","_documentTouchstartListener","_touchTimeoutId","getTarget","_windowFocusListener","_windowFocusTimeoutId","_rootNodeFocusAndBlurListener","_detectionMode","detectionMode","checkChildren","cachedInfo","_registerGlobalListeners","elementInfo","_setClasses","_removeGlobalListeners","_originChanged","_lastFocusOrigin","_wasCausedByTouch","_originTimeoutId","_getFocusOrigin","_emitOrigin","rootNodeFocusListeners","CdkMonitorFocus","cdkFocusChange","_monitorSubscription","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","HighContrastModeDetector","documentWindow","computedColor","bodyClasses","getHighContrastMode","A11yModule","_createForOfIteratorHelper","allowArrayLike","normalCompletion","didErr","_e2","exportImage","surfaceOptions","alignElements","mapPosition","mapSource","renderPosition","renderSource","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","_defineProperties","protoProps","staticProps","ScrollDispatcher","_scrolled","_globalSubscription","_scrolledCount","elementScrolled","scrollableReference","auditTimeInMs","_addGlobalListener","_removeGlobalListener","ancestors","scrollingContainers","_scrollableContainsElement","CdkScrollable","_elementScrolled","_applyScrollToOptions","ViewportRuler","_changeListener","_updateViewportSize","_viewportSize","documentRect","scrollX","CdkScrollableModule","ScrollingModule","shareSubjectFactory","MatTab_ng_template_0_Template","MatTabBody_ng_template_2_Template","animationDuration","MatTabGroup_div_2_ng_template_2_ng_template_0_Template","MatTabGroup_div_2_ng_template_2_Template","tab_r4","templateLabel","MatTabGroup_div_2_ng_template_3_Template","textLabel","MatTabGroup_div_2_Template","i_r5","_getTabLabelId","_tabs","_getTabContentId","MatTabGroup_mat_tab_body_5_Template","_r16","_removeTabBodyWrapperHeight","_setTabBodyWrapperHeight","tab_r13","i_r14","_MAT_INK_BAR_POSITIONER","MatInkBar","_inkBarPositioner","_setStyles","inkBar","MAT_TAB_CONTENT","MAT_TAB_LABEL","MatTabLabel","ɵMatTabLabel_BaseFactory","MatTabBase","_MatTabMixinBase","MAT_TAB_GROUP","MatTab","_closestTabGroup","_contentPortal","_templateLabel","_setTemplateLabelInput","_explicitContent","_implicitContent","matTabsAnimations","translateTab","MatTabBodyPortal","_centeringSub","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_afterLeavingCenter","MatTabBody","_MatTabBodyBase","_translateTabComplete","_onCentering","_onCentered","_computePositionAnimationState","_positionIndex","_computePositionFromOrigin","_getLayoutDirection","_portalHost","_onTranslateTabStarted","MAT_TABS_CONFIG","MatTabChangeEvent","MatTabGroupMixinBase","_MatTabGroupMixinBase","_MatTabGroupBase","defaultConfig","_indexToSelect","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","_selectedIndex","headerPosition","selectedIndexChange","focusChange","animationDone","selectedTabChange","_groupId","disablePagination","_dynamicHeight","_animationDuration","_backgroundColor","indexToSelect","_clampTabIndex","isFirstRun","_subscribeToAllTabChanges","_subscribeToTabLabels","tabs","_allTabs","_tabHeader","_alignInkBarToSelectedTab","tabHeight","_tabBodyWrapper","tabHeader","focusIndex","MatTabGroup","MatTabHeader","MatTabLabelWrapper","MatTabLabelWrapperBase","_MatTabLabelWrapperMixinBase","MatPaginatedTabHeader","_scrollDistance","_selectedIndexChanged","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_stopScrolling","selectFocusedIndex","indexFocused","_stopInterval","_previousPaginator","_handlePaginatorPress","_nextPaginator","dirChange","realign","updatePagination","newFocusIndex","_setTabFocus","_tabLabelCount","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","_itemSelected","_currentTextContent","_checkPaginationEnabled","_isValidIndex","containerEl","_tabListContainer","scrollDistance","_tabList","_scrollTo","_scrollHeader","labelIndex","selectedLabel","labelBeforePos","labelAfterPos","viewLength","beforeVisiblePos","afterVisiblePos","_getMaxScrollDistance","selectedLabelWrapper","_inkBar","alignToElement","maxScrollDistance","_MatTabHeaderBase","_handlePaginatorClick","_onContentChanges","MatTabsModule","elementsClippedBoundingBox","elementBoundingBox","getPixels","RefCountOperator","refCounter","RefCountSubscriber","sharedConnection","toMatrix","elementsBoundingBox","applyTransform","CdkStep_ng_template_0_Template","CdkStepHeader","CdkStepLabel","STEP_STATE","STEPPER_GLOBAL_OPTIONS","CdkStep","_stepper","stepperOptions","interacted","_optional","_completedOverride","_customError","_stepperOptions","_displayDefaultIndicatorType","displayDefaultIndicatorType","_showError","_getDefaultCompleted","stepControl","_getDefaultError","_stateChanged","stepLabel","CdkStepper","_linear","_orientation","_steps","_anyControlsInvalidOrPending","_updateSelectedItemIndex","_stepHeader","_layoutDirection","isCurrentStep","_isCurrentStep","_getDefaultIndicatorLogic","_getGuidelineLogic","stepsArray","previouslySelectedIndex","selectedStep","previouslySelectedStep","hasModifier","stepperElement","CdkStepperModule","MatStepHeader_ng_container_3_Template","iconOverrides","_getIconContext","MatStepHeader_ng_container_4_span_1_Template","_getDefaultTextForState","MatStepHeader_ng_container_4_mat_icon_2_Template","MatStepHeader_ng_container_4_Template","MatStepHeader_div_6_Template","MatStepHeader_div_7_Template","MatStepHeader_div_8_Template","optionalLabel","MatStepHeader_div_9_Template","MatStep_ng_template_0_Template","MatHorizontalStepper_ng_container_1_div_2_Template","MatHorizontalStepper_ng_container_1_Template","step_r2","i_r3","isLast_r4","_getFocusIndex","_getStepLabelId","_getIndicatorType","_iconOverrides","_getStepContentId","MatHorizontalStepper_div_3_Template","step_r9","i_r10","_getAnimationDirection","MatStepLabel","ɵMatStepLabel_BaseFactory","MatStepperIntl","MAT_STEPPER_INTL_PROVIDER","_MatStepHeaderMixinBase","MatStepHeader","_intlSubscription","_stringLabel","matStepperAnimations","horizontalStepTransition","verticalStepTransition","MatStepperIcon","MatStep","_errorStateMatcher","MatStepper","_icons","ɵMatStepper_BaseFactory","MatHorizontalStepper","ɵMatHorizontalStepper_BaseFactory","MatStepperModule","GroupNode","DefaultIfEmptyOperator","DefaultIfEmptySubscriber","setupSubscription","sourceObj","isEventTarget","isJQueryStyleEventEmitter","isNodeStyleEventEmitter","fromArray","VENDOR_PREFIXES","TEST_ELEMENT","setTimeoutContext","bindFn","invokeArrayArg","deprecate","deprecationMessage","nextKey","inherit","childP","baseP","boolOrFn","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","findByKey","uniqueArray","prefixed","getWindowForElement","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","PROPS_XY","PROPS_CLIENT_XY","inputTarget","domHandler","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","deltaTime","getAngle","getDistance","offsetDelta","prevDelta","prevInput","computeDeltaXY","offsetDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getRotation","maxPointers","lastInterval","computeIntervalInputData","computeInputData","evEl","evTarget","evWin","MOUSE_INPUT_MAP","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","removePointer","eventTypeNormalized","storeIndex","SINGLE_TOUCH_INPUT_MAP","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","allTouches","targetTouches","changedTargetTouches","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","setLastTouch","lastTouch","lts","inputEvent","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","getTouchActionProps","TouchAction","compute","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","hasNone","DIRECTION_LEFT","DIRECTION_UP","preventSrc","STATE_FAILED","Recognizer","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","preset","Manager","oldCssProps","inputClass","toggleCssProps","recognizeWith","requireFailure","cssProps","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","attrTest","optionPointers","isRecognized","DIRECTION_HORIZONTAL","directionTest","hasMoved","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","curRecognizer","gestureEvent","initEvent","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Swipe","Rotate","define","isNotNullOrEmptyString","ifElse","quote","normalizeOperator","equal","equalto","greater","greaterthan","greaterthanequal","isempty","isequalto","isgreaterthan","isgreaterthanorequalto","islessthan","islessthanorequalto","isnotempty","isnotequalto","isnull","less","lessthan","lessthanequal","notequal","notequals","notequalto","notsubstringof","isNotEmpty","formatDescriptors","sanitizeDateLiterals","removeAfterDot","directionFormatter","formatSort","formatGroup","formatAggregates","formatDateValue","UTC","transformSkip","transformTake","transformGroup","transformSort","transformAggregates","serializePage","serializePageSize","serializeGroup","serializeAggregates","filterFormatter","convert","translateAggregate","translateAggregates","translateGroup","hasSubgroups","Member","HasSubgroups","Items","Key","compareDesc","groupValue","__position","expandAggregates","fieldAccessor","aggregateName","aggregateAccessor","fieldAggregates","aggregateFunction","__value","transformers","operatorsMap","endswith","isnotnull","neq","startswith","dateRegExp","transformCompositeFilter","combiner","itemProp","groupBy","aggregateResult","leftLength","rightLength","cursor1","cursor2","skipCount","takeCount","filterDescriptor","sortDescriptors","reduced","_radius","_fallbackFill","isScheduler","formatRegExp","flattenValues","formattedMessage","toIntlErrors","cldr","_number","_cldrVersion","territory","numbers","percentSign","plusSign","exponential","superscriptingExponent","perMille","infinity","nan","timeSeparator","scientific","BGN","EUR","USD","localeCurrency","accounting","gmtFormat","gmtZeroFormat","dateTimeFormats","medium","short","availableFormats","Bhm","Bhms","EBhm","EBhms","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","hms","Hms","hmsv","Hmsv","hmv","Hmv","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","yQQQ","yQQQQ","timeFormats","abbreviated","wide","quarters","midnight","noon","morning1","afternoon1","evening1","night1","eras","dateFields","era","quarter","week","dayperiod","millisecond","supplemental","likelySubtags","currencyData","US","_from","weekData","weekendStart","weekendEnd","getLocaleInfo","suffixes","fullName","localeFullName","availableLocaleInfo","NoLocale","DECIMAL","CURRENCY","ACCOUNTING","PERCENT","SCIENTIFIC","CURRENCY_PLACEHOLDER","NUMBER_PLACEHOLDER","DEFAULT_LOCALE","LATIN_NUMBER_FORMATS","patternRegExp","cldrCurrencyRegExp","getPatterns","getGroupSize","loadCurrencyUnitPatterns","currencyInfo","currencyFormats","loadNumbersInfo","localeInfo","standard","predefinedDatePatterns","YEAR_REGEX","SHORT_DATE","datePatterns","getCalendarNames","formatType","loadCalendarNames","localeCalendar","eraNameMap","eraAbbr","eraNames","eraNarrow","eraFormatName","getEraNames","loadCalendarDateFields","fieldInfo","getPredefinedFormat","pathIdx","loadCalendarPatterns","cldrCalendar","loadCalendarInfo","gregorian","localeTerritory","likelyName","territoryFromName","loadLocale","fractions","setData","NoDateFieldNames","fieldNameInfo","standAlone","lowerNameType","formatNames","lowerArray","lowerObject","parseRangeDate","NoCurrency","NoCurrencyDisplay","NoSupplementalCurrency","NoCurrencyRegion","NoValidCurrency","SYMBOL","GLOBAL_CURRENCIES","getCurrencyInfo","throwIfNoValid","currencyDisplayInfo","lengthComparer","regionCurrency","regionCurrencies","latestValidUntil","latestValidUntilRange","latestStillValid","latestStillValidDate","_tender","_to","validFrom","validTo","stillValidDate","currencyDisplay","territoryCurrencyCode","DAYS_OF_WEEK","NoWeekData","NoFirstDay","DEFAULT_TERRITORY","isNegativeZero","formatCurrencySymbol","groupInteger","decimalIndex","groupSizes","integerEnd","integerLength","newGroupSize","isCurrencyStyle","trailingZeroRegex","standardNumberFormat","isCurrency","minimumFractionDigits","toExponential","currencyFractions","maximumFractionDigits","_digits","currencyFractionOptions","fractionOptions","negativeZero","minimumIntegerDigits","useGrouping","currencyUnitPattern","applyPattern","literalRegExp","setStyleOptions","formatOptions","setFormatLiterals","quoteChar","SHARP","trailingZerosRegExp","trailingPointRegExp","commaRegExp","placeholderIndex","index1","index2","customNumberFormat","hasNegativeFormat","zeroFormat","isConstantFormat","constant","setValueSpecificFormat","hasGroup","setGroupOptions","lastZero","trimRegex","zeroIndex","sharpIndex","hasZero","hasSharp","trailingZeros","lastZeroIndex","setPlaceholderIndices","replaceLiterals","replaceStyleSymbols","replacement","replacePlaceHolders","applyCustomFormat","standardFormatRegExp","formatAndPrecision","standardFormatOptions","exponentRegExp","nonBreakingSpaceRegExp","cleanNegativePattern","cleanCurrencyNumber","displays","currencyDisplays","cleanNumber","cleanLiterals","negativeCurrency","currencyNumber","negativeSignIndex","isNegative","LENGHT_DELTA","PENALTIES","VALUE_FORMAT_LENGTH","TIME_SPECIFIERS_REGEX","DATE_OPTIONS_MAP","specifier","getSpecifier","hour12","STAND_ALONE_SPECIFIERS","specifiersRegex","resolvedFormats","getSpecifierRegex","skeletonSpecifiers","findBestMatch","specifiers","bestMatches","specifiersLength","maxScore","bestMatch","matchSpecifier","datePattern","spcifier","skeletonFromOptions","timeStartIndex","dateSkeleton","timeSkeleton","cacheFormat","skeletonFormat","dateNameType","formatLength","MONTH","HOUR","ZONE","WEEKDAY","QUARTER","DATE_FIELD_MAP","dateFormatRegExp","formatMonth","formatQuarter","formatTimeZone","shortHours","optionalMinutes","localizedName","zZeroOffset","hoursMinutes","formatDayOfWeek","firstDayIndex","formatters","convertTimeZone","fromOffset","toOffset","fromLocalOffset","offsetDate","toLocalOffset","timeZoneOffsetRegExp","offsetRegExp","numberRegExp","leadingSpacesRegex","trailingSpacesRegex","standardDateFormats","FORMATS_SEQUENCE","outOfRange","lookAhead","getNumber","valueIdx","getIndexByName","nameLength","subValue","matchLength","checkLiteral","parseTimeZoneOffset","noSeparator","zLiteral","NoGMTInfo","calendarGmtFormats","hoursMatch","minutesMatch","hoursOffset","minutesOffset","parseMonth","parseDayOfWeek","dayOfWeek","parsers","addFormatSpaces","leadingSpaces","trailingSpaces","parseExact","pmHour","hasTime","parseMicrosoftDateFormat","tzoffset","defaultFormats","parseValue","parseFormats","periodFormats","shortFormat","NAME_TYPES","LITERAL","addLiteral","lastPart","isHour12","_a$1","ERRORS","ERROR_FACTORY","name$1","PLATFORM_LOG_STRING","FirebaseAppImpl","firebase_","isDeleted_","automaticDataCollectionEnabled_","automaticDataCollectionEnabled","options_","_addComponent","checkDestroyed_","removeApp","_getService","instanceIdentifier","_addOrOverwriteComponent","createFirebaseNamespace","firebaseAppImpl","rawConfig","libraryKeyOrName","library","libraryMismatch","versionMismatch","warning","onLog","useAsService","componentName","serviceNamespace","appArg","createFirebaseNamespaceCore","PlatformLoggerService","getPlatformInfoString","isVersionServiceProvider","logString","sdkVersion","firebase$1","registerCoreComponents","SkipOperator","SkipSubscriber","myAccountLinkActive","showDetail","showNews","showCCM","showLearn","showFriendMenu","showFriendScanMenu","showFriendSearchMenu","showFriendInviteMenu","showSolutionMenu","showSolutionSavingMenu","showSolutionSendingMenu","showSolutionSpendingMenu","navigateToBasePage$","withLatestFrom","onToggle","onLogOut","onShowNews","onShowDetail","onShowLearn","onShowCCM","navigateToBasePage","SidenavComponent","toggleSearch","onToggleSearch","NavBarComponent","solutions","friends","news","learns","socials","copyrighted","HeaderSearchComponent","StandingBoyComponent","FeedbackDialogComponent","openDialog","isTradeBlotter","FeedbackButtonComponent","navUp","SHRINK_TOP_SCROLL_POSITION","shrinkToolbar","showSearch","showHeader","fontWeight","momentTop","snav","AppComponent","urlAddress","createCompleteRoute","envAddress","RepositoryService","isFirebaseRef","pathRef","checkOperationCases","stringCase","firebaseCase","snapshotCase","listenType","prevKey","positionFor","buildView","currentKeyPosition","afterPreviousKeyPosition","positionAfter","snapshotAction","childEvent$","listChanges","createDataOperationMethod","createObjectSnapshotChanges","AngularFireDatabase","afDatabase","outsideAngularScheduler","auditTrail","action$","lastKeyToLoad","loadedData","loadedKeys","waitForLoaded","createListReference","AngularFireDatabaseModule","Init","AppInitializer","routerOutletService","IsUserAdminGuard","appInitService","TradeBlotterModule","FriendsModule","TriplesModule","CashManagementModule","UiKitModule","NewsModule","HomePageModule","TradeTicketModule","NotAllowedModule","approved","CanActivateNotAllowedGuard","AdminModule","PagesModule","ErrorsModule","AppModule","LowerCaseUrlSerializer","forRoot","bootstrapModule","pointAccessor","definePointAccessors","ClassDirective","iterableDiffers","keyValueDiffers","renderer2","ngClassInstance","DefaultClassDirective","ɵDefaultClassDirective_BaseFactory","ShowHideStyleBuilder","isServer","ɵShowHideStyleBuilder_BaseFactory","ShowHideDirective","hasLayout","hasFlexChild","trackExtraTriggers","DISPLAY_MAP","getDisplayStyle","inputKey","DefaultShowHideDirective","ɵDefaultShowHideDirective_BaseFactory","fxShow","fxHide","NgStyleKeyValue","noQuotes","getType","what","stringToKeyValue","vals","keyValuesToMap","StyleDirective","ngStyleInstance","fallbackStyles","buildStyleMap","buildMapFromList$1","buildRawList","buildMapFromList","DefaultStyleDirective","ɵDefaultStyleDirective_BaseFactory","ExtendedModule","WithLatestFromOperator","WithLatestFromSubscriber","_tryProject","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","htmlEncode","removeSelf","SimpleInnerSubscriber","SimpleOuterSubscriber"],"mappings":"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CACT/ngB,KAAM,iBACNokU,KAAM,cACNwhM,OAAQ,YACRC,MAAO,UAEXxwL,YAAa,CACTr1U,KAAM,kBACNokU,KAAM,YACNwhM,OAAQ,WACRC,MAAO,UAEXnhgB,KAAM,CACFa,OAAQ,CACJyigB,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ3jM,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,KAEJwhM,MAAO,CACH,KACA,KACA,KACA,KACA,KACA,KACA,MAEJoC,KAAM,CACF,SACA,SACA,UACA,YACA,WACA,SACA,aAGR,cAAe,CACXD,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ3jM,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,KAEJwhM,MAAO,CACH,KACA,KACA,KACA,KACA,KACA,KACA,MAEJoC,KAAM,CACF,SACA,SACA,UACA,YACA,WACA,SACA,cAIZzjgB,OAAQ,CACJe,OAAQ,CACJyigB,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ3jM,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ4jM,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aAGR,cAAe,CACXD,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ3jM,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ4jM,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,cAIZC,SAAU,CACN3igB,OAAQ,CACJyigB,YAAa,CACT,KACA,KACA,KACA,MAEJ3jM,OAAQ,CACJ,IACA,IACA,IACA,KAEJ4jM,KAAM,CACF,cACA,cACA,cACA,gBAGR,cAAe,CACXD,YAAa,CACT,KACA,KACA,KACA,MAEJ3jM,OAAQ,CACJ,IACA,IACA,I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","file":"main.a2c63eb5e52dae8ed15f.js","sourcesContent":["import { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isDataSource, _VIEW_REPEATER_STRATEGY, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/bidi';\nimport * as ɵngcc2 from '@angular/cdk/platform';\nimport * as ɵngcc3 from '@angular/cdk/scrolling';\n\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]]];\nconst _c1 = [\"caption\", \"colgroup, col\"];\nfunction CdkTextColumn_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\n} }\nfunction CdkTextColumn_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const data_r2 = ctx.$implicit;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx_r1.justify);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.dataAccessor(data_r2, ctx_r1.name), \" \");\n} }\nexport { DataSource } from '@angular/cdk/collections';\nimport { Platform } from '@angular/cdk/platform';\nimport { ViewportRuler, ScrollingModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport { InjectionToken, Directive, TemplateRef, Inject, Optional, Input, ContentChild, ElementRef, Injectable, NgZone, IterableDiffers, ViewContainerRef, Component, ChangeDetectionStrategy, ViewEncapsulation, EmbeddedViewRef, ChangeDetectorRef, Attribute, ViewChild, ContentChildren, NgModule } from '@angular/core';\nimport { Subject, from, BehaviorSubject, isObservable, of } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Mixin to provide a directive with a function that checks if the sticky input has been\n * changed since the last time the function was called. Essentially adds a dirty-check to the\n * sticky value.\n * @docs-private\n */\nfunction mixinHasStickyInput(base) {\n return class extends base {\n constructor(...args) {\n super(...args);\n this._sticky = false;\n /** Whether the sticky input has changed since it was last checked. */\n this._hasStickyChanged = false;\n }\n /** Whether sticky positioning should be applied. */\n get sticky() { return this._sticky; }\n set sticky(v) {\n const prevValue = this._sticky;\n this._sticky = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._sticky;\n }\n /** Whether the sticky value has changed since this was last called. */\n hasStickyChanged() {\n const hasStickyChanged = this._hasStickyChanged;\n this._hasStickyChanged = false;\n return hasStickyChanged;\n }\n /** Resets the dirty check for cases where the sticky state has been used without checking. */\n resetStickyChanged() {\n this._hasStickyChanged = false;\n }\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to provide a table to some of the sub-components without causing a circular dependency.\n * @docs-private\n */\nconst CDK_TABLE = new InjectionToken('CDK_TABLE');\n/** Injection token that can be used to specify the text column options. */\nconst TEXT_COLUMN_OPTIONS = new InjectionToken('text-column-options');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Cell definition for a CDK table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass CdkCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkCellDef.ɵfac = function CdkCellDef_Factory(t) { return new (t || CdkCellDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkCellDef, selectors: [[\"\", \"cdkCellDef\", \"\"]] });\nCdkCellDef.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkCellDef, [{\n type: Directive,\n args: [{ selector: '[cdkCellDef]' }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n/**\n * Header cell definition for a CDK table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass CdkHeaderCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkHeaderCellDef.ɵfac = function CdkHeaderCellDef_Factory(t) { return new (t || CdkHeaderCellDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkHeaderCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkHeaderCellDef, selectors: [[\"\", \"cdkHeaderCellDef\", \"\"]] });\nCdkHeaderCellDef.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkHeaderCellDef, [{\n type: Directive,\n args: [{ selector: '[cdkHeaderCellDef]' }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n/**\n * Footer cell definition for a CDK table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass CdkFooterCellDef {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkFooterCellDef.ɵfac = function CdkFooterCellDef_Factory(t) { return new (t || CdkFooterCellDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkFooterCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkFooterCellDef, selectors: [[\"\", \"cdkFooterCellDef\", \"\"]] });\nCdkFooterCellDef.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkFooterCellDef, [{\n type: Directive,\n args: [{ selector: '[cdkFooterCellDef]' }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n// Boilerplate for applying mixins to CdkColumnDef.\n/** @docs-private */\nclass CdkColumnDefBase {\n}\nconst _CdkColumnDefBase = mixinHasStickyInput(CdkColumnDefBase);\n/**\n * Column definition for the CDK table.\n * Defines a set of cells available for a table column.\n */\nclass CdkColumnDef extends _CdkColumnDefBase {\n constructor(_table) {\n super();\n this._table = _table;\n this._stickyEnd = false;\n }\n /** Unique name for this column. */\n get name() { return this._name; }\n set name(name) { this._setNameInput(name); }\n /**\n * Whether this column should be sticky positioned on the end of the row. Should make sure\n * that it mimics the `CanStick` mixin such that `_hasStickyChanged` is set to true if the value\n * has been changed.\n */\n get stickyEnd() {\n return this._stickyEnd;\n }\n set stickyEnd(v) {\n const prevValue = this._stickyEnd;\n this._stickyEnd = coerceBooleanProperty(v);\n this._hasStickyChanged = prevValue !== this._stickyEnd;\n }\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n _updateColumnCssClassName() {\n this._columnCssClassName = [`cdk-column-${this.cssClassFriendlyName}`];\n }\n /**\n * This has been extracted to a util because of TS 4 and VE.\n * View Engine doesn't support property rename inheritance.\n * TS 4.0 doesn't allow properties to override accessors or vice-versa.\n * @docs-private\n */\n _setNameInput(value) {\n // If the directive is set without a name (updated programatically), then this setter will\n // trigger with an empty string and should not overwrite the programatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/ig, '-');\n this._updateColumnCssClassName();\n }\n }\n}\nCdkColumnDef.ɵfac = function CdkColumnDef_Factory(t) { return new (t || CdkColumnDef)(ɵngcc0.ɵɵdirectiveInject(CDK_TABLE, 8)); };\nCdkColumnDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkColumnDef, selectors: [[\"\", \"cdkColumnDef\", \"\"]], contentQueries: function CdkColumnDef_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkCellDef, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkHeaderCellDef, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkFooterCellDef, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerCell = _t.first);\n } }, inputs: { sticky: \"sticky\", name: [\"cdkColumnDef\", \"name\"], stickyEnd: \"stickyEnd\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkColumnDef.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TABLE,] }, { type: Optional }] }\n];\nCdkColumnDef.propDecorators = {\n name: [{ type: Input, args: ['cdkColumnDef',] }],\n stickyEnd: [{ type: Input, args: ['stickyEnd',] }],\n cell: [{ type: ContentChild, args: [CdkCellDef,] }],\n headerCell: [{ type: ContentChild, args: [CdkHeaderCellDef,] }],\n footerCell: [{ type: ContentChild, args: [CdkFooterCellDef,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkColumnDef, [{\n type: Directive,\n args: [{\n selector: '[cdkColumnDef]',\n inputs: ['sticky'],\n providers: [{ provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: CdkColumnDef }]\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, { name: [{\n type: Input,\n args: ['cdkColumnDef']\n }], stickyEnd: [{\n type: Input,\n args: ['stickyEnd']\n }], cell: [{\n type: ContentChild,\n args: [CdkCellDef]\n }], headerCell: [{\n type: ContentChild,\n args: [CdkHeaderCellDef]\n }], footerCell: [{\n type: ContentChild,\n args: [CdkFooterCellDef]\n }] }); })();\n/** Base class for the cells. Adds a CSS classname that identifies the column it renders in. */\nclass BaseCdkCell {\n constructor(columnDef, elementRef) {\n // If IE 11 is dropped before we switch to setting a single class name, change to multi param\n // with destructuring.\n const classList = elementRef.nativeElement.classList;\n for (const className of columnDef._columnCssClassName) {\n classList.add(className);\n }\n }\n}\n/** Header cell template container that adds the right classes and role. */\nclass CdkHeaderCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n}\nCdkHeaderCell.ɵfac = function CdkHeaderCell_Factory(t) { return new (t || CdkHeaderCell)(ɵngcc0.ɵɵdirectiveInject(CdkColumnDef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nCdkHeaderCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkHeaderCell, selectors: [[\"cdk-header-cell\"], [\"th\", \"cdk-header-cell\", \"\"]], hostAttrs: [\"role\", \"columnheader\", 1, \"cdk-header-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkHeaderCell.ctorParameters = () => [\n { type: CdkColumnDef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkHeaderCell, [{\n type: Directive,\n args: [{\n selector: 'cdk-header-cell, th[cdk-header-cell]',\n host: {\n 'class': 'cdk-header-cell',\n 'role': 'columnheader'\n }\n }]\n }], function () { return [{ type: CdkColumnDef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/** Footer cell template container that adds the right classes and role. */\nclass CdkFooterCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n}\nCdkFooterCell.ɵfac = function CdkFooterCell_Factory(t) { return new (t || CdkFooterCell)(ɵngcc0.ɵɵdirectiveInject(CdkColumnDef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nCdkFooterCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkFooterCell, selectors: [[\"cdk-footer-cell\"], [\"td\", \"cdk-footer-cell\", \"\"]], hostAttrs: [\"role\", \"gridcell\", 1, \"cdk-footer-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkFooterCell.ctorParameters = () => [\n { type: CdkColumnDef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkFooterCell, [{\n type: Directive,\n args: [{\n selector: 'cdk-footer-cell, td[cdk-footer-cell]',\n host: {\n 'class': 'cdk-footer-cell',\n 'role': 'gridcell'\n }\n }]\n }], function () { return [{ type: CdkColumnDef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/** Cell template container that adds the right classes and role. */\nclass CdkCell extends BaseCdkCell {\n constructor(columnDef, elementRef) {\n super(columnDef, elementRef);\n }\n}\nCdkCell.ɵfac = function CdkCell_Factory(t) { return new (t || CdkCell)(ɵngcc0.ɵɵdirectiveInject(CdkColumnDef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nCdkCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkCell, selectors: [[\"cdk-cell\"], [\"td\", \"cdk-cell\", \"\"]], hostAttrs: [\"role\", \"gridcell\", 1, \"cdk-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkCell.ctorParameters = () => [\n { type: CdkColumnDef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkCell, [{\n type: Directive,\n args: [{\n selector: 'cdk-cell, td[cdk-cell]',\n host: {\n 'class': 'cdk-cell',\n 'role': 'gridcell'\n }\n }]\n }], function () { return [{ type: CdkColumnDef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @docs-private\n */\nclass _Schedule {\n constructor() {\n this.tasks = [];\n this.endTasks = [];\n }\n}\n/** Injection token used to provide a coalesced style scheduler. */\nconst _COALESCED_STYLE_SCHEDULER = new InjectionToken('_COALESCED_STYLE_SCHEDULER');\n/**\n * Allows grouping up CSSDom mutations after the current execution context.\n * This can significantly improve performance when separate consecutive functions are\n * reading from the CSSDom and then mutating it.\n *\n * @docs-private\n */\nclass _CoalescedStyleScheduler {\n constructor(_ngZone) {\n this._ngZone = _ngZone;\n this._currentSchedule = null;\n this._destroyed = new Subject();\n }\n /**\n * Schedules the specified task to run at the end of the current VM turn.\n */\n schedule(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.tasks.push(task);\n }\n /**\n * Schedules the specified task to run after other scheduled tasks at the end of the current\n * VM turn.\n */\n scheduleEnd(task) {\n this._createScheduleIfNeeded();\n this._currentSchedule.endTasks.push(task);\n }\n /** Prevent any further tasks from running. */\n ngOnDestroy() {\n this._destroyed.next();\n this._destroyed.complete();\n }\n _createScheduleIfNeeded() {\n if (this._currentSchedule) {\n return;\n }\n this._currentSchedule = new _Schedule();\n this._getScheduleObservable().pipe(takeUntil(this._destroyed)).subscribe(() => {\n while (this._currentSchedule.tasks.length || this._currentSchedule.endTasks.length) {\n const schedule = this._currentSchedule;\n // Capture new tasks scheduled by the current set of tasks.\n this._currentSchedule = new _Schedule();\n for (const task of schedule.tasks) {\n task();\n }\n for (const task of schedule.endTasks) {\n task();\n }\n }\n this._currentSchedule = null;\n });\n }\n _getScheduleObservable() {\n // Use onStable when in the context of an ongoing change detection cycle so that we\n // do not accidentally trigger additional cycles.\n return this._ngZone.isStable ?\n from(Promise.resolve(undefined)) :\n this._ngZone.onStable.pipe(take(1));\n }\n}\n_CoalescedStyleScheduler.ɵfac = function _CoalescedStyleScheduler_Factory(t) { return new (t || _CoalescedStyleScheduler)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\n_CoalescedStyleScheduler.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: _CoalescedStyleScheduler, factory: _CoalescedStyleScheduler.ɵfac });\n_CoalescedStyleScheduler.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_CoalescedStyleScheduler, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The row template that can be used by the mat-table. Should not be used outside of the\n * material library.\n */\nconst CDK_ROW_TEMPLATE = ``;\n/**\n * Base class for the CdkHeaderRowDef and CdkRowDef that handles checking their columns inputs\n * for changes and notifying the table.\n */\nclass BaseRowDef {\n constructor(\n /** @docs-private */ template, _differs) {\n this.template = template;\n this._differs = _differs;\n }\n ngOnChanges(changes) {\n // Create a new columns differ if one does not yet exist. Initialize it based on initial value\n // of the columns property or an empty array if none is provided.\n if (!this._columnsDiffer) {\n const columns = (changes['columns'] && changes['columns'].currentValue) || [];\n this._columnsDiffer = this._differs.find(columns).create();\n this._columnsDiffer.diff(columns);\n }\n }\n /**\n * Returns the difference between the current columns and the columns from the last diff, or null\n * if there is no difference.\n */\n getColumnsDiff() {\n return this._columnsDiffer.diff(this.columns);\n }\n /** Gets this row def's relevant cell template from the provided column def. */\n extractCellTemplate(column) {\n if (this instanceof CdkHeaderRowDef) {\n return column.headerCell.template;\n }\n if (this instanceof CdkFooterRowDef) {\n return column.footerCell.template;\n }\n else {\n return column.cell.template;\n }\n }\n}\nBaseRowDef.ɵfac = function BaseRowDef_Factory(t) { return new (t || BaseRowDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers)); };\nBaseRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: BaseRowDef, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nBaseRowDef.ctorParameters = () => [\n { type: TemplateRef },\n { type: IterableDiffers }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BaseRowDef, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }]; }, null); })();\n// Boilerplate for applying mixins to CdkHeaderRowDef.\n/** @docs-private */\nclass CdkHeaderRowDefBase extends BaseRowDef {\n}\nconst _CdkHeaderRowDefBase = mixinHasStickyInput(CdkHeaderRowDefBase);\n/**\n * Header row definition for the CDK table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass CdkHeaderRowDef extends _CdkHeaderRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkHeaderRowDef.ɵfac = function CdkHeaderRowDef_Factory(t) { return new (t || CdkHeaderRowDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(CDK_TABLE, 8)); };\nCdkHeaderRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkHeaderRowDef, selectors: [[\"\", \"cdkHeaderRowDef\", \"\"]], inputs: { columns: [\"cdkHeaderRowDef\", \"columns\"], sticky: [\"cdkHeaderRowDefSticky\", \"sticky\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkHeaderRowDef.ctorParameters = () => [\n { type: TemplateRef },\n { type: IterableDiffers },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TABLE,] }, { type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkHeaderRowDef, [{\n type: Directive,\n args: [{\n selector: '[cdkHeaderRowDef]',\n inputs: ['columns: cdkHeaderRowDef', 'sticky: cdkHeaderRowDefSticky']\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, null); })();\n// Boilerplate for applying mixins to CdkFooterRowDef.\n/** @docs-private */\nclass CdkFooterRowDefBase extends BaseRowDef {\n}\nconst _CdkFooterRowDefBase = mixinHasStickyInput(CdkFooterRowDefBase);\n/**\n * Footer row definition for the CDK table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass CdkFooterRowDef extends _CdkFooterRowDefBase {\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n // Prerender fails to recognize that ngOnChanges in a part of this class through inheritance.\n // Explicitly define it so that the method is called as part of the Angular lifecycle.\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n }\n}\nCdkFooterRowDef.ɵfac = function CdkFooterRowDef_Factory(t) { return new (t || CdkFooterRowDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(CDK_TABLE, 8)); };\nCdkFooterRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkFooterRowDef, selectors: [[\"\", \"cdkFooterRowDef\", \"\"]], inputs: { columns: [\"cdkFooterRowDef\", \"columns\"], sticky: [\"cdkFooterRowDefSticky\", \"sticky\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\nCdkFooterRowDef.ctorParameters = () => [\n { type: TemplateRef },\n { type: IterableDiffers },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TABLE,] }, { type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkFooterRowDef, [{\n type: Directive,\n args: [{\n selector: '[cdkFooterRowDef]',\n inputs: ['columns: cdkFooterRowDef', 'sticky: cdkFooterRowDefSticky']\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, null); })();\n/**\n * Data row definition for the CDK table.\n * Captures the header row's template and other row properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass CdkRowDef extends BaseRowDef {\n // TODO(andrewseguin): Add an input for providing a switch function to determine\n // if this template should be used.\n constructor(template, _differs, _table) {\n super(template, _differs);\n this._table = _table;\n }\n}\nCdkRowDef.ɵfac = function CdkRowDef_Factory(t) { return new (t || CdkRowDef)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(CDK_TABLE, 8)); };\nCdkRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkRowDef, selectors: [[\"\", \"cdkRowDef\", \"\"]], inputs: { columns: [\"cdkRowDefColumns\", \"columns\"], when: [\"cdkRowDefWhen\", \"when\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkRowDef.ctorParameters = () => [\n { type: TemplateRef },\n { type: IterableDiffers },\n { type: undefined, decorators: [{ type: Inject, args: [CDK_TABLE,] }, { type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkRowDef, [{\n type: Directive,\n args: [{\n selector: '[cdkRowDef]',\n inputs: ['columns: cdkRowDefColumns', 'when: cdkRowDefWhen']\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }, { type: undefined, decorators: [{\n type: Inject,\n args: [CDK_TABLE]\n }, {\n type: Optional\n }] }]; }, null); })();\n/**\n * Outlet for rendering cells inside of a row or header row.\n * @docs-private\n */\nclass CdkCellOutlet {\n constructor(_viewContainer) {\n this._viewContainer = _viewContainer;\n CdkCellOutlet.mostRecentCellOutlet = this;\n }\n ngOnDestroy() {\n // If this was the last outlet being rendered in the view, remove the reference\n // from the static property after it has been destroyed to avoid leaking memory.\n if (CdkCellOutlet.mostRecentCellOutlet === this) {\n CdkCellOutlet.mostRecentCellOutlet = null;\n }\n }\n}\nCdkCellOutlet.ɵfac = function CdkCellOutlet_Factory(t) { return new (t || CdkCellOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nCdkCellOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkCellOutlet, selectors: [[\"\", \"cdkCellOutlet\", \"\"]] });\n/**\n * Static property containing the latest constructed instance of this class.\n * Used by the CDK table when each CdkHeaderRow and CdkRow component is created using\n * createEmbeddedView. After one of these components are created, this property will provide\n * a handle to provide that component's cells and context. After init, the CdkCellOutlet will\n * construct the cells with the provided context.\n */\nCdkCellOutlet.mostRecentCellOutlet = null;\nCdkCellOutlet.ctorParameters = () => [\n { type: ViewContainerRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkCellOutlet, [{\n type: Directive,\n args: [{ selector: '[cdkCellOutlet]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, null); })();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass CdkHeaderRow {\n}\nCdkHeaderRow.ɵfac = function CdkHeaderRow_Factory(t) { return new (t || CdkHeaderRow)(); };\nCdkHeaderRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CdkHeaderRow, selectors: [[\"cdk-header-row\"], [\"tr\", \"cdk-header-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"cdk-header-row\"], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function CdkHeaderRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [CdkCellOutlet], encapsulation: 2 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkHeaderRow, [{\n type: Component,\n args: [{\n selector: 'cdk-header-row, tr[cdk-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-header-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, null); })();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass CdkFooterRow {\n}\nCdkFooterRow.ɵfac = function CdkFooterRow_Factory(t) { return new (t || CdkFooterRow)(); };\nCdkFooterRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CdkFooterRow, selectors: [[\"cdk-footer-row\"], [\"tr\", \"cdk-footer-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"cdk-footer-row\"], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function CdkFooterRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [CdkCellOutlet], encapsulation: 2 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkFooterRow, [{\n type: Component,\n args: [{\n selector: 'cdk-footer-row, tr[cdk-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-footer-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, null); })();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass CdkRow {\n}\nCdkRow.ɵfac = function CdkRow_Factory(t) { return new (t || CdkRow)(); };\nCdkRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CdkRow, selectors: [[\"cdk-row\"], [\"tr\", \"cdk-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"cdk-row\"], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function CdkRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [CdkCellOutlet], encapsulation: 2 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkRow, [{\n type: Component,\n args: [{\n selector: 'cdk-row, tr[cdk-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'cdk-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, null); })();\n/** Row that can be used to display a message when no data is shown in the table. */\nclass CdkNoDataRow {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCdkNoDataRow.ɵfac = function CdkNoDataRow_Factory(t) { return new (t || CdkNoDataRow)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCdkNoDataRow.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkNoDataRow, selectors: [[\"ng-template\", \"cdkNoDataRow\", \"\"]] });\nCdkNoDataRow.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkNoDataRow, [{\n type: Directive,\n args: [{\n selector: 'ng-template[cdkNoDataRow]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * List of all possible directions that can be used for sticky positioning.\n * @docs-private\n */\nconst STICKY_DIRECTIONS = ['top', 'bottom', 'left', 'right'];\n/**\n * Applies and removes sticky positioning styles to the `CdkTable` rows and columns cells.\n * @docs-private\n */\nclass StickyStyler {\n /**\n * @param _isNativeHtmlTable Whether the sticky logic should be based on a table\n * that uses the native `` element.\n * @param _stickCellCss The CSS class that will be applied to every row/cell that has\n * sticky positioning applied.\n * @param direction The directionality context of the table (ltr/rtl); affects column positioning\n * by reversing left/right positions.\n * @param _isBrowser Whether the table is currently being rendered on the server or the client.\n * @param _needsPositionStickyOnElement Whether we need to specify position: sticky on cells\n * using inline styles. If false, it is assumed that position: sticky is included in\n * the component stylesheet for _stickCellCss.\n */\n constructor(_isNativeHtmlTable, _stickCellCss, direction, \n /**\n * @deprecated `_coalescedStyleScheduler` parameter to become required.\n * @breaking-change 11.0.0\n */\n _coalescedStyleScheduler, _isBrowser = true, _needsPositionStickyOnElement = true) {\n this._isNativeHtmlTable = _isNativeHtmlTable;\n this._stickCellCss = _stickCellCss;\n this.direction = direction;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._isBrowser = _isBrowser;\n this._needsPositionStickyOnElement = _needsPositionStickyOnElement;\n this._cachedCellWidths = [];\n }\n /**\n * Clears the sticky positioning styles from the row and its cells by resetting the `position`\n * style, setting the zIndex to 0, and unsetting each provided sticky direction.\n * @param rows The list of rows that should be cleared from sticking in the provided directions\n * @param stickyDirections The directions that should no longer be set as sticky on the rows.\n */\n clearStickyPositioning(rows, stickyDirections) {\n const elementsToClear = [];\n for (const row of rows) {\n // If the row isn't an element (e.g. if it's an `ng-container`),\n // it won't have inline styles or `children` so we skip it.\n if (row.nodeType !== row.ELEMENT_NODE) {\n continue;\n }\n elementsToClear.push(row);\n for (let i = 0; i < row.children.length; i++) {\n elementsToClear.push(row.children[i]);\n }\n }\n // Coalesce with sticky row/column updates (and potentially other changes like column resize).\n this._scheduleStyleChanges(() => {\n for (const element of elementsToClear) {\n this._removeStickyStyle(element, stickyDirections);\n }\n });\n }\n /**\n * Applies sticky left and right positions to the cells of each row according to the sticky\n * states of the rendered column definitions.\n * @param rows The rows that should have its set of cells stuck according to the sticky states.\n * @param stickyStartStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the start of the row.\n * @param stickyEndStates A list of boolean states where each state represents whether the cell\n * in this index position should be stuck to the end of the row.\n * @param recalculateCellWidths Whether the sticky styler should recalculate the width of each\n * column cell. If `false` cached widths will be used instead.\n */\n updateStickyColumns(rows, stickyStartStates, stickyEndStates, recalculateCellWidths = true) {\n if (!rows.length || !this._isBrowser || !(stickyStartStates.some(state => state) ||\n stickyEndStates.some(state => state))) {\n return;\n }\n const firstRow = rows[0];\n const numCells = firstRow.children.length;\n const cellWidths = this._getCellWidths(firstRow, recalculateCellWidths);\n const startPositions = this._getStickyStartColumnPositions(cellWidths, stickyStartStates);\n const endPositions = this._getStickyEndColumnPositions(cellWidths, stickyEndStates);\n // Coalesce with sticky row updates (and potentially other changes like column resize).\n this._scheduleStyleChanges(() => {\n const isRtl = this.direction === 'rtl';\n const start = isRtl ? 'right' : 'left';\n const end = isRtl ? 'left' : 'right';\n for (const row of rows) {\n for (let i = 0; i < numCells; i++) {\n const cell = row.children[i];\n if (stickyStartStates[i]) {\n this._addStickyStyle(cell, start, startPositions[i]);\n }\n if (stickyEndStates[i]) {\n this._addStickyStyle(cell, end, endPositions[i]);\n }\n }\n }\n });\n }\n /**\n * Applies sticky positioning to the row's cells if using the native table layout, and to the\n * row itself otherwise.\n * @param rowsToStick The list of rows that should be stuck according to their corresponding\n * sticky state and to the provided top or bottom position.\n * @param stickyStates A list of boolean states where each state represents whether the row\n * should be stuck in the particular top or bottom position.\n * @param position The position direction in which the row should be stuck if that row should be\n * sticky.\n *\n */\n stickRows(rowsToStick, stickyStates, position) {\n // Since we can't measure the rows on the server, we can't stick the rows properly.\n if (!this._isBrowser) {\n return;\n }\n // If positioning the rows to the bottom, reverse their order when evaluating the sticky\n // position such that the last row stuck will be \"bottom: 0px\" and so on. Note that the\n // sticky states need to be reversed as well.\n const rows = position === 'bottom' ? rowsToStick.slice().reverse() : rowsToStick;\n const states = position === 'bottom' ? stickyStates.slice().reverse() : stickyStates;\n // Measure row heights all at once before adding sticky styles to reduce layout thrashing.\n const stickyHeights = [];\n const elementsToStick = [];\n for (let rowIndex = 0, stickyHeight = 0; rowIndex < rows.length; rowIndex++) {\n stickyHeights[rowIndex] = stickyHeight;\n if (!states[rowIndex]) {\n continue;\n }\n const row = rows[rowIndex];\n elementsToStick[rowIndex] = this._isNativeHtmlTable ?\n Array.from(row.children) : [row];\n if (rowIndex !== rows.length - 1) {\n stickyHeight += row.getBoundingClientRect().height;\n }\n }\n // Coalesce with other sticky row updates (top/bottom), sticky columns updates\n // (and potentially other changes like column resize).\n this._scheduleStyleChanges(() => {\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n if (!states[rowIndex]) {\n continue;\n }\n const height = stickyHeights[rowIndex];\n for (const element of elementsToStick[rowIndex]) {\n this._addStickyStyle(element, position, height);\n }\n }\n });\n }\n /**\n * When using the native table in Safari, sticky footer cells do not stick. The only way to stick\n * footer rows is to apply sticky styling to the tfoot container. This should only be done if\n * all footer rows are sticky. If not all footer rows are sticky, remove sticky positioning from\n * the tfoot element.\n */\n updateStickyFooterContainer(tableElement, stickyStates) {\n if (!this._isNativeHtmlTable) {\n return;\n }\n const tfoot = tableElement.querySelector('tfoot');\n // Coalesce with other sticky updates (and potentially other changes like column resize).\n this._scheduleStyleChanges(() => {\n if (stickyStates.some(state => !state)) {\n this._removeStickyStyle(tfoot, ['bottom']);\n }\n else {\n this._addStickyStyle(tfoot, 'bottom', 0);\n }\n });\n }\n /**\n * Removes the sticky style on the element by removing the sticky cell CSS class, re-evaluating\n * the zIndex, removing each of the provided sticky directions, and removing the\n * sticky position if there are no more directions.\n */\n _removeStickyStyle(element, stickyDirections) {\n for (const dir of stickyDirections) {\n element.style[dir] = '';\n }\n // If the element no longer has any more sticky directions, remove sticky positioning and\n // the sticky CSS class.\n // Short-circuit checking element.style[dir] for stickyDirections as they\n // were already removed above.\n const hasDirection = STICKY_DIRECTIONS.some(dir => stickyDirections.indexOf(dir) === -1 && element.style[dir]);\n if (hasDirection) {\n element.style.zIndex = this._getCalculatedZIndex(element);\n }\n else {\n // When not hasDirection, _getCalculatedZIndex will always return ''.\n element.style.zIndex = '';\n if (this._needsPositionStickyOnElement) {\n element.style.position = '';\n }\n element.classList.remove(this._stickCellCss);\n }\n }\n /**\n * Adds the sticky styling to the element by adding the sticky style class, changing position\n * to be sticky (and -webkit-sticky), setting the appropriate zIndex, and adding a sticky\n * direction and value.\n */\n _addStickyStyle(element, dir, dirValue) {\n element.classList.add(this._stickCellCss);\n element.style[dir] = `${dirValue}px`;\n element.style.zIndex = this._getCalculatedZIndex(element);\n if (this._needsPositionStickyOnElement) {\n element.style.cssText += 'position: -webkit-sticky; position: sticky; ';\n }\n }\n /**\n * Calculate what the z-index should be for the element, depending on what directions (top,\n * bottom, left, right) have been set. It should be true that elements with a top direction\n * should have the highest index since these are elements like a table header. If any of those\n * elements are also sticky in another direction, then they should appear above other elements\n * that are only sticky top (e.g. a sticky column on a sticky header). Bottom-sticky elements\n * (e.g. footer rows) should then be next in the ordering such that they are below the header\n * but above any non-sticky elements. Finally, left/right sticky elements (e.g. sticky columns)\n * should minimally increment so that they are above non-sticky elements but below top and bottom\n * elements.\n */\n _getCalculatedZIndex(element) {\n const zIndexIncrements = {\n top: 100,\n bottom: 10,\n left: 1,\n right: 1,\n };\n let zIndex = 0;\n // Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,\n // loses the array generic type in the `for of`. But we *also* have to use `Array` because\n // typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`\n for (const dir of STICKY_DIRECTIONS) {\n if (element.style[dir]) {\n zIndex += zIndexIncrements[dir];\n }\n }\n return zIndex ? `${zIndex}` : '';\n }\n /** Gets the widths for each cell in the provided row. */\n _getCellWidths(row, recalculateCellWidths = true) {\n if (!recalculateCellWidths && this._cachedCellWidths.length) {\n return this._cachedCellWidths;\n }\n const cellWidths = [];\n const firstRowCells = row.children;\n for (let i = 0; i < firstRowCells.length; i++) {\n let cell = firstRowCells[i];\n cellWidths.push(cell.getBoundingClientRect().width);\n }\n this._cachedCellWidths = cellWidths;\n return cellWidths;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyStartColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = 0; i < widths.length; i++) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Determines the left and right positions of each sticky column cell, which will be the\n * accumulation of all sticky column cell widths to the left and right, respectively.\n * Non-sticky cells do not need to have a value set since their positions will not be applied.\n */\n _getStickyEndColumnPositions(widths, stickyStates) {\n const positions = [];\n let nextPosition = 0;\n for (let i = widths.length; i > 0; i--) {\n if (stickyStates[i]) {\n positions[i] = nextPosition;\n nextPosition += widths[i];\n }\n }\n return positions;\n }\n /**\n * Schedules styles to be applied when the style scheduler deems appropriate.\n * @breaking-change 11.0.0 This method can be removed in favor of calling\n * `CoalescedStyleScheduler.schedule` directly once the scheduler is a required parameter.\n */\n _scheduleStyleChanges(changes) {\n if (this._coalescedStyleScheduler) {\n this._coalescedStyleScheduler.schedule(changes);\n }\n else {\n changes();\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an error to be thrown when attempting to find an unexisting column.\n * @param id Id whose lookup failed.\n * @docs-private\n */\nfunction getTableUnknownColumnError(id) {\n return Error(`Could not find column with id \"${id}\".`);\n}\n/**\n * Returns an error to be thrown when two column definitions have the same name.\n * @docs-private\n */\nfunction getTableDuplicateColumnNameError(name) {\n return Error(`Duplicate column definition name provided: \"${name}\".`);\n}\n/**\n * Returns an error to be thrown when there are multiple rows that are missing a when function.\n * @docs-private\n */\nfunction getTableMultipleDefaultRowDefsError() {\n return Error(`There can only be one default row without a when predicate function.`);\n}\n/**\n * Returns an error to be thrown when there are no matching row defs for a particular set of data.\n * @docs-private\n */\nfunction getTableMissingMatchingRowDefError(data) {\n return Error(`Could not find a matching row definition for the` +\n `provided row data: ${JSON.stringify(data)}`);\n}\n/**\n * Returns an error to be thrown when there is no row definitions present in the content.\n * @docs-private\n */\nfunction getTableMissingRowDefsError() {\n return Error('Missing definitions for header, footer, and row; ' +\n 'cannot determine which columns should be rendered.');\n}\n/**\n * Returns an error to be thrown when the data source does not match the compatible types.\n * @docs-private\n */\nfunction getTableUnknownDataSourceError() {\n return Error(`Provided data source did not match an array, Observable, or DataSource`);\n}\n/**\n * Returns an error to be thrown when the text column cannot find a parent table to inject.\n * @docs-private\n */\nfunction getTableTextColumnMissingParentTableError() {\n return Error(`Text column could not find a parent table for registration.`);\n}\n/**\n * Returns an error to be thrown when a table text column doesn't have a name.\n * @docs-private\n */\nfunction getTableTextColumnMissingNameError() {\n return Error(`Table text column must have a name.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\nclass DataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nDataRowOutlet.ɵfac = function DataRowOutlet_Factory(t) { return new (t || DataRowOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nDataRowOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DataRowOutlet, selectors: [[\"\", \"rowOutlet\", \"\"]] });\nDataRowOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DataRowOutlet, [{\n type: Directive,\n args: [{ selector: '[rowOutlet]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the header.\n * @docs-private\n */\nclass HeaderRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nHeaderRowOutlet.ɵfac = function HeaderRowOutlet_Factory(t) { return new (t || HeaderRowOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nHeaderRowOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: HeaderRowOutlet, selectors: [[\"\", \"headerRowOutlet\", \"\"]] });\nHeaderRowOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderRowOutlet, [{\n type: Directive,\n args: [{ selector: '[headerRowOutlet]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert the footer.\n * @docs-private\n */\nclass FooterRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nFooterRowOutlet.ɵfac = function FooterRowOutlet_Factory(t) { return new (t || FooterRowOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFooterRowOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FooterRowOutlet, selectors: [[\"\", \"footerRowOutlet\", \"\"]] });\nFooterRowOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterRowOutlet, [{\n type: Directive,\n args: [{ selector: '[footerRowOutlet]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * Provides a handle for the table to grab the view\n * container's ng-container to insert the no data row.\n * @docs-private\n */\nclass NoDataRowOutlet {\n constructor(viewContainer, elementRef) {\n this.viewContainer = viewContainer;\n this.elementRef = elementRef;\n }\n}\nNoDataRowOutlet.ɵfac = function NoDataRowOutlet_Factory(t) { return new (t || NoDataRowOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nNoDataRowOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NoDataRowOutlet, selectors: [[\"\", \"noDataRowOutlet\", \"\"]] });\nNoDataRowOutlet.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NoDataRowOutlet, [{\n type: Directive,\n args: [{ selector: '[noDataRowOutlet]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ElementRef }]; }, null); })();\n/**\n * The table template that can be used by the mat-table. Should not be used outside of the\n * material library.\n * @docs-private\n */\nconst CDK_TABLE_TEMPLATE = \n// Note that according to MDN, the `caption` element has to be projected as the **first**\n// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption\n`\n \n \n \n \n \n \n`;\n/**\n * Class used to conveniently type the embedded view ref for rows with a context.\n * @docs-private\n */\nclass RowViewRef extends EmbeddedViewRef {\n}\n/**\n * A data table that can render a header row, data rows, and a footer row.\n * Uses the dataSource input to determine the data to be rendered. The data can be provided either\n * as a data array, an Observable stream that emits the data array to render, or a DataSource with a\n * connect function that will return an Observable stream that emits the data array to render.\n */\nclass CdkTable {\n constructor(_differs, _changeDetectorRef, _elementRef, role, _dir, _document, _platform, \n /**\n * @deprecated `_coalescedStyleScheduler`, `_viewRepeater` and `_viewportRuler`\n * parameters to become required.\n * @breaking-change 11.0.0\n */\n _viewRepeater, _coalescedStyleScheduler, \n // Optional for backwards compatibility. The viewport ruler is provided in root. Therefore,\n // this property will never be null.\n // tslint:disable-next-line: lightweight-tokens\n _viewportRuler) {\n this._differs = _differs;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n this._dir = _dir;\n this._platform = _platform;\n this._viewRepeater = _viewRepeater;\n this._coalescedStyleScheduler = _coalescedStyleScheduler;\n this._viewportRuler = _viewportRuler;\n /** Subject that emits when the component has been destroyed. */\n this._onDestroy = new Subject();\n /**\n * Map of all the user's defined columns (header, data, and footer cell template) identified by\n * name. Collection populated by the column definitions gathered by `ContentChildren` as well as\n * any custom column definitions added to `_customColumnDefs`.\n */\n this._columnDefsByName = new Map();\n /**\n * Column definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * column definitions as *its* content child.\n */\n this._customColumnDefs = new Set();\n /**\n * Data row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in data rows as *its* content child.\n */\n this._customRowDefs = new Set();\n /**\n * Header row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has\n * built-in header rows as *its* content child.\n */\n this._customHeaderRowDefs = new Set();\n /**\n * Footer row definitions that were defined outside of the direct content children of the table.\n * These will be defined when, e.g., creating a wrapper around the cdkTable that has a\n * built-in footer row as *its* content child.\n */\n this._customFooterRowDefs = new Set();\n /**\n * Whether the header row definition has been changed. Triggers an update to the header row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._headerRowDefChanged = true;\n /**\n * Whether the footer row definition has been changed. Triggers an update to the footer row after\n * content is checked. Initialized as true so that the table renders the initial set of rows.\n */\n this._footerRowDefChanged = true;\n /**\n * Whether the sticky column styles need to be updated. Set to `true` when the visible columns\n * change.\n */\n this._stickyColumnStylesNeedReset = true;\n /**\n * Whether the sticky styler should recalculate cell widths when applying sticky styles. If\n * `false`, cached values will be used instead. This is only applicable to tables with\n * {@link fixedLayout} enabled. For other tables, cell widths will always be recalculated.\n */\n this._forceRecalculateCellWidths = true;\n /**\n * Cache of the latest rendered `RenderRow` objects as a map for easy retrieval when constructing\n * a new list of `RenderRow` objects for rendering rows. Since the new list is constructed with\n * the cached `RenderRow` objects when possible, the row identity is preserved when the data\n * and row template matches, which allows the `IterableDiffer` to check rows by reference\n * and understand which rows are added/moved/removed.\n *\n * Implemented as a map of maps where the first key is the `data: T` object and the second is the\n * `CdkRowDef` object. With the two keys, the cache points to a `RenderRow` object that\n * contains an array of created pairs. The array is necessary to handle cases where the data\n * array contains multiple duplicate data objects and each instantiated `RenderRow` must be\n * stored.\n */\n this._cachedRenderRowsMap = new Map();\n /**\n * CSS class added to any row or cell that has sticky positioning applied. May be overriden by\n * table subclasses.\n */\n this.stickyCssClass = 'cdk-table-sticky';\n /**\n * Whether to manually add positon: sticky to all sticky cell elements. Not needed if\n * the position is set in a selector associated with the value of stickyCssClass. May be\n * overridden by table subclasses\n */\n this.needsPositionStickyOnElement = true;\n /** Whether the no data row is currently showing anything. */\n this._isShowingNoDataRow = false;\n this._multiTemplateDataRows = false;\n this._fixedLayout = false;\n // TODO(andrewseguin): Remove max value as the end index\n // and instead calculate the view on init and scroll.\n /**\n * Stream containing the latest information on what rows are being displayed on screen.\n * Can be used by the data source to as a heuristic of what data should be provided.\n *\n * @docs-private\n */\n this.viewChange = new BehaviorSubject({ start: 0, end: Number.MAX_VALUE });\n if (!role) {\n this._elementRef.nativeElement.setAttribute('role', 'grid');\n }\n this._document = _document;\n this._isNativeHtmlTable = this._elementRef.nativeElement.nodeName === 'TABLE';\n }\n /**\n * Tracking function that will be used to check the differences in data changes. Used similarly\n * to `ngFor` `trackBy` function. Optimize row operations by identifying a row based on its data\n * relative to the function to know if a row should be added/removed/moved.\n * Accepts a function that takes two parameters, `index` and `item`.\n */\n get trackBy() {\n return this._trackByFn;\n }\n set trackBy(fn) {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && fn != null && typeof fn !== 'function') {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._trackByFn = fn;\n }\n /**\n * The table's source of data, which can be provided in three ways (in order of complexity):\n * - Simple data array (each object represents one table row)\n * - Stream that emits a data array each time the array changes\n * - `DataSource` object that implements the connect/disconnect interface.\n *\n * If a data array is provided, the table must be notified when the array's objects are\n * added, removed, or moved. This can be done by calling the `renderRows()` function which will\n * render the diff since the last table render. If the data array reference is changed, the table\n * will automatically trigger an update to the rows.\n *\n * When providing an Observable stream, the table will trigger an update automatically when the\n * stream emits a new array of data.\n *\n * Finally, when providing a `DataSource` object, the table will use the Observable stream\n * provided by the connect function and trigger updates when that stream emits new data array\n * values. During the table's ngOnDestroy or when the data source is removed from the table, the\n * table will call the DataSource's `disconnect` function (may be useful for cleaning up any\n * subscriptions registered during the connect process).\n */\n get dataSource() {\n return this._dataSource;\n }\n set dataSource(dataSource) {\n if (this._dataSource !== dataSource) {\n this._switchDataSource(dataSource);\n }\n }\n /**\n * Whether to allow multiple rows per data object by evaluating which rows evaluate their 'when'\n * predicate to true. If `multiTemplateDataRows` is false, which is the default value, then each\n * dataobject will render the first row that evaluates its when predicate to true, in the order\n * defined in the table, or otherwise the default row which does not have a when predicate.\n */\n get multiTemplateDataRows() {\n return this._multiTemplateDataRows;\n }\n set multiTemplateDataRows(v) {\n this._multiTemplateDataRows = coerceBooleanProperty(v);\n // In Ivy if this value is set via a static attribute (e.g.
),\n // this setter will be invoked before the row outlet has been defined hence the null check.\n if (this._rowOutlet && this._rowOutlet.viewContainer.length) {\n this._forceRenderDataRows();\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Whether to use a fixed table layout. Enabling this option will enforce consistent column widths\n * and optimize rendering sticky styles for native tables. No-op for flex tables.\n */\n get fixedLayout() {\n return this._fixedLayout;\n }\n set fixedLayout(v) {\n this._fixedLayout = coerceBooleanProperty(v);\n // Toggling `fixedLayout` may change column widths. Sticky column styles should be recalculated.\n this._forceRecalculateCellWidths = true;\n this._stickyColumnStylesNeedReset = true;\n }\n ngOnInit() {\n this._setupStickyStyler();\n if (this._isNativeHtmlTable) {\n this._applyNativeTableSections();\n }\n // Set up the trackBy function so that it uses the `RenderRow` as its identity by default. If\n // the user has provided a custom trackBy, return the result of that function as evaluated\n // with the values of the `RenderRow`'s data and index.\n this._dataDiffer = this._differs.find([]).create((_i, dataRow) => {\n return this.trackBy ? this.trackBy(dataRow.dataIndex, dataRow.data) : dataRow;\n });\n // Table cell dimensions may change after resizing the window. Signal the sticky styler to\n // refresh its cache of cell widths the next time sticky styles are updated.\n // @breaking-change 11.0.0 Remove null check for _viewportRuler once it's a required parameter.\n if (this._viewportRuler) {\n this._viewportRuler.change().pipe(takeUntil(this._onDestroy)).subscribe(() => {\n this._forceRecalculateCellWidths = true;\n });\n }\n }\n ngAfterContentChecked() {\n // Cache the row and column definitions gathered by ContentChildren and programmatic injection.\n this._cacheRowDefs();\n this._cacheColumnDefs();\n // Make sure that the user has at least added header, footer, or data row def.\n if (!this._headerRowDefs.length && !this._footerRowDefs.length && !this._rowDefs.length &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingRowDefsError();\n }\n // Render updates if the list of columns have been changed for the header, row, or footer defs.\n const columnsChanged = this._renderUpdatedColumns();\n const rowDefsChanged = columnsChanged || this._headerRowDefChanged || this._footerRowDefChanged;\n // Ensure sticky column styles are reset if set to `true` elsewhere.\n this._stickyColumnStylesNeedReset = this._stickyColumnStylesNeedReset || rowDefsChanged;\n this._forceRecalculateCellWidths = rowDefsChanged;\n // If the header row definition has been changed, trigger a render to the header row.\n if (this._headerRowDefChanged) {\n this._forceRenderHeaderRows();\n this._headerRowDefChanged = false;\n }\n // If the footer row definition has been changed, trigger a render to the footer row.\n if (this._footerRowDefChanged) {\n this._forceRenderFooterRows();\n this._footerRowDefChanged = false;\n }\n // If there is a data source and row definitions, connect to the data source unless a\n // connection has already been made.\n if (this.dataSource && this._rowDefs.length > 0 && !this._renderChangeSubscription) {\n this._observeRenderChanges();\n }\n else if (this._stickyColumnStylesNeedReset) {\n // In the above case, _observeRenderChanges will result in updateStickyColumnStyles being\n // called when it row data arrives. Otherwise, we need to call it proactively.\n this.updateStickyColumnStyles();\n }\n this._checkStickyStates();\n }\n ngOnDestroy() {\n this._rowOutlet.viewContainer.clear();\n this._noDataRowOutlet.viewContainer.clear();\n this._headerRowOutlet.viewContainer.clear();\n this._footerRowOutlet.viewContainer.clear();\n this._cachedRenderRowsMap.clear();\n this._onDestroy.next();\n this._onDestroy.complete();\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n }\n /**\n * Renders rows based on the table's latest set of data, which was either provided directly as an\n * input or retrieved through an Observable stream (directly or from a DataSource).\n * Checks for differences in the data since the last diff to perform only the necessary\n * changes (add/remove/move rows).\n *\n * If the table's data source is a DataSource or Observable, this will be invoked automatically\n * each time the provided Observable stream emits a new data array. Otherwise if your data is\n * an array, this function will need to be called to render any changes.\n */\n renderRows() {\n this._renderRows = this._getAllRenderRows();\n const changes = this._dataDiffer.diff(this._renderRows);\n if (!changes) {\n this._updateNoDataRow();\n return;\n }\n const viewContainer = this._rowOutlet.viewContainer;\n // @breaking-change 11.0.0 Remove null check for `_viewRepeater` and the\n // `else` clause once `_viewRepeater` is turned into a required parameter.\n if (this._viewRepeater) {\n this._viewRepeater.applyChanges(changes, viewContainer, (record, _adjustedPreviousIndex, currentIndex) => this._getEmbeddedViewArgs(record.item, currentIndex), (record) => record.item.data, (change) => {\n if (change.operation === 1 /* INSERTED */ && change.context) {\n this._renderCellTemplateForItem(change.record.item.rowDef, change.context);\n }\n });\n }\n else {\n changes.forEachOperation((record, prevIndex, currentIndex) => {\n if (record.previousIndex == null) {\n const renderRow = record.item;\n const rowDef = renderRow.rowDef;\n const context = { $implicit: renderRow.data };\n this._renderRow(this._rowOutlet, rowDef, currentIndex, context);\n }\n else if (currentIndex == null) {\n viewContainer.remove(prevIndex);\n }\n else {\n const view = viewContainer.get(prevIndex);\n viewContainer.move(view, currentIndex);\n }\n });\n }\n // Update the meta context of a row's context data (index, count, first, last, ...)\n this._updateRowIndexContext();\n // Update rows that did not get added/removed/moved but may have had their identity changed,\n // e.g. if trackBy matched data on some property but the actual data reference changed.\n changes.forEachIdentityChange((record) => {\n const rowView = viewContainer.get(record.currentIndex);\n rowView.context.$implicit = record.item.data;\n });\n this._updateNoDataRow();\n this.updateStickyColumnStyles();\n }\n /** Adds a column definition that was not included as part of the content children. */\n addColumnDef(columnDef) {\n this._customColumnDefs.add(columnDef);\n }\n /** Removes a column definition that was not included as part of the content children. */\n removeColumnDef(columnDef) {\n this._customColumnDefs.delete(columnDef);\n }\n /** Adds a row definition that was not included as part of the content children. */\n addRowDef(rowDef) {\n this._customRowDefs.add(rowDef);\n }\n /** Removes a row definition that was not included as part of the content children. */\n removeRowDef(rowDef) {\n this._customRowDefs.delete(rowDef);\n }\n /** Adds a header row definition that was not included as part of the content children. */\n addHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.add(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Removes a header row definition that was not included as part of the content children. */\n removeHeaderRowDef(headerRowDef) {\n this._customHeaderRowDefs.delete(headerRowDef);\n this._headerRowDefChanged = true;\n }\n /** Adds a footer row definition that was not included as part of the content children. */\n addFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.add(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Removes a footer row definition that was not included as part of the content children. */\n removeFooterRowDef(footerRowDef) {\n this._customFooterRowDefs.delete(footerRowDef);\n this._footerRowDefChanged = true;\n }\n /** Sets a no data row definition that was not included as a part of the content children. */\n setNoDataRow(noDataRow) {\n this._customNoDataRow = noDataRow;\n }\n /**\n * Updates the header sticky styles. First resets all applied styles with respect to the cells\n * sticking to the top. Then, evaluating which cells need to be stuck to the top. This is\n * automatically called when the header row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyHeaderRowStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the thead element if there are no header rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const thead = tableElement.querySelector('thead');\n if (thead) {\n thead.style.display = headerRows.length ? '' : 'none';\n }\n const stickyStates = this._headerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(headerRows, ['top']);\n this._stickyStyler.stickRows(headerRows, stickyStates, 'top');\n // Reset the dirty state of the sticky input change since it has been used.\n this._headerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the footer sticky styles. First resets all applied styles with respect to the cells\n * sticking to the bottom. Then, evaluating which cells need to be stuck to the bottom. This is\n * automatically called when the footer row changes its displayed set of columns, or if its\n * sticky input changes. May be called manually for cases where the cell content changes outside\n * of these events.\n */\n updateStickyFooterRowStyles() {\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n const tableElement = this._elementRef.nativeElement;\n // Hide the tfoot element if there are no footer rows. This is necessary to satisfy\n // overzealous a11y checkers that fail because the `rowgroup` element does not contain\n // required child `row`.\n const tfoot = tableElement.querySelector('tfoot');\n if (tfoot) {\n tfoot.style.display = footerRows.length ? '' : 'none';\n }\n const stickyStates = this._footerRowDefs.map(def => def.sticky);\n this._stickyStyler.clearStickyPositioning(footerRows, ['bottom']);\n this._stickyStyler.stickRows(footerRows, stickyStates, 'bottom');\n this._stickyStyler.updateStickyFooterContainer(this._elementRef.nativeElement, stickyStates);\n // Reset the dirty state of the sticky input change since it has been used.\n this._footerRowDefs.forEach(def => def.resetStickyChanged());\n }\n /**\n * Updates the column sticky styles. First resets all applied styles with respect to the cells\n * sticking to the left and right. Then sticky styles are added for the left and right according\n * to the column definitions for each cell in each row. This is automatically called when\n * the data source provides a new set of data or when a column definition changes its sticky\n * input. May be called manually for cases where the cell content changes outside of these events.\n */\n updateStickyColumnStyles() {\n const headerRows = this._getRenderedRows(this._headerRowOutlet);\n const dataRows = this._getRenderedRows(this._rowOutlet);\n const footerRows = this._getRenderedRows(this._footerRowOutlet);\n // For tables not using a fixed layout, the column widths may change when new rows are rendered.\n // In a table using a fixed layout, row content won't affect column width, so sticky styles\n // don't need to be cleared unless either the sticky column config changes or one of the row\n // defs change.\n if ((this._isNativeHtmlTable && !this._fixedLayout)\n || this._stickyColumnStylesNeedReset) {\n // Clear the left and right positioning from all columns in the table across all rows since\n // sticky columns span across all table sections (header, data, footer)\n this._stickyStyler.clearStickyPositioning([...headerRows, ...dataRows, ...footerRows], ['left', 'right']);\n this._stickyColumnStylesNeedReset = false;\n }\n // Update the sticky styles for each header row depending on the def's sticky state\n headerRows.forEach((headerRow, i) => {\n this._addStickyColumnStyles([headerRow], this._headerRowDefs[i]);\n });\n // Update the sticky styles for each data row depending on its def's sticky state\n this._rowDefs.forEach(rowDef => {\n // Collect all the rows rendered with this row definition.\n const rows = [];\n for (let i = 0; i < dataRows.length; i++) {\n if (this._renderRows[i].rowDef === rowDef) {\n rows.push(dataRows[i]);\n }\n }\n this._addStickyColumnStyles(rows, rowDef);\n });\n // Update the sticky styles for each footer row depending on the def's sticky state\n footerRows.forEach((footerRow, i) => {\n this._addStickyColumnStyles([footerRow], this._footerRowDefs[i]);\n });\n // Reset the dirty state of the sticky input change since it has been used.\n Array.from(this._columnDefsByName.values()).forEach(def => def.resetStickyChanged());\n }\n /**\n * Get the list of RenderRow objects to render according to the current list of data and defined\n * row definitions. If the previous list already contained a particular pair, it should be reused\n * so that the differ equates their references.\n */\n _getAllRenderRows() {\n const renderRows = [];\n // Store the cache and create a new one. Any re-used RenderRow objects will be moved into the\n // new cache while unused ones can be picked up by garbage collection.\n const prevCachedRenderRows = this._cachedRenderRowsMap;\n this._cachedRenderRowsMap = new Map();\n // For each data object, get the list of rows that should be rendered, represented by the\n // respective `RenderRow` object which is the pair of `data` and `CdkRowDef`.\n for (let i = 0; i < this._data.length; i++) {\n let data = this._data[i];\n const renderRowsForData = this._getRenderRowsForData(data, i, prevCachedRenderRows.get(data));\n if (!this._cachedRenderRowsMap.has(data)) {\n this._cachedRenderRowsMap.set(data, new WeakMap());\n }\n for (let j = 0; j < renderRowsForData.length; j++) {\n let renderRow = renderRowsForData[j];\n const cache = this._cachedRenderRowsMap.get(renderRow.data);\n if (cache.has(renderRow.rowDef)) {\n cache.get(renderRow.rowDef).push(renderRow);\n }\n else {\n cache.set(renderRow.rowDef, [renderRow]);\n }\n renderRows.push(renderRow);\n }\n }\n return renderRows;\n }\n /**\n * Gets a list of `RenderRow` for the provided data object and any `CdkRowDef` objects that\n * should be rendered for this data. Reuses the cached RenderRow objects if they match the same\n * `(T, CdkRowDef)` pair.\n */\n _getRenderRowsForData(data, dataIndex, cache) {\n const rowDefs = this._getRowDefs(data, dataIndex);\n return rowDefs.map(rowDef => {\n const cachedRenderRows = (cache && cache.has(rowDef)) ? cache.get(rowDef) : [];\n if (cachedRenderRows.length) {\n const dataRow = cachedRenderRows.shift();\n dataRow.dataIndex = dataIndex;\n return dataRow;\n }\n else {\n return { data, rowDef, dataIndex };\n }\n });\n }\n /** Update the map containing the content's column definitions. */\n _cacheColumnDefs() {\n this._columnDefsByName.clear();\n const columnDefs = mergeArrayAndSet(this._getOwnDefs(this._contentColumnDefs), this._customColumnDefs);\n columnDefs.forEach(columnDef => {\n if (this._columnDefsByName.has(columnDef.name) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableDuplicateColumnNameError(columnDef.name);\n }\n this._columnDefsByName.set(columnDef.name, columnDef);\n });\n }\n /** Update the list of all available row definitions that can be used. */\n _cacheRowDefs() {\n this._headerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentHeaderRowDefs), this._customHeaderRowDefs);\n this._footerRowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentFooterRowDefs), this._customFooterRowDefs);\n this._rowDefs = mergeArrayAndSet(this._getOwnDefs(this._contentRowDefs), this._customRowDefs);\n // After all row definitions are determined, find the row definition to be considered default.\n const defaultRowDefs = this._rowDefs.filter(def => !def.when);\n if (!this.multiTemplateDataRows && defaultRowDefs.length > 1 &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMultipleDefaultRowDefsError();\n }\n this._defaultRowDef = defaultRowDefs[0];\n }\n /**\n * Check if the header, data, or footer rows have changed what columns they want to display or\n * whether the sticky states have changed for the header or footer. If there is a diff, then\n * re-render that section.\n */\n _renderUpdatedColumns() {\n const columnsDiffReducer = (acc, def) => acc || !!def.getColumnsDiff();\n // Force re-render data rows if the list of column definitions have changed.\n const dataColumnsChanged = this._rowDefs.reduce(columnsDiffReducer, false);\n if (dataColumnsChanged) {\n this._forceRenderDataRows();\n }\n // Force re-render header/footer rows if the list of column definitions have changed.\n const headerColumnsChanged = this._headerRowDefs.reduce(columnsDiffReducer, false);\n if (headerColumnsChanged) {\n this._forceRenderHeaderRows();\n }\n const footerColumnsChanged = this._footerRowDefs.reduce(columnsDiffReducer, false);\n if (footerColumnsChanged) {\n this._forceRenderFooterRows();\n }\n return dataColumnsChanged || headerColumnsChanged || footerColumnsChanged;\n }\n /**\n * Switch to the provided data source by resetting the data and unsubscribing from the current\n * render change subscription if one exists. If the data source is null, interpret this by\n * clearing the row outlet. Otherwise start listening for new data.\n */\n _switchDataSource(dataSource) {\n this._data = [];\n if (isDataSource(this.dataSource)) {\n this.dataSource.disconnect(this);\n }\n // Stop listening for data from the previous data source.\n if (this._renderChangeSubscription) {\n this._renderChangeSubscription.unsubscribe();\n this._renderChangeSubscription = null;\n }\n if (!dataSource) {\n if (this._dataDiffer) {\n this._dataDiffer.diff([]);\n }\n this._rowOutlet.viewContainer.clear();\n }\n this._dataSource = dataSource;\n }\n /** Set up a subscription for the data provided by the data source. */\n _observeRenderChanges() {\n // If no data source has been set, there is nothing to observe for changes.\n if (!this.dataSource) {\n return;\n }\n let dataStream;\n if (isDataSource(this.dataSource)) {\n dataStream = this.dataSource.connect(this);\n }\n else if (isObservable(this.dataSource)) {\n dataStream = this.dataSource;\n }\n else if (Array.isArray(this.dataSource)) {\n dataStream = of(this.dataSource);\n }\n if (dataStream === undefined && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownDataSourceError();\n }\n this._renderChangeSubscription = dataStream.pipe(takeUntil(this._onDestroy))\n .subscribe(data => {\n this._data = data || [];\n this.renderRows();\n });\n }\n /**\n * Clears any existing content in the header row outlet and creates a new embedded view\n * in the outlet using the header row definition.\n */\n _forceRenderHeaderRows() {\n // Clear the header row outlet if any content exists.\n if (this._headerRowOutlet.viewContainer.length > 0) {\n this._headerRowOutlet.viewContainer.clear();\n }\n this._headerRowDefs.forEach((def, i) => this._renderRow(this._headerRowOutlet, def, i));\n this.updateStickyHeaderRowStyles();\n }\n /**\n * Clears any existing content in the footer row outlet and creates a new embedded view\n * in the outlet using the footer row definition.\n */\n _forceRenderFooterRows() {\n // Clear the footer row outlet if any content exists.\n if (this._footerRowOutlet.viewContainer.length > 0) {\n this._footerRowOutlet.viewContainer.clear();\n }\n this._footerRowDefs.forEach((def, i) => this._renderRow(this._footerRowOutlet, def, i));\n this.updateStickyFooterRowStyles();\n }\n /** Adds the sticky column styles for the rows according to the columns' stick states. */\n _addStickyColumnStyles(rows, rowDef) {\n const columnDefs = Array.from(rowDef.columns || []).map(columnName => {\n const columnDef = this._columnDefsByName.get(columnName);\n if (!columnDef && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnName);\n }\n return columnDef;\n });\n const stickyStartStates = columnDefs.map(columnDef => columnDef.sticky);\n const stickyEndStates = columnDefs.map(columnDef => columnDef.stickyEnd);\n this._stickyStyler.updateStickyColumns(rows, stickyStartStates, stickyEndStates, !this._fixedLayout || this._forceRecalculateCellWidths);\n }\n /** Gets the list of rows that have been rendered in the row outlet. */\n _getRenderedRows(rowOutlet) {\n const renderedRows = [];\n for (let i = 0; i < rowOutlet.viewContainer.length; i++) {\n const viewRef = rowOutlet.viewContainer.get(i);\n renderedRows.push(viewRef.rootNodes[0]);\n }\n return renderedRows;\n }\n /**\n * Get the matching row definitions that should be used for this row data. If there is only\n * one row definition, it is returned. Otherwise, find the row definitions that has a when\n * predicate that returns true with the data. If none return true, return the default row\n * definition.\n */\n _getRowDefs(data, dataIndex) {\n if (this._rowDefs.length == 1) {\n return [this._rowDefs[0]];\n }\n let rowDefs = [];\n if (this.multiTemplateDataRows) {\n rowDefs = this._rowDefs.filter(def => !def.when || def.when(dataIndex, data));\n }\n else {\n let rowDef = this._rowDefs.find(def => def.when && def.when(dataIndex, data)) || this._defaultRowDef;\n if (rowDef) {\n rowDefs.push(rowDef);\n }\n }\n if (!rowDefs.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableMissingMatchingRowDefError(data);\n }\n return rowDefs;\n }\n _getEmbeddedViewArgs(renderRow, index) {\n const rowDef = renderRow.rowDef;\n const context = { $implicit: renderRow.data };\n return {\n templateRef: rowDef.template,\n context,\n index,\n };\n }\n /**\n * Creates a new row template in the outlet and fills it with the set of cell templates.\n * Optionally takes a context to provide to the row and cells, as well as an optional index\n * of where to place the new row template in the outlet.\n */\n _renderRow(outlet, rowDef, index, context = {}) {\n // TODO(andrewseguin): enforce that one outlet was instantiated from createEmbeddedView\n const view = outlet.viewContainer.createEmbeddedView(rowDef.template, context, index);\n this._renderCellTemplateForItem(rowDef, context);\n return view;\n }\n _renderCellTemplateForItem(rowDef, context) {\n for (let cellTemplate of this._getCellTemplates(rowDef)) {\n if (CdkCellOutlet.mostRecentCellOutlet) {\n CdkCellOutlet.mostRecentCellOutlet._viewContainer.createEmbeddedView(cellTemplate, context);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Updates the index-related context for each row to reflect any changes in the index of the rows,\n * e.g. first/last/even/odd.\n */\n _updateRowIndexContext() {\n const viewContainer = this._rowOutlet.viewContainer;\n for (let renderIndex = 0, count = viewContainer.length; renderIndex < count; renderIndex++) {\n const viewRef = viewContainer.get(renderIndex);\n const context = viewRef.context;\n context.count = count;\n context.first = renderIndex === 0;\n context.last = renderIndex === count - 1;\n context.even = renderIndex % 2 === 0;\n context.odd = !context.even;\n if (this.multiTemplateDataRows) {\n context.dataIndex = this._renderRows[renderIndex].dataIndex;\n context.renderIndex = renderIndex;\n }\n else {\n context.index = this._renderRows[renderIndex].dataIndex;\n }\n }\n }\n /** Gets the column definitions for the provided row def. */\n _getCellTemplates(rowDef) {\n if (!rowDef || !rowDef.columns) {\n return [];\n }\n return Array.from(rowDef.columns, columnId => {\n const column = this._columnDefsByName.get(columnId);\n if (!column && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableUnknownColumnError(columnId);\n }\n return rowDef.extractCellTemplate(column);\n });\n }\n /** Adds native table sections (e.g. tbody) and moves the row outlets into them. */\n _applyNativeTableSections() {\n const documentFragment = this._document.createDocumentFragment();\n const sections = [\n { tag: 'thead', outlets: [this._headerRowOutlet] },\n { tag: 'tbody', outlets: [this._rowOutlet, this._noDataRowOutlet] },\n { tag: 'tfoot', outlets: [this._footerRowOutlet] },\n ];\n for (const section of sections) {\n const element = this._document.createElement(section.tag);\n element.setAttribute('role', 'rowgroup');\n for (const outlet of section.outlets) {\n element.appendChild(outlet.elementRef.nativeElement);\n }\n documentFragment.appendChild(element);\n }\n // Use a DocumentFragment so we don't hit the DOM on each iteration.\n this._elementRef.nativeElement.appendChild(documentFragment);\n }\n /**\n * Forces a re-render of the data rows. Should be called in cases where there has been an input\n * change that affects the evaluation of which rows should be rendered, e.g. toggling\n * `multiTemplateDataRows` or adding/removing row definitions.\n */\n _forceRenderDataRows() {\n this._dataDiffer.diff([]);\n this._rowOutlet.viewContainer.clear();\n this.renderRows();\n }\n /**\n * Checks if there has been a change in sticky states since last check and applies the correct\n * sticky styles. Since checking resets the \"dirty\" state, this should only be performed once\n * during a change detection and after the inputs are settled (after content check).\n */\n _checkStickyStates() {\n const stickyCheckReducer = (acc, d) => {\n return acc || d.hasStickyChanged();\n };\n // Note that the check needs to occur for every definition since it notifies the definition\n // that it can reset its dirty state. Using another operator like `some` may short-circuit\n // remaining definitions and leave them in an unchecked state.\n if (this._headerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyHeaderRowStyles();\n }\n if (this._footerRowDefs.reduce(stickyCheckReducer, false)) {\n this.updateStickyFooterRowStyles();\n }\n if (Array.from(this._columnDefsByName.values()).reduce(stickyCheckReducer, false)) {\n this._stickyColumnStylesNeedReset = true;\n this.updateStickyColumnStyles();\n }\n }\n /**\n * Creates the sticky styler that will be used for sticky rows and columns. Listens\n * for directionality changes and provides the latest direction to the styler. Re-applies column\n * stickiness when directionality changes.\n */\n _setupStickyStyler() {\n const direction = this._dir ? this._dir.value : 'ltr';\n this._stickyStyler = new StickyStyler(this._isNativeHtmlTable, this.stickyCssClass, direction, this._coalescedStyleScheduler, this._platform.isBrowser, this.needsPositionStickyOnElement);\n (this._dir ? this._dir.change : of())\n .pipe(takeUntil(this._onDestroy))\n .subscribe(value => {\n this._stickyStyler.direction = value;\n this.updateStickyColumnStyles();\n });\n }\n /** Filters definitions that belong to this table from a QueryList. */\n _getOwnDefs(items) {\n return items.filter(item => !item._table || item._table === this);\n }\n /** Creates or removes the no data row, depending on whether any data is being shown. */\n _updateNoDataRow() {\n const noDataRow = this._customNoDataRow || this._noDataRow;\n if (noDataRow) {\n const shouldShow = this._rowOutlet.viewContainer.length === 0;\n if (shouldShow !== this._isShowingNoDataRow) {\n const container = this._noDataRowOutlet.viewContainer;\n shouldShow ? container.createEmbeddedView(noDataRow.templateRef) : container.clear();\n this._isShowingNoDataRow = shouldShow;\n }\n }\n }\n}\nCdkTable.ɵfac = function CdkTable_Factory(t) { return new (t || CdkTable)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵinjectAttribute('role'), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(DOCUMENT), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Platform), ɵngcc0.ɵɵdirectiveInject(_VIEW_REPEATER_STRATEGY, 8), ɵngcc0.ɵɵdirectiveInject(_COALESCED_STYLE_SCHEDULER, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.ViewportRuler, 8)); };\nCdkTable.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CdkTable, selectors: [[\"cdk-table\"], [\"table\", \"cdk-table\", \"\"]], contentQueries: function CdkTable_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkNoDataRow, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkColumnDef, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkRowDef, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkHeaderRowDef, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CdkFooterRowDef, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._noDataRow = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._contentColumnDefs = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._contentRowDefs = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._contentHeaderRowDefs = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._contentFooterRowDefs = _t);\n } }, viewQuery: function CdkTable_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(DataRowOutlet, true);\n ɵngcc0.ɵɵstaticViewQuery(HeaderRowOutlet, true);\n ɵngcc0.ɵɵstaticViewQuery(FooterRowOutlet, true);\n ɵngcc0.ɵɵstaticViewQuery(NoDataRowOutlet, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._rowOutlet = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._headerRowOutlet = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._footerRowOutlet = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._noDataRowOutlet = _t.first);\n } }, hostAttrs: [1, \"cdk-table\"], hostVars: 2, hostBindings: function CdkTable_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"cdk-table-fixed-layout\", ctx.fixedLayout);\n } }, inputs: { trackBy: \"trackBy\", dataSource: \"dataSource\", multiTemplateDataRows: \"multiTemplateDataRows\", fixedLayout: \"fixedLayout\" }, exportAs: [\"cdkTable\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n ])], ngContentSelectors: _c1, decls: 6, vars: 0, consts: [[\"headerRowOutlet\", \"\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]], template: function CdkTable_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵprojection(1, 1);\n ɵngcc0.ɵɵelementContainer(2, 0);\n ɵngcc0.ɵɵelementContainer(3, 1);\n ɵngcc0.ɵɵelementContainer(4, 2);\n ɵngcc0.ɵɵelementContainer(5, 3);\n } }, directives: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet], styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"], encapsulation: 2 });\nCdkTable.ctorParameters = () => [\n { type: IterableDiffers },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: String, decorators: [{ type: Attribute, args: ['role',] }] },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [_VIEW_REPEATER_STRATEGY,] }] },\n { type: _CoalescedStyleScheduler, decorators: [{ type: Optional }, { type: Inject, args: [_COALESCED_STYLE_SCHEDULER,] }] },\n { type: ViewportRuler, decorators: [{ type: Optional }] }\n];\nCdkTable.propDecorators = {\n trackBy: [{ type: Input }],\n dataSource: [{ type: Input }],\n multiTemplateDataRows: [{ type: Input }],\n fixedLayout: [{ type: Input }],\n _rowOutlet: [{ type: ViewChild, args: [DataRowOutlet, { static: true },] }],\n _headerRowOutlet: [{ type: ViewChild, args: [HeaderRowOutlet, { static: true },] }],\n _footerRowOutlet: [{ type: ViewChild, args: [FooterRowOutlet, { static: true },] }],\n _noDataRowOutlet: [{ type: ViewChild, args: [NoDataRowOutlet, { static: true },] }],\n _contentColumnDefs: [{ type: ContentChildren, args: [CdkColumnDef, { descendants: true },] }],\n _contentRowDefs: [{ type: ContentChildren, args: [CdkRowDef, { descendants: true },] }],\n _contentHeaderRowDefs: [{ type: ContentChildren, args: [CdkHeaderRowDef, {\n descendants: true\n },] }],\n _contentFooterRowDefs: [{ type: ContentChildren, args: [CdkFooterRowDef, {\n descendants: true\n },] }],\n _noDataRow: [{ type: ContentChild, args: [CdkNoDataRow,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkTable, [{\n type: Component,\n args: [{\n selector: 'cdk-table, table[cdk-table]',\n exportAs: 'cdkTable',\n template: CDK_TABLE_TEMPLATE,\n host: {\n 'class': 'cdk-table',\n '[class.cdk-table-fixed-layout]': 'fixedLayout'\n },\n encapsulation: ViewEncapsulation.None,\n // The \"OnPush\" status for the `MatTable` component is effectively a noop, so we are removing it.\n // The view for `MatTable` consists entirely of templates declared in other views. As they are\n // declared elsewhere, they are checked when their declaration points are checked.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [\n { provide: CDK_TABLE, useExisting: CdkTable },\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n ],\n styles: [\".cdk-table-fixed-layout{table-layout:fixed}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.IterableDiffers }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: String, decorators: [{\n type: Attribute,\n args: ['role']\n }] }, { type: ɵngcc1.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc2.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [_VIEW_REPEATER_STRATEGY]\n }] }, { type: _CoalescedStyleScheduler, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [_COALESCED_STYLE_SCHEDULER]\n }] }, { type: ɵngcc3.ViewportRuler, decorators: [{\n type: Optional\n }] }]; }, { trackBy: [{\n type: Input\n }], dataSource: [{\n type: Input\n }], multiTemplateDataRows: [{\n type: Input\n }], fixedLayout: [{\n type: Input\n }], _rowOutlet: [{\n type: ViewChild,\n args: [DataRowOutlet, { static: true }]\n }], _headerRowOutlet: [{\n type: ViewChild,\n args: [HeaderRowOutlet, { static: true }]\n }], _footerRowOutlet: [{\n type: ViewChild,\n args: [FooterRowOutlet, { static: true }]\n }], _noDataRowOutlet: [{\n type: ViewChild,\n args: [NoDataRowOutlet, { static: true }]\n }], _contentColumnDefs: [{\n type: ContentChildren,\n args: [CdkColumnDef, { descendants: true }]\n }], _contentRowDefs: [{\n type: ContentChildren,\n args: [CdkRowDef, { descendants: true }]\n }], _contentHeaderRowDefs: [{\n type: ContentChildren,\n args: [CdkHeaderRowDef, {\n descendants: true\n }]\n }], _contentFooterRowDefs: [{\n type: ContentChildren,\n args: [CdkFooterRowDef, {\n descendants: true\n }]\n }], _noDataRow: [{\n type: ContentChild,\n args: [CdkNoDataRow]\n }] }); })();\n/** Utility function that gets a merged list of the entries in an array and values of a Set. */\nfunction mergeArrayAndSet(array, set) {\n return array.concat(Array.from(set));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass CdkTextColumn {\n constructor(\n // `CdkTextColumn` is always requiring a table, but we just assert it manually\n // for better error reporting.\n // tslint:disable-next-line: lightweight-tokens\n _table, _options) {\n this._table = _table;\n this._options = _options;\n /** Alignment of the cell values. */\n this.justify = 'start';\n this._options = _options || {};\n }\n /** Column name that should be used to reference this column. */\n get name() {\n return this._name;\n }\n set name(name) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncColumnDefName();\n }\n ngOnInit() {\n this._syncColumnDefName();\n if (this.headerText === undefined) {\n this.headerText = this._createDefaultHeaderText();\n }\n if (!this.dataAccessor) {\n this.dataAccessor =\n this._options.defaultDataAccessor || ((data, name) => data[name]);\n }\n if (this._table) {\n // Provide the cell and headerCell directly to the table with the static `ViewChild` query,\n // since the columnDef will not pick up its content by the time the table finishes checking\n // its content and initializing the rows.\n this.columnDef.cell = this.cell;\n this.columnDef.headerCell = this.headerCell;\n this._table.addColumnDef(this.columnDef);\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throw getTableTextColumnMissingParentTableError();\n }\n }\n ngOnDestroy() {\n if (this._table) {\n this._table.removeColumnDef(this.columnDef);\n }\n }\n /**\n * Creates a default header text. Use the options' header text transformation function if one\n * has been provided. Otherwise simply capitalize the column name.\n */\n _createDefaultHeaderText() {\n const name = this.name;\n if (!name && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getTableTextColumnMissingNameError();\n }\n if (this._options && this._options.defaultHeaderTextTransform) {\n return this._options.defaultHeaderTextTransform(name);\n }\n return name[0].toUpperCase() + name.slice(1);\n }\n /** Synchronizes the column definition name with the text column name. */\n _syncColumnDefName() {\n if (this.columnDef) {\n this.columnDef.name = this.name;\n }\n }\n}\nCdkTextColumn.ɵfac = function CdkTextColumn_Factory(t) { return new (t || CdkTextColumn)(ɵngcc0.ɵɵdirectiveInject(CdkTable, 8), ɵngcc0.ɵɵdirectiveInject(TEXT_COLUMN_OPTIONS, 8)); };\nCdkTextColumn.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CdkTextColumn, selectors: [[\"cdk-text-column\"]], viewQuery: function CdkTextColumn_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(CdkColumnDef, true);\n ɵngcc0.ɵɵstaticViewQuery(CdkCellDef, true);\n ɵngcc0.ɵɵstaticViewQuery(CdkHeaderCellDef, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columnDef = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cell = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerCell = _t.first);\n } }, inputs: { justify: \"justify\", name: \"name\", headerText: \"headerText\", dataAccessor: \"dataAccessor\" }, decls: 3, vars: 0, consts: [[\"cdkColumnDef\", \"\"], [\"cdk-header-cell\", \"\", 3, \"text-align\", 4, \"cdkHeaderCellDef\"], [\"cdk-cell\", \"\", 3, \"text-align\", 4, \"cdkCellDef\"], [\"cdk-header-cell\", \"\"], [\"cdk-cell\", \"\"]], template: function CdkTextColumn_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, CdkTextColumn_th_1_Template, 2, 3, \"th\", 1);\n ɵngcc0.ɵɵtemplate(2, CdkTextColumn_td_2_Template, 2, 3, \"td\", 2);\n ɵngcc0.ɵɵelementContainerEnd();\n } }, directives: [CdkColumnDef, CdkHeaderCellDef, CdkCellDef, CdkHeaderCell, CdkCell], encapsulation: 2 });\nCdkTextColumn.ctorParameters = () => [\n { type: CdkTable, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [TEXT_COLUMN_OPTIONS,] }] }\n];\nCdkTextColumn.propDecorators = {\n name: [{ type: Input }],\n headerText: [{ type: Input }],\n dataAccessor: [{ type: Input }],\n justify: [{ type: Input }],\n columnDef: [{ type: ViewChild, args: [CdkColumnDef, { static: true },] }],\n cell: [{ type: ViewChild, args: [CdkCellDef, { static: true },] }],\n headerCell: [{ type: ViewChild, args: [CdkHeaderCellDef, { static: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkTextColumn, [{\n type: Component,\n args: [{\n selector: 'cdk-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default\n }]\n }], function () { return [{ type: CdkTable, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TEXT_COLUMN_OPTIONS]\n }] }]; }, { justify: [{\n type: Input\n }], name: [{\n type: Input\n }], headerText: [{\n type: Input\n }], dataAccessor: [{\n type: Input\n }], columnDef: [{\n type: ViewChild,\n args: [CdkColumnDef, { static: true }]\n }], cell: [{\n type: ViewChild,\n args: [CdkCellDef, { static: true }]\n }], headerCell: [{\n type: ViewChild,\n args: [CdkHeaderCellDef, { static: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n CdkTable,\n CdkRowDef,\n CdkCellDef,\n CdkCellOutlet,\n CdkHeaderCellDef,\n CdkFooterCellDef,\n CdkColumnDef,\n CdkCell,\n CdkRow,\n CdkHeaderCell,\n CdkFooterCell,\n CdkHeaderRow,\n CdkHeaderRowDef,\n CdkFooterRow,\n CdkFooterRowDef,\n DataRowOutlet,\n HeaderRowOutlet,\n FooterRowOutlet,\n CdkTextColumn,\n CdkNoDataRow,\n NoDataRowOutlet,\n];\nclass CdkTableModule {\n}\nCdkTableModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CdkTableModule });\nCdkTableModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CdkTableModule_Factory(t) { return new (t || CdkTableModule)(); }, imports: [[ScrollingModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdkTableModule, { declarations: function () { return [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, NoDataRowOutlet]; }, imports: function () { return [ScrollingModule]; }, exports: function () { return [CdkTable, CdkRowDef, CdkCellDef, CdkCellOutlet, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkCell, CdkRow, CdkHeaderCell, CdkFooterCell, CdkHeaderRow, CdkHeaderRowDef, CdkFooterRow, CdkFooterRowDef, DataRowOutlet, HeaderRowOutlet, FooterRowOutlet, CdkTextColumn, CdkNoDataRow, NoDataRowOutlet]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkTableModule, [{\n type: NgModule,\n args: [{\n exports: EXPORTED_DECLARATIONS,\n declarations: EXPORTED_DECLARATIONS,\n imports: [ScrollingModule]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BaseCdkCell, BaseRowDef, CDK_ROW_TEMPLATE, CDK_TABLE, CDK_TABLE_TEMPLATE, CdkCell, CdkCellDef, CdkCellOutlet, CdkColumnDef, CdkFooterCell, CdkFooterCellDef, CdkFooterRow, CdkFooterRowDef, CdkHeaderCell, CdkHeaderCellDef, CdkHeaderRow, CdkHeaderRowDef, CdkNoDataRow, CdkRow, CdkRowDef, CdkTable, CdkTableModule, CdkTextColumn, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_DIRECTIONS, StickyStyler, TEXT_COLUMN_OPTIONS, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, _Schedule, mixinHasStickyInput };\n\n//# sourceMappingURL=table.js.map","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, Input, NgModule } from '@angular/core';\nimport { CdkTable, CDK_TABLE_TEMPLATE, CDK_TABLE, _COALESCED_STYLE_SCHEDULER, _CoalescedStyleScheduler, CdkCellDef, CdkHeaderCellDef, CdkFooterCellDef, CdkColumnDef, CdkHeaderCell, CdkFooterCell, CdkCell, CdkHeaderRowDef, CdkFooterRowDef, CdkRowDef, CdkHeaderRow, CDK_ROW_TEMPLATE, CdkFooterRow, CdkRow, CdkNoDataRow, CdkTextColumn, CdkTableModule, DataSource } from '@angular/cdk/table';\nimport { _VIEW_REPEATER_STRATEGY, _DisposeViewRepeaterStrategy } from '@angular/cdk/collections';\nimport { MatCommonModule } from '@angular/material/core';\nimport { _isNumberValue } from '@angular/cdk/coercion';\nimport { BehaviorSubject, Subject, Subscription, merge, of, combineLatest } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Wrapper for the CdkTable with Material design styles.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/table';\n\nconst _c0 = [[[\"caption\"]], [[\"colgroup\"], [\"col\"]]];\nconst _c1 = [\"caption\", \"colgroup, col\"];\nfunction MatTextColumn_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx_r0.justify);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.headerText, \" \");\n} }\nfunction MatTextColumn_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const data_r2 = ctx.$implicit;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"text-align\", ctx_r1.justify);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.dataAccessor(data_r2, ctx_r1.name), \" \");\n} }\nclass MatTable extends CdkTable {\n constructor() {\n super(...arguments);\n /** Overrides the sticky CSS class set by the `CdkTable`. */\n this.stickyCssClass = 'mat-table-sticky';\n /** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */\n this.needsPositionStickyOnElement = false;\n }\n}\nMatTable.ɵfac = function MatTable_Factory(t) { return ɵMatTable_BaseFactory(t || MatTable); };\nMatTable.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatTable, selectors: [[\"mat-table\"], [\"table\", \"mat-table\", \"\"]], hostAttrs: [1, \"mat-table\"], hostVars: 2, hostBindings: function MatTable_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-table-fixed-layout\", ctx.fixedLayout);\n } }, exportAs: [\"matTable\"], features: [ɵngcc0.ɵɵProvidersFeature([\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c1, decls: 6, vars: 0, consts: [[\"headerRowOutlet\", \"\"], [\"rowOutlet\", \"\"], [\"noDataRowOutlet\", \"\"], [\"footerRowOutlet\", \"\"]], template: function MatTable_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵprojection(1, 1);\n ɵngcc0.ɵɵelementContainer(2, 0);\n ɵngcc0.ɵɵelementContainer(3, 1);\n ɵngcc0.ɵɵelementContainer(4, 2);\n ɵngcc0.ɵɵelementContainer(5, 3);\n } }, directives: [ɵngcc1.HeaderRowOutlet, ɵngcc1.DataRowOutlet, ɵngcc1.NoDataRowOutlet, ɵngcc1.FooterRowOutlet], styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-row::after,mat-header-row::after,mat-footer-row::after{display:inline-block;min-height:inherit;content:\\\"\\\"}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:-webkit-sticky;position:sticky}.mat-table-fixed-layout{table-layout:fixed}\\n\"], encapsulation: 2 });\nconst ɵMatTable_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatTable);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatTable, [{\n type: Component,\n args: [{\n selector: 'mat-table, table[mat-table]',\n exportAs: 'matTable',\n template: CDK_TABLE_TEMPLATE,\n host: {\n 'class': 'mat-table',\n '[class.mat-table-fixed-layout]': 'fixedLayout'\n },\n providers: [\n // TODO(michaeljamesparsons) Abstract the view repeater strategy to a directive API so this code\n // is only included in the build if used.\n { provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },\n { provide: CdkTable, useExisting: MatTable },\n { provide: CDK_TABLE, useExisting: MatTable },\n { provide: _COALESCED_STYLE_SCHEDULER, useClass: _CoalescedStyleScheduler },\n ],\n encapsulation: ViewEncapsulation.None,\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n styles: [\"mat-table{display:block}mat-header-row{min-height:56px}mat-row,mat-footer-row{min-height:48px}mat-row,mat-header-row,mat-footer-row{display:flex;border-width:0;border-bottom-width:1px;border-style:solid;align-items:center;box-sizing:border-box}mat-row::after,mat-header-row::after,mat-footer-row::after{display:inline-block;min-height:inherit;content:\\\"\\\"}mat-cell:first-of-type,mat-header-cell:first-of-type,mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] mat-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}mat-cell:last-of-type,mat-header-cell:last-of-type,mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] mat-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}mat-cell,mat-header-cell,mat-footer-cell{flex:1;display:flex;align-items:center;overflow:hidden;word-wrap:break-word;min-height:inherit}table.mat-table{border-spacing:0}tr.mat-header-row{height:56px}tr.mat-row,tr.mat-footer-row{height:48px}th.mat-header-cell{text-align:left}[dir=rtl] th.mat-header-cell{text-align:right}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0;border-bottom-width:1px;border-bottom-style:solid}th.mat-header-cell:first-of-type,td.mat-cell:first-of-type,td.mat-footer-cell:first-of-type{padding-left:24px}[dir=rtl] th.mat-header-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:first-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:first-of-type:not(:only-of-type){padding-left:0;padding-right:24px}th.mat-header-cell:last-of-type,td.mat-cell:last-of-type,td.mat-footer-cell:last-of-type{padding-right:24px}[dir=rtl] th.mat-header-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-cell:last-of-type:not(:only-of-type),[dir=rtl] td.mat-footer-cell:last-of-type:not(:only-of-type){padding-right:0;padding-left:24px}.mat-table-sticky{position:-webkit-sticky;position:sticky}.mat-table-fixed-layout{table-layout:fixed}\\n\"]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Cell definition for the mat-table.\n * Captures the template of a column's data row cell as well as cell-specific properties.\n */\nclass MatCellDef extends CdkCellDef {\n}\nMatCellDef.ɵfac = function MatCellDef_Factory(t) { return ɵMatCellDef_BaseFactory(t || MatCellDef); };\nMatCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCellDef, selectors: [[\"\", \"matCellDef\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkCellDef, useExisting: MatCellDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatCellDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatCellDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCellDef, [{\n type: Directive,\n args: [{\n selector: '[matCellDef]',\n providers: [{ provide: CdkCellDef, useExisting: MatCellDef }]\n }]\n }], null, null); })();\n/**\n * Header cell definition for the mat-table.\n * Captures the template of a column's header cell and as well as cell-specific properties.\n */\nclass MatHeaderCellDef extends CdkHeaderCellDef {\n}\nMatHeaderCellDef.ɵfac = function MatHeaderCellDef_Factory(t) { return ɵMatHeaderCellDef_BaseFactory(t || MatHeaderCellDef); };\nMatHeaderCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatHeaderCellDef, selectors: [[\"\", \"matHeaderCellDef\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatHeaderCellDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatHeaderCellDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatHeaderCellDef, [{\n type: Directive,\n args: [{\n selector: '[matHeaderCellDef]',\n providers: [{ provide: CdkHeaderCellDef, useExisting: MatHeaderCellDef }]\n }]\n }], null, null); })();\n/**\n * Footer cell definition for the mat-table.\n * Captures the template of a column's footer cell and as well as cell-specific properties.\n */\nclass MatFooterCellDef extends CdkFooterCellDef {\n}\nMatFooterCellDef.ɵfac = function MatFooterCellDef_Factory(t) { return ɵMatFooterCellDef_BaseFactory(t || MatFooterCellDef); };\nMatFooterCellDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatFooterCellDef, selectors: [[\"\", \"matFooterCellDef\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatFooterCellDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatFooterCellDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatFooterCellDef, [{\n type: Directive,\n args: [{\n selector: '[matFooterCellDef]',\n providers: [{ provide: CdkFooterCellDef, useExisting: MatFooterCellDef }]\n }]\n }], null, null); })();\n/**\n * Column definition for the mat-table.\n * Defines a set of cells available for a table column.\n */\nclass MatColumnDef extends CdkColumnDef {\n /** Unique name for this column. */\n get name() { return this._name; }\n set name(name) { this._setNameInput(name); }\n /**\n * Add \"mat-column-\" prefix in addition to \"cdk-column-\" prefix.\n * In the future, this will only add \"mat-column-\" and columnCssClassName\n * will change from type string[] to string.\n * @docs-private\n */\n _updateColumnCssClassName() {\n super._updateColumnCssClassName();\n this._columnCssClassName.push(`mat-column-${this.cssClassFriendlyName}`);\n }\n}\nMatColumnDef.ɵfac = function MatColumnDef_Factory(t) { return ɵMatColumnDef_BaseFactory(t || MatColumnDef); };\nMatColumnDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatColumnDef, selectors: [[\"\", \"matColumnDef\", \"\"]], inputs: { sticky: \"sticky\", name: [\"matColumnDef\", \"name\"] }, features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nMatColumnDef.propDecorators = {\n name: [{ type: Input, args: ['matColumnDef',] }]\n};\nconst ɵMatColumnDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatColumnDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatColumnDef, [{\n type: Directive,\n args: [{\n selector: '[matColumnDef]',\n inputs: ['sticky'],\n providers: [\n { provide: CdkColumnDef, useExisting: MatColumnDef },\n { provide: 'MAT_SORT_HEADER_COLUMN_DEF', useExisting: MatColumnDef }\n ]\n }]\n }], null, { name: [{\n type: Input,\n args: ['matColumnDef']\n }] }); })();\n/** Header cell template container that adds the right classes and role. */\nclass MatHeaderCell extends CdkHeaderCell {\n}\nMatHeaderCell.ɵfac = function MatHeaderCell_Factory(t) { return ɵMatHeaderCell_BaseFactory(t || MatHeaderCell); };\nMatHeaderCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatHeaderCell, selectors: [[\"mat-header-cell\"], [\"th\", \"mat-header-cell\", \"\"]], hostAttrs: [\"role\", \"columnheader\", 1, \"mat-header-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatHeaderCell_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatHeaderCell);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatHeaderCell, [{\n type: Directive,\n args: [{\n selector: 'mat-header-cell, th[mat-header-cell]',\n host: {\n 'class': 'mat-header-cell',\n 'role': 'columnheader'\n }\n }]\n }], null, null); })();\n/** Footer cell template container that adds the right classes and role. */\nclass MatFooterCell extends CdkFooterCell {\n}\nMatFooterCell.ɵfac = function MatFooterCell_Factory(t) { return ɵMatFooterCell_BaseFactory(t || MatFooterCell); };\nMatFooterCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatFooterCell, selectors: [[\"mat-footer-cell\"], [\"td\", \"mat-footer-cell\", \"\"]], hostAttrs: [\"role\", \"gridcell\", 1, \"mat-footer-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatFooterCell_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatFooterCell);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatFooterCell, [{\n type: Directive,\n args: [{\n selector: 'mat-footer-cell, td[mat-footer-cell]',\n host: {\n 'class': 'mat-footer-cell',\n 'role': 'gridcell'\n }\n }]\n }], null, null); })();\n/** Cell template container that adds the right classes and role. */\nclass MatCell extends CdkCell {\n}\nMatCell.ɵfac = function MatCell_Factory(t) { return ɵMatCell_BaseFactory(t || MatCell); };\nMatCell.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCell, selectors: [[\"mat-cell\"], [\"td\", \"mat-cell\", \"\"]], hostAttrs: [\"role\", \"gridcell\", 1, \"mat-cell\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatCell_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatCell);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCell, [{\n type: Directive,\n args: [{\n selector: 'mat-cell, td[mat-cell]',\n host: {\n 'class': 'mat-cell',\n 'role': 'gridcell'\n }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Header row definition for the mat-table.\n * Captures the header row's template and other header properties such as the columns to display.\n */\nclass MatHeaderRowDef extends CdkHeaderRowDef {\n}\nMatHeaderRowDef.ɵfac = function MatHeaderRowDef_Factory(t) { return ɵMatHeaderRowDef_BaseFactory(t || MatHeaderRowDef); };\nMatHeaderRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatHeaderRowDef, selectors: [[\"\", \"matHeaderRowDef\", \"\"]], inputs: { columns: [\"matHeaderRowDef\", \"columns\"], sticky: [\"matHeaderRowDefSticky\", \"sticky\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatHeaderRowDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatHeaderRowDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatHeaderRowDef, [{\n type: Directive,\n args: [{\n selector: '[matHeaderRowDef]',\n providers: [{ provide: CdkHeaderRowDef, useExisting: MatHeaderRowDef }],\n inputs: ['columns: matHeaderRowDef', 'sticky: matHeaderRowDefSticky']\n }]\n }], null, null); })();\n/**\n * Footer row definition for the mat-table.\n * Captures the footer row's template and other footer properties such as the columns to display.\n */\nclass MatFooterRowDef extends CdkFooterRowDef {\n}\nMatFooterRowDef.ɵfac = function MatFooterRowDef_Factory(t) { return ɵMatFooterRowDef_BaseFactory(t || MatFooterRowDef); };\nMatFooterRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatFooterRowDef, selectors: [[\"\", \"matFooterRowDef\", \"\"]], inputs: { columns: [\"matFooterRowDef\", \"columns\"], sticky: [\"matFooterRowDefSticky\", \"sticky\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatFooterRowDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatFooterRowDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatFooterRowDef, [{\n type: Directive,\n args: [{\n selector: '[matFooterRowDef]',\n providers: [{ provide: CdkFooterRowDef, useExisting: MatFooterRowDef }],\n inputs: ['columns: matFooterRowDef', 'sticky: matFooterRowDefSticky']\n }]\n }], null, null); })();\n/**\n * Data row definition for the mat-table.\n * Captures the data row's template and other properties such as the columns to display and\n * a when predicate that describes when this row should be used.\n */\nclass MatRowDef extends CdkRowDef {\n}\nMatRowDef.ɵfac = function MatRowDef_Factory(t) { return ɵMatRowDef_BaseFactory(t || MatRowDef); };\nMatRowDef.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatRowDef, selectors: [[\"\", \"matRowDef\", \"\"]], inputs: { columns: [\"matRowDefColumns\", \"columns\"], when: [\"matRowDefWhen\", \"when\"] }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkRowDef, useExisting: MatRowDef }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatRowDef_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatRowDef);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRowDef, [{\n type: Directive,\n args: [{\n selector: '[matRowDef]',\n providers: [{ provide: CdkRowDef, useExisting: MatRowDef }],\n inputs: ['columns: matRowDefColumns', 'when: matRowDefWhen']\n }]\n }], null, null); })();\n/** Header template container that contains the cell outlet. Adds the right class and role. */\nclass MatHeaderRow extends CdkHeaderRow {\n}\nMatHeaderRow.ɵfac = function MatHeaderRow_Factory(t) { return ɵMatHeaderRow_BaseFactory(t || MatHeaderRow); };\nMatHeaderRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatHeaderRow, selectors: [[\"mat-header-row\"], [\"tr\", \"mat-header-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"mat-header-row\"], exportAs: [\"matHeaderRow\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkHeaderRow, useExisting: MatHeaderRow }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function MatHeaderRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [ɵngcc1.CdkCellOutlet], encapsulation: 2 });\nconst ɵMatHeaderRow_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatHeaderRow);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatHeaderRow, [{\n type: Component,\n args: [{\n selector: 'mat-header-row, tr[mat-header-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-header-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matHeaderRow',\n providers: [{ provide: CdkHeaderRow, useExisting: MatHeaderRow }]\n }]\n }], null, null); })();\n/** Footer template container that contains the cell outlet. Adds the right class and role. */\nclass MatFooterRow extends CdkFooterRow {\n}\nMatFooterRow.ɵfac = function MatFooterRow_Factory(t) { return ɵMatFooterRow_BaseFactory(t || MatFooterRow); };\nMatFooterRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatFooterRow, selectors: [[\"mat-footer-row\"], [\"tr\", \"mat-footer-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"mat-footer-row\"], exportAs: [\"matFooterRow\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkFooterRow, useExisting: MatFooterRow }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function MatFooterRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [ɵngcc1.CdkCellOutlet], encapsulation: 2 });\nconst ɵMatFooterRow_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatFooterRow);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatFooterRow, [{\n type: Component,\n args: [{\n selector: 'mat-footer-row, tr[mat-footer-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-footer-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matFooterRow',\n providers: [{ provide: CdkFooterRow, useExisting: MatFooterRow }]\n }]\n }], null, null); })();\n/** Data row template container that contains the cell outlet. Adds the right class and role. */\nclass MatRow extends CdkRow {\n}\nMatRow.ɵfac = function MatRow_Factory(t) { return ɵMatRow_BaseFactory(t || MatRow); };\nMatRow.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatRow, selectors: [[\"mat-row\"], [\"tr\", \"mat-row\", \"\"]], hostAttrs: [\"role\", \"row\", 1, \"mat-row\"], exportAs: [\"matRow\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkRow, useExisting: MatRow }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"cdkCellOutlet\", \"\"]], template: function MatRow_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n } }, directives: [ɵngcc1.CdkCellOutlet], encapsulation: 2 });\nconst ɵMatRow_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatRow);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatRow, [{\n type: Component,\n args: [{\n selector: 'mat-row, tr[mat-row]',\n template: CDK_ROW_TEMPLATE,\n host: {\n 'class': 'mat-row',\n 'role': 'row'\n },\n // See note on CdkTable for explanation on why this uses the default change detection strategy.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'matRow',\n providers: [{ provide: CdkRow, useExisting: MatRow }]\n }]\n }], null, null); })();\n/** Row that can be used to display a message when no data is shown in the table. */\nclass MatNoDataRow extends CdkNoDataRow {\n}\nMatNoDataRow.ɵfac = function MatNoDataRow_Factory(t) { return ɵMatNoDataRow_BaseFactory(t || MatNoDataRow); };\nMatNoDataRow.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatNoDataRow, selectors: [[\"ng-template\", \"matNoDataRow\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: CdkNoDataRow, useExisting: MatNoDataRow }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatNoDataRow_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatNoDataRow);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatNoDataRow, [{\n type: Directive,\n args: [{\n selector: 'ng-template[matNoDataRow]',\n providers: [{ provide: CdkNoDataRow, useExisting: MatNoDataRow }]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Column that simply shows text content for the header and row cells. Assumes that the table\n * is using the native table implementation (`
\n {{headerText}}\n \n {{dataAccessor(data, name)}}\n
`).\n *\n * By default, the name of this column will be the header text and data property accessor.\n * The header text can be overridden with the `headerText` input. Cell values can be overridden with\n * the `dataAccessor` input. Change the text justification to the start or end using the `justify`\n * input.\n */\nclass MatTextColumn extends CdkTextColumn {\n}\nMatTextColumn.ɵfac = function MatTextColumn_Factory(t) { return ɵMatTextColumn_BaseFactory(t || MatTextColumn); };\nMatTextColumn.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatTextColumn, selectors: [[\"mat-text-column\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 0, consts: [[\"matColumnDef\", \"\"], [\"mat-header-cell\", \"\", 3, \"text-align\", 4, \"matHeaderCellDef\"], [\"mat-cell\", \"\", 3, \"text-align\", 4, \"matCellDef\"], [\"mat-header-cell\", \"\"], [\"mat-cell\", \"\"]], template: function MatTextColumn_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, MatTextColumn_th_1_Template, 2, 3, \"th\", 1);\n ɵngcc0.ɵɵtemplate(2, MatTextColumn_td_2_Template, 2, 3, \"td\", 2);\n ɵngcc0.ɵɵelementContainerEnd();\n } }, directives: [MatColumnDef, MatHeaderCellDef, MatCellDef, MatHeaderCell, MatCell], encapsulation: 2 });\nconst ɵMatTextColumn_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatTextColumn);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatTextColumn, [{\n type: Component,\n args: [{\n selector: 'mat-text-column',\n template: `\n \n \n \n \n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // mean's the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst EXPORTED_DECLARATIONS = [\n // Table\n MatTable,\n // Template defs\n MatHeaderCellDef,\n MatHeaderRowDef,\n MatColumnDef,\n MatCellDef,\n MatRowDef,\n MatFooterCellDef,\n MatFooterRowDef,\n // Cell directives\n MatHeaderCell,\n MatCell,\n MatFooterCell,\n // Row directives\n MatHeaderRow,\n MatRow,\n MatFooterRow,\n MatNoDataRow,\n MatTextColumn,\n];\nclass MatTableModule {\n}\nMatTableModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatTableModule });\nMatTableModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatTableModule_Factory(t) { return new (t || MatTableModule)(); }, imports: [[\n CdkTableModule,\n MatCommonModule,\n ], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatTableModule, { declarations: function () { return [MatTable, MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef, MatHeaderCell, MatCell, MatFooterCell, MatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn]; }, imports: function () { return [CdkTableModule,\n MatCommonModule]; }, exports: function () { return [MatCommonModule, MatTable, MatHeaderCellDef, MatHeaderRowDef, MatColumnDef, MatCellDef, MatRowDef, MatFooterCellDef, MatFooterRowDef, MatHeaderCell, MatCell, MatFooterCell, MatHeaderRow, MatRow, MatFooterRow, MatNoDataRow, MatTextColumn]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatTableModule, [{\n type: NgModule,\n args: [{\n imports: [\n CdkTableModule,\n MatCommonModule,\n ],\n exports: [MatCommonModule, EXPORTED_DECLARATIONS],\n declarations: EXPORTED_DECLARATIONS\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Corresponds to `Number.MAX_SAFE_INTEGER`. Moved out into a variable here due to\n * flaky browser support and the value not being defined in Closure's typings.\n */\nconst MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Data source that accepts a client-side data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * Allows for sort customization by overriding sortingDataAccessor, which defines how data\n * properties are accessed. Also allows for filter customization by overriding filterTermAccessor,\n * which defines how row data is converted to a string for filter matching.\n *\n * **Note:** This class is meant to be a simple data source to help you get started. As such\n * it isn't equipped to handle some more advanced cases like robust i18n support or server-side\n * interactions. If your app needs to support more advanced use cases, consider implementing your\n * own `DataSource`.\n */\nclass MatTableDataSource extends DataSource {\n constructor(initialData = []) {\n super();\n /** Stream emitting render data to the table (depends on ordered data changes). */\n this._renderData = new BehaviorSubject([]);\n /** Stream that emits when a new filter string is set on the data source. */\n this._filter = new BehaviorSubject('');\n /** Used to react to internal changes of the paginator that are made by the data source itself. */\n this._internalPageChanges = new Subject();\n /**\n * Subscription to the changes that should trigger an update to the table's rendered rows, such\n * as filtering, sorting, pagination, or base data changes.\n */\n this._renderChangesSubscription = Subscription.EMPTY;\n /**\n * Data accessor function that is used for accessing data properties for sorting through\n * the default sortData function.\n * This default function assumes that the sort header IDs (which defaults to the column name)\n * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n * May be set to a custom function for different behavior.\n * @param data Data object that is being accessed.\n * @param sortHeaderId The name of the column that represents the data.\n */\n this.sortingDataAccessor = (data, sortHeaderId) => {\n const value = data[sortHeaderId];\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n return value;\n };\n /**\n * Gets a sorted copy of the data array based on the state of the MatSort. Called\n * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n * By default, the function retrieves the active sort and its direction and compares data\n * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n * of data ordering.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\n this.sortData = (data, sort) => {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction == '') {\n return data;\n }\n return data.sort((a, b) => {\n let valueA = this.sortingDataAccessor(a, active);\n let valueB = this.sortingDataAccessor(b, active);\n // If there are data in the column that can be converted to a number,\n // it must be ensured that the rest of the data\n // is of the same type so as not to order incorrectly.\n const valueAType = typeof valueA;\n const valueBType = typeof valueB;\n if (valueAType !== valueBType) {\n if (valueAType === 'number') {\n valueA += '';\n }\n if (valueBType === 'number') {\n valueB += '';\n }\n }\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n if (valueA > valueB) {\n comparatorResult = 1;\n }\n else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n else if (valueA != null) {\n comparatorResult = 1;\n }\n else if (valueB != null) {\n comparatorResult = -1;\n }\n return comparatorResult * (direction == 'asc' ? 1 : -1);\n });\n };\n /**\n * Checks if a data object matches the data source's filter string. By default, each data object\n * is converted to a string of its properties and returns true if the filter has\n * at least one occurrence in that string. By default, the filter string has its whitespace\n * trimmed and the match is case-insensitive. May be overridden for a custom implementation of\n * filter matching.\n * @param data Data object used to check against the filter.\n * @param filter Filter string that has been set on the data source.\n * @returns Whether the filter matches against the data\n */\n this.filterPredicate = (data, filter) => {\n // Transform the data into a lowercase string of all property values.\n const dataStr = Object.keys(data).reduce((currentTerm, key) => {\n // Use an obscure Unicode character to delimit the words in the concatenated string.\n // This avoids matches where the values of two columns combined will match the user's query\n // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something\n // that has a very low chance of being typed in by somebody in a text field. This one in\n // particular is \"White up-pointing triangle with dot\" from\n // https://en.wikipedia.org/wiki/List_of_Unicode_characters\n return currentTerm + data[key] + '◬';\n }, '').toLowerCase();\n // Transform the filter by converting it to lowercase and removing whitespace.\n const transformedFilter = filter.trim().toLowerCase();\n return dataStr.indexOf(transformedFilter) != -1;\n };\n this._data = new BehaviorSubject(initialData);\n this._updateChangeSubscription();\n }\n /** Array of data that should be rendered by the table, where each object represents one row. */\n get data() { return this._data.value; }\n set data(data) { this._data.next(data); }\n /**\n * Filter term that should be used to filter out objects from the data array. To override how\n * data objects match to this filter string, provide a custom function for filterPredicate.\n */\n get filter() { return this._filter.value; }\n set filter(filter) { this._filter.next(filter); }\n /**\n * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n * emitted by the MatSort will trigger an update to the table's rendered data.\n */\n get sort() { return this._sort; }\n set sort(sort) {\n this._sort = sort;\n this._updateChangeSubscription();\n }\n /**\n * Instance of the MatPaginator component used by the table to control what page of the data is\n * displayed. Page changes emitted by the MatPaginator will trigger an update to the\n * table's rendered data.\n *\n * Note that the data source uses the paginator's properties to calculate which page of data\n * should be displayed. If the paginator receives its properties as template inputs,\n * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n * initialized before assigning it to this data source.\n */\n get paginator() { return this._paginator; }\n set paginator(paginator) {\n this._paginator = paginator;\n this._updateChangeSubscription();\n }\n /**\n * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n * changes occur, process the current state of the filter, sort, and pagination along with\n * the provided base data and send it to the table for rendering.\n */\n _updateChangeSubscription() {\n // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.\n // The events should emit whenever the component emits a change or initializes, or if no\n // component is provided, a stream with just a null event should be provided.\n // The `sortChange` and `pageChange` acts as a signal to the combineLatests below so that the\n // pipeline can progress to the next step. Note that the value from these streams are not used,\n // they purely act as a signal to progress in the pipeline.\n const sortChange = this._sort ?\n merge(this._sort.sortChange, this._sort.initialized) :\n of(null);\n const pageChange = this._paginator ?\n merge(this._paginator.page, this._internalPageChanges, this._paginator.initialized) :\n of(null);\n const dataStream = this._data;\n // Watch for base data or filter changes to provide a filtered set of data.\n const filteredData = combineLatest([dataStream, this._filter])\n .pipe(map(([data]) => this._filterData(data)));\n // Watch for filtered data or sort changes to provide an ordered set of data.\n const orderedData = combineLatest([filteredData, sortChange])\n .pipe(map(([data]) => this._orderData(data)));\n // Watch for ordered data or page changes to provide a paged set of data.\n const paginatedData = combineLatest([orderedData, pageChange])\n .pipe(map(([data]) => this._pageData(data)));\n // Watched for paged data changes and send the result to the table to render.\n this._renderChangesSubscription.unsubscribe();\n this._renderChangesSubscription = paginatedData.subscribe(data => this._renderData.next(data));\n }\n /**\n * Returns a filtered data array where each filter object contains the filter string within\n * the result of the filterTermAccessor function. If no filter is set, returns the data array\n * as provided.\n */\n _filterData(data) {\n // If there is a filter string, filter out data that does not contain it.\n // Each data object is converted to a string using the function defined by filterTermAccessor.\n // May be overridden for customization.\n this.filteredData = (this.filter == null || this.filter === '') ? data :\n data.filter(obj => this.filterPredicate(obj, this.filter));\n if (this.paginator) {\n this._updatePaginator(this.filteredData.length);\n }\n return this.filteredData;\n }\n /**\n * Returns a sorted copy of the data if MatSort has a sort applied, otherwise just returns the\n * data array as provided. Uses the default data accessor for data lookup, unless a\n * sortDataAccessor function is defined.\n */\n _orderData(data) {\n // If there is no active sort or direction, return the data without trying to sort.\n if (!this.sort) {\n return data;\n }\n return this.sortData(data.slice(), this.sort);\n }\n /**\n * Returns a paged slice of the provided data array according to the provided MatPaginator's page\n * index and length. If there is no paginator provided, returns the data array as provided.\n */\n _pageData(data) {\n if (!this.paginator) {\n return data;\n }\n const startIndex = this.paginator.pageIndex * this.paginator.pageSize;\n return data.slice(startIndex, startIndex + this.paginator.pageSize);\n }\n /**\n * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n * index does not exceed the paginator's last page. Values are changed in a resolved promise to\n * guard against making property changes within a round of change detection.\n */\n _updatePaginator(filteredDataLength) {\n Promise.resolve().then(() => {\n const paginator = this.paginator;\n if (!paginator) {\n return;\n }\n paginator.length = filteredDataLength;\n // If the page index is set beyond the page, reduce it to the last page.\n if (paginator.pageIndex > 0) {\n const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n if (newPageIndex !== paginator.pageIndex) {\n paginator.pageIndex = newPageIndex;\n // Since the paginator only emits after user-generated changes,\n // we need our own stream so we know to should re-render the data.\n this._internalPageChanges.next();\n }\n }\n });\n }\n /**\n * Used by the MatTable. Called when it connects to the data source.\n * @docs-private\n */\n connect() { return this._renderData; }\n /**\n * Used by the MatTable. Called when it is destroyed. No-op.\n * @docs-private\n */\n disconnect() { }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCell, MatCellDef, MatColumnDef, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule, MatTextColumn };\n\n//# sourceMappingURL=table.js.map","export { default as append } from './util/append';\nexport { default as arabicToRoman } from './util/arabic-to-roman';\nexport { default as createPromise } from './util/create-promise';\nexport { default as defined } from './util/defined';\nexport { default as definitionId } from './util/definition-id';\nexport { default as deg } from './util/deg';\nexport { default as encodeBase64 } from './util/encode-base64';\nexport { default as eventCoordinates } from './util/event-coordinates';\nexport { default as eventElement } from './util/event-element';\nexport { default as isTransparent } from './util/is-transparent';\nexport { default as last } from './util/last';\nexport { default as limitValue } from './util/limit-value';\nexport { default as mergeSort } from './util/merge-sort';\nexport { default as now } from './util/now';\nexport { default as promiseAll } from './util/promise-all';\nexport { default as rad } from './util/rad';\nexport { default as round } from './util/round';\nexport { default as valueOrDefault } from './util/value-or-default';\nexport { default as bindEvents } from './util/bind-events';\nexport { default as elementOffset } from './util/element-offset';\nexport { default as elementSize } from './util/element-size';\nexport { default as elementStyles } from './util/element-styles';\nexport { default as unbindEvents } from './util/unbind-events';\nexport { default as elementPadding } from './util/element-padding';\nexport { default as elementScale } from './util/element-scale';\n\nexport * from './util/constants';\nexport * from './text-metrics';\n","import { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { PopoverComponent } from './popover/popover.component';\n\nexport class PopoverOverlayRef {\n public componentInstance: PopoverComponent;\n\n private beforeCloseSubject = new Subject();\n private afterClosedSubject = new Subject();\n\n\n constructor(private overlayRef: OverlayRef) {\n }\n\n public close(data?: any): void {\n this.overlayRef.dispose();\n this.afterClosedSubject.next(data);\n this.afterClosedSubject.complete();\n\n this.componentInstance = null;\n }\n\n public afterClosed(): Observable {\n return this.afterClosedSubject.asObservable();\n }\n\n public beforeClose(): Observable {\n return this.beforeCloseSubject.asObservable();\n }\n\n}\n","import { ElementRef, Directive, TemplateRef, ViewContainerRef, EventEmitter, ComponentFactoryResolver, Inject, Output, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Throws an exception when attempting to attach a null portal to a host.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nfunction throwNullPortalError() {\n throw Error('Must provide a portal to attach');\n}\n/**\n * Throws an exception when attempting to attach a portal to a host that is already attached.\n * @docs-private\n */\nfunction throwPortalAlreadyAttachedError() {\n throw Error('Host already has a portal attached');\n}\n/**\n * Throws an exception when attempting to attach a portal to an already-disposed host.\n * @docs-private\n */\nfunction throwPortalOutletAlreadyDisposedError() {\n throw Error('This PortalOutlet has already been disposed');\n}\n/**\n * Throws an exception when attempting to attach an unknown portal type.\n * @docs-private\n */\nfunction throwUnknownPortalTypeError() {\n throw Error('Attempting to attach an unknown Portal type. BasePortalOutlet accepts either ' +\n 'a ComponentPortal or a TemplatePortal.');\n}\n/**\n * Throws an exception when attempting to attach a portal to a null host.\n * @docs-private\n */\nfunction throwNullPortalOutletError() {\n throw Error('Attempting to attach a portal to a null PortalOutlet');\n}\n/**\n * Throws an exception when attempting to detach a portal that is not attached.\n * @docs-private\n */\nfunction throwNoPortalAttachedError() {\n throw Error('Attempting to detach a portal that is not attached to a host');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A `Portal` is something that you want to render somewhere else.\n * It can be attach to / detached from a `PortalOutlet`.\n */\nclass Portal {\n /** Attach this portal to a host. */\n attach(host) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (host == null) {\n throwNullPortalOutletError();\n }\n if (host.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n }\n this._attachedHost = host;\n return host.attach(this);\n }\n /** Detach this portal from its host */\n detach() {\n let host = this._attachedHost;\n if (host != null) {\n this._attachedHost = null;\n host.detach();\n }\n else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwNoPortalAttachedError();\n }\n }\n /** Whether this portal is attached to a host. */\n get isAttached() {\n return this._attachedHost != null;\n }\n /**\n * Sets the PortalOutlet reference without performing `attach()`. This is used directly by\n * the PortalOutlet when it is performing an `attach()` or `detach()`.\n */\n setAttachedHost(host) {\n this._attachedHost = host;\n }\n}\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nclass ComponentPortal extends Portal {\n constructor(component, viewContainerRef, injector, componentFactoryResolver) {\n super();\n this.component = component;\n this.viewContainerRef = viewContainerRef;\n this.injector = injector;\n this.componentFactoryResolver = componentFactoryResolver;\n }\n}\n/**\n * A `TemplatePortal` is a portal that represents some embedded template (TemplateRef).\n */\nclass TemplatePortal extends Portal {\n constructor(template, viewContainerRef, context) {\n super();\n this.templateRef = template;\n this.viewContainerRef = viewContainerRef;\n this.context = context;\n }\n get origin() {\n return this.templateRef.elementRef;\n }\n /**\n * Attach the portal to the provided `PortalOutlet`.\n * When a context is provided it will override the `context` property of the `TemplatePortal`\n * instance.\n */\n attach(host, context = this.context) {\n this.context = context;\n return super.attach(host);\n }\n detach() {\n this.context = undefined;\n return super.detach();\n }\n}\n/**\n * A `DomPortal` is a portal whose DOM element will be taken from its current position\n * in the DOM and moved into a portal outlet, when it is attached. On detach, the content\n * will be restored to its original position.\n */\nclass DomPortal extends Portal {\n constructor(element) {\n super();\n this.element = element instanceof ElementRef ? element.nativeElement : element;\n }\n}\n/**\n * Partial implementation of PortalOutlet that handles attaching\n * ComponentPortal and TemplatePortal.\n */\nclass BasePortalOutlet {\n constructor() {\n /** Whether this host has already been permanently disposed. */\n this._isDisposed = false;\n // @breaking-change 10.0.0 `attachDomPortal` to become a required abstract method.\n this.attachDomPortal = null;\n }\n /** Whether this host has an attached portal. */\n hasAttached() {\n return !!this._attachedPortal;\n }\n /** Attaches a portal. */\n attach(portal) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!portal) {\n throwNullPortalError();\n }\n if (this.hasAttached()) {\n throwPortalAlreadyAttachedError();\n }\n if (this._isDisposed) {\n throwPortalOutletAlreadyDisposedError();\n }\n }\n if (portal instanceof ComponentPortal) {\n this._attachedPortal = portal;\n return this.attachComponentPortal(portal);\n }\n else if (portal instanceof TemplatePortal) {\n this._attachedPortal = portal;\n return this.attachTemplatePortal(portal);\n // @breaking-change 10.0.0 remove null check for `this.attachDomPortal`.\n }\n else if (this.attachDomPortal && portal instanceof DomPortal) {\n this._attachedPortal = portal;\n return this.attachDomPortal(portal);\n }\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n throwUnknownPortalTypeError();\n }\n }\n /** Detaches a previously attached portal. */\n detach() {\n if (this._attachedPortal) {\n this._attachedPortal.setAttachedHost(null);\n this._attachedPortal = null;\n }\n this._invokeDisposeFn();\n }\n /** Permanently dispose of this portal host. */\n dispose() {\n if (this.hasAttached()) {\n this.detach();\n }\n this._invokeDisposeFn();\n this._isDisposed = true;\n }\n /** @docs-private */\n setDisposeFn(fn) {\n this._disposeFn = fn;\n }\n _invokeDisposeFn() {\n if (this._disposeFn) {\n this._disposeFn();\n this._disposeFn = null;\n }\n }\n}\n/**\n * @deprecated Use `BasePortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass BasePortalHost extends BasePortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A PortalOutlet for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n */\nclass DomPortalOutlet extends BasePortalOutlet {\n constructor(\n /** Element into which the content is projected. */\n outletElement, _componentFactoryResolver, _appRef, _defaultInjector, \n /**\n * @deprecated `_document` Parameter to be made required.\n * @breaking-change 10.0.0\n */\n _document) {\n super();\n this.outletElement = outletElement;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._appRef = _appRef;\n this._defaultInjector = _defaultInjector;\n /**\n * Attaches a DOM portal by transferring its content into the outlet.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 10.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n element.parentNode.insertBefore(anchorNode, element);\n this.outletElement.appendChild(element);\n super.setDisposeFn(() => {\n // We can't use `replaceWith` here because IE doesn't support it.\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /**\n * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n * @param portal Portal to be attached\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n let componentRef;\n // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n // for the component (in terms of Angular's component tree, not rendering).\n // When the ViewContainerRef is missing, we use the factory to create the component directly\n // and then manually attach the view to the application.\n if (portal.viewContainerRef) {\n componentRef = portal.viewContainerRef.createComponent(componentFactory, portal.viewContainerRef.length, portal.injector || portal.viewContainerRef.injector);\n this.setDisposeFn(() => componentRef.destroy());\n }\n else {\n componentRef = componentFactory.create(portal.injector || this._defaultInjector);\n this._appRef.attachView(componentRef.hostView);\n this.setDisposeFn(() => {\n this._appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n }\n // At this point the component has been instantiated, so we move it to the location in the DOM\n // where we want it to be rendered.\n this.outletElement.appendChild(this._getComponentRootNode(componentRef));\n return componentRef;\n }\n /**\n * Attaches a template portal to the DOM as an embedded view.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n let viewContainer = portal.viewContainerRef;\n let viewRef = viewContainer.createEmbeddedView(portal.templateRef, portal.context);\n // The method `createEmbeddedView` will add the view as a child of the viewContainer.\n // But for the DomPortalOutlet the view can be added everywhere in the DOM\n // (e.g Overlay Container) To move the view to the specified host element. We just\n // re-append the existing root nodes.\n viewRef.rootNodes.forEach(rootNode => this.outletElement.appendChild(rootNode));\n // Note that we want to detect changes after the nodes have been moved so that\n // any directives inside the portal that are looking at the DOM inside a lifecycle\n // hook won't be invoked too early.\n viewRef.detectChanges();\n this.setDisposeFn((() => {\n let index = viewContainer.indexOf(viewRef);\n if (index !== -1) {\n viewContainer.remove(index);\n }\n }));\n // TODO(jelbourn): Return locals from view.\n return viewRef;\n }\n /**\n * Clears out a portal from the DOM.\n */\n dispose() {\n super.dispose();\n if (this.outletElement.parentNode != null) {\n this.outletElement.parentNode.removeChild(this.outletElement);\n }\n }\n /** Gets the root HTMLElement for an instantiated component. */\n _getComponentRootNode(componentRef) {\n return componentRef.hostView.rootNodes[0];\n }\n}\n/**\n * @deprecated Use `DomPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass DomPortalHost extends DomPortalOutlet {\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive version of a `TemplatePortal`. Because the directive *is* a TemplatePortal,\n * the directive instance itself can be attached to a host, enabling declarative use of portals.\n */\nclass CdkPortal extends TemplatePortal {\n constructor(templateRef, viewContainerRef) {\n super(templateRef, viewContainerRef);\n }\n}\nCdkPortal.ɵfac = function CdkPortal_Factory(t) { return new (t || CdkPortal)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nCdkPortal.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkPortal, selectors: [[\"\", \"cdkPortal\", \"\"]], exportAs: [\"cdkPortal\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkPortal.ctorParameters = () => [\n { type: TemplateRef },\n { type: ViewContainerRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkPortal, [{\n type: Directive,\n args: [{\n selector: '[cdkPortal]',\n exportAs: 'cdkPortal'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }, { type: ɵngcc0.ViewContainerRef }]; }, null); })();\n/**\n * @deprecated Use `CdkPortal` instead.\n * @breaking-change 9.0.0\n */\nclass TemplatePortalDirective extends CdkPortal {\n}\nTemplatePortalDirective.ɵfac = function TemplatePortalDirective_Factory(t) { return ɵTemplatePortalDirective_BaseFactory(t || TemplatePortalDirective); };\nTemplatePortalDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplatePortalDirective, selectors: [[\"\", \"cdk-portal\", \"\"], [\"\", \"portal\", \"\"]], exportAs: [\"cdkPortal\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkPortal,\n useExisting: TemplatePortalDirective\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵTemplatePortalDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(TemplatePortalDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplatePortalDirective, [{\n type: Directive,\n args: [{\n selector: '[cdk-portal], [portal]',\n exportAs: 'cdkPortal',\n providers: [{\n provide: CdkPortal,\n useExisting: TemplatePortalDirective\n }]\n }]\n }], null, null); })();\n/**\n * Directive version of a PortalOutlet. Because the directive *is* a PortalOutlet, portals can be\n * directly attached to it, enabling declarative use.\n *\n * Usage:\n * ``\n */\nclass CdkPortalOutlet extends BasePortalOutlet {\n constructor(_componentFactoryResolver, _viewContainerRef, \n /**\n * @deprecated `_document` parameter to be made required.\n * @breaking-change 9.0.0\n */\n _document) {\n super();\n this._componentFactoryResolver = _componentFactoryResolver;\n this._viewContainerRef = _viewContainerRef;\n /** Whether the portal component is initialized. */\n this._isInitialized = false;\n /** Emits when a portal is attached to the outlet. */\n this.attached = new EventEmitter();\n /**\n * Attaches the given DomPortal to this PortalHost by moving all of the portal content into it.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n // @breaking-change 9.0.0 Remove check and error once the\n // `_document` constructor parameter is required.\n if (!this._document && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Cannot attach DOM portal without _document constructor parameter');\n }\n const element = portal.element;\n if (!element.parentNode && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('DOM portal content must be attached to a parent node.');\n }\n // Anchor used to save the element's previous position so\n // that we can restore it when the portal is detached.\n const anchorNode = this._document.createComment('dom-portal');\n portal.setAttachedHost(this);\n element.parentNode.insertBefore(anchorNode, element);\n this._getRootNode().appendChild(element);\n super.setDisposeFn(() => {\n if (anchorNode.parentNode) {\n anchorNode.parentNode.replaceChild(element, anchorNode);\n }\n });\n };\n this._document = _document;\n }\n /** Portal associated with the Portal outlet. */\n get portal() {\n return this._attachedPortal;\n }\n set portal(portal) {\n // Ignore the cases where the `portal` is set to a falsy value before the lifecycle hooks have\n // run. This handles the cases where the user might do something like `
`\n // and attach a portal programmatically in the parent component. When Angular does the first CD\n // round, it will fire the setter with empty string, causing the user's content to be cleared.\n if (this.hasAttached() && !portal && !this._isInitialized) {\n return;\n }\n if (this.hasAttached()) {\n super.detach();\n }\n if (portal) {\n super.attach(portal);\n }\n this._attachedPortal = portal;\n }\n /** Component or view reference that is attached to the portal. */\n get attachedRef() {\n return this._attachedRef;\n }\n ngOnInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n super.dispose();\n this._attachedPortal = null;\n this._attachedRef = null;\n }\n /**\n * Attach the given ComponentPortal to this PortalOutlet using the ComponentFactoryResolver.\n *\n * @param portal Portal to be attached to the portal outlet.\n * @returns Reference to the created component.\n */\n attachComponentPortal(portal) {\n portal.setAttachedHost(this);\n // If the portal specifies an origin, use that as the logical location of the component\n // in the application tree. Otherwise use the location of this PortalOutlet.\n const viewContainerRef = portal.viewContainerRef != null ?\n portal.viewContainerRef :\n this._viewContainerRef;\n const resolver = portal.componentFactoryResolver || this._componentFactoryResolver;\n const componentFactory = resolver.resolveComponentFactory(portal.component);\n const ref = viewContainerRef.createComponent(componentFactory, viewContainerRef.length, portal.injector || viewContainerRef.injector);\n // If we're using a view container that's different from the injected one (e.g. when the portal\n // specifies its own) we need to move the component into the outlet, otherwise it'll be rendered\n // inside of the alternate view container.\n if (viewContainerRef !== this._viewContainerRef) {\n this._getRootNode().appendChild(ref.hostView.rootNodes[0]);\n }\n super.setDisposeFn(() => ref.destroy());\n this._attachedPortal = portal;\n this._attachedRef = ref;\n this.attached.emit(ref);\n return ref;\n }\n /**\n * Attach the given TemplatePortal to this PortalHost as an embedded View.\n * @param portal Portal to be attached.\n * @returns Reference to the created embedded view.\n */\n attachTemplatePortal(portal) {\n portal.setAttachedHost(this);\n const viewRef = this._viewContainerRef.createEmbeddedView(portal.templateRef, portal.context);\n super.setDisposeFn(() => this._viewContainerRef.clear());\n this._attachedPortal = portal;\n this._attachedRef = viewRef;\n this.attached.emit(viewRef);\n return viewRef;\n }\n /** Gets the root node of the portal outlet. */\n _getRootNode() {\n const nativeElement = this._viewContainerRef.element.nativeElement;\n // The directive could be set on a template which will result in a comment\n // node being the root. Use the comment's parent node if that is the case.\n return (nativeElement.nodeType === nativeElement.ELEMENT_NODE ?\n nativeElement : nativeElement.parentNode);\n }\n}\nCdkPortalOutlet.ɵfac = function CdkPortalOutlet_Factory(t) { return new (t || CdkPortalOutlet)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };\nCdkPortalOutlet.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CdkPortalOutlet, selectors: [[\"\", \"cdkPortalOutlet\", \"\"]], inputs: { portal: [\"cdkPortalOutlet\", \"portal\"] }, outputs: { attached: \"attached\" }, exportAs: [\"cdkPortalOutlet\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCdkPortalOutlet.ctorParameters = () => [\n { type: ComponentFactoryResolver },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\nCdkPortalOutlet.propDecorators = {\n attached: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CdkPortalOutlet, [{\n type: Directive,\n args: [{\n selector: '[cdkPortalOutlet]',\n exportAs: 'cdkPortalOutlet',\n inputs: ['portal: cdkPortalOutlet']\n }]\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { attached: [{\n type: Output\n }] }); })();\n/**\n * @deprecated Use `CdkPortalOutlet` instead.\n * @breaking-change 9.0.0\n */\nclass PortalHostDirective extends CdkPortalOutlet {\n}\nPortalHostDirective.ɵfac = function PortalHostDirective_Factory(t) { return ɵPortalHostDirective_BaseFactory(t || PortalHostDirective); };\nPortalHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PortalHostDirective, selectors: [[\"\", \"cdkPortalHost\", \"\"], [\"\", \"portalHost\", \"\"]], inputs: { portal: [\"cdkPortalHost\", \"portal\"] }, exportAs: [\"cdkPortalHost\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective\n }]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵPortalHostDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(PortalHostDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PortalHostDirective, [{\n type: Directive,\n args: [{\n selector: '[cdkPortalHost], [portalHost]',\n exportAs: 'cdkPortalHost',\n inputs: ['portal: cdkPortalHost'],\n providers: [{\n provide: CdkPortalOutlet,\n useExisting: PortalHostDirective\n }]\n }]\n }], null, null); })();\nclass PortalModule {\n}\nPortalModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PortalModule });\nPortalModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PortalModule_Factory(t) { return new (t || PortalModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PortalModule, { declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective], exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PortalModule, [{\n type: NgModule,\n args: [{\n exports: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective],\n declarations: [CdkPortal, CdkPortalOutlet, TemplatePortalDirective, PortalHostDirective]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Custom injector to be used when providing custom\n * injection tokens to components inside a portal.\n * @docs-private\n * @deprecated Use `Injector.create` instead.\n * @breaking-change 11.0.0\n */\nclass PortalInjector {\n constructor(_parentInjector, _customTokens) {\n this._parentInjector = _parentInjector;\n this._customTokens = _customTokens;\n }\n get(token, notFoundValue) {\n const value = this._customTokens.get(token);\n if (typeof value !== 'undefined') {\n return value;\n }\n return this._parentInjector.get(token, notFoundValue);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BasePortalHost, BasePortalOutlet, CdkPortal, CdkPortalOutlet, ComponentPortal, DomPortal, DomPortalHost, DomPortalOutlet, Portal, PortalHostDirective, PortalInjector, PortalModule, TemplatePortal, TemplatePortalDirective };\n\n//# sourceMappingURL=portal.js.map","import { __assign, __values, __read, __awaiter, __generator, __spread } from 'tslib';\nimport { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nvar Component = /** @class */ (function () {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n function Component(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* LAZY */;\r\n }\r\n Component.prototype.setInstantiationMode = function (mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n };\r\n Component.prototype.setMultipleInstances = function (multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n };\r\n Component.prototype.setServiceProps = function (props) {\r\n this.serviceProps = props;\r\n return this;\r\n };\r\n return Component;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nvar Provider = /** @class */ (function () {\r\n function Provider(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide mulitple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n Provider.prototype.get = function (identifier) {\r\n if (identifier === void 0) { identifier = DEFAULT_ENTRY_NAME; }\r\n // if multipleInstances is not supported, use the default name\r\n var normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n var deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n // If the service instance is available, resolve the promise with it immediately\r\n try {\r\n var instance = this.getOrInitializeService(normalizedIdentifier);\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n };\r\n Provider.prototype.getImmediate = function (options) {\r\n var _a = __assign({ identifier: DEFAULT_ENTRY_NAME, optional: false }, options), identifier = _a.identifier, optional = _a.optional;\r\n // if multipleInstances is not supported, use the default name\r\n var normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n try {\r\n var instance = this.getOrInitializeService(normalizedIdentifier);\r\n if (!instance) {\r\n if (optional) {\r\n return null;\r\n }\r\n throw Error(\"Service \" + this.name + \" is not available\");\r\n }\r\n return instance;\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n };\r\n Provider.prototype.getComponent = function () {\r\n return this.component;\r\n };\r\n Provider.prototype.setComponent = function (component) {\r\n var e_1, _a;\r\n if (component.name !== this.name) {\r\n throw Error(\"Mismatching Component \" + component.name + \" for Provider \" + this.name + \".\");\r\n }\r\n if (this.component) {\r\n throw Error(\"Component for \" + this.name + \" has already been provided\");\r\n }\r\n this.component = component;\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService(DEFAULT_ENTRY_NAME);\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n try {\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (var _b = __values(this.instancesDeferred.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var _d = __read(_c.value, 2), instanceIdentifier = _d[0], instanceDeferred = _d[1];\r\n var normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n var instance = this.getOrInitializeService(normalizedIdentifier);\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n };\r\n Provider.prototype.clearInstance = function (identifier) {\r\n if (identifier === void 0) { identifier = DEFAULT_ENTRY_NAME; }\r\n this.instancesDeferred.delete(identifier);\r\n this.instances.delete(identifier);\r\n };\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n Provider.prototype.delete = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var services;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n services = Array.from(this.instances.values());\r\n return [4 /*yield*/, Promise.all(__spread(services\r\n .filter(function (service) { return 'INTERNAL' in service; }) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(function (service) { return service.INTERNAL.delete(); }), services\r\n .filter(function (service) { return '_delete' in service; }) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(function (service) { return service._delete(); })))];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Provider.prototype.isComponentSet = function () {\r\n return this.component != null;\r\n };\r\n Provider.prototype.getOrInitializeService = function (identifier) {\r\n var instance = this.instances.get(identifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, normalizeIdentifierForFactory(identifier));\r\n this.instances.set(identifier, instance);\r\n }\r\n return instance || null;\r\n };\r\n Provider.prototype.normalizeInstanceIdentifier = function (identifier) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n };\r\n return Provider;\r\n}());\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nvar ComponentContainer = /** @class */ (function () {\r\n function ComponentContainer(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n ComponentContainer.prototype.addComponent = function (component) {\r\n var provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(\"Component \" + component.name + \" has already been registered with \" + this.name);\r\n }\r\n provider.setComponent(component);\r\n };\r\n ComponentContainer.prototype.addOrOverwriteComponent = function (component) {\r\n var provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n };\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n ComponentContainer.prototype.getProvider = function (name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n var provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n };\r\n ComponentContainer.prototype.getProviders = function () {\r\n return Array.from(this.providers.values());\r\n };\r\n return ComponentContainer;\r\n}());\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm.js.map\n","function matchUserAgent(userAgent) {\n const browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n\n let browser;\n\n for (let agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n const match = userAgent.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n break;\n }\n }\n }\n\n return browser;\n}\n\nlet browser = {};\n\nconst support = {\n get browser() {\n if (typeof window === 'undefined' || browser) {\n return browser;\n }\n\n browser = matchUserAgent(window.navigator.userAgent);\n return browser;\n }\n};\n\nexport default support;\n","import { Subscriber } from '../Subscriber';\nexport function distinctUntilChanged(compare, keySelector) {\n return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector));\n}\nclass DistinctUntilChangedOperator {\n constructor(compare, keySelector) {\n this.compare = compare;\n this.keySelector = keySelector;\n }\n call(subscriber, source) {\n return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n }\n}\nclass DistinctUntilChangedSubscriber extends Subscriber {\n constructor(destination, compare, keySelector) {\n super(destination);\n this.keySelector = keySelector;\n this.hasKey = false;\n if (typeof compare === 'function') {\n this.compare = compare;\n }\n }\n compare(x, y) {\n return x === y;\n }\n _next(value) {\n let key;\n try {\n const { keySelector } = this;\n key = keySelector ? keySelector(value) : value;\n }\n catch (err) {\n return this.destination.error(err);\n }\n let result = false;\n if (this.hasKey) {\n try {\n const { compare } = this;\n result = compare(this.key, key);\n }\n catch (err) {\n return this.destination.error(err);\n }\n }\n else {\n this.hasKey = true;\n }\n if (!result) {\n this.key = key;\n this.destination.next(value);\n }\n }\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { defined } from '../../util';\n\nexport default function renderAttr(name, value) {\n return (defined(value) && value !== null) ? ` ${ name }=\"${ value }\" ` : \"\";\n}","\nimport alignElements from './align-elements';\n\nexport default function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, \"x\", \"width\");\n}","import { isObservable, of, Subject } from 'rxjs';\nimport { ɵɵdefineInjectable, Injectable, InjectionToken } from '@angular/core';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nclass DataSource {\n}\n/** Checks whether an object is a data source. */\nfunction isDataSource(value) {\n // Check if the value is a DataSource by observing if it has a connect function. Cannot\n // be checked as an `instanceof DataSource` since people could create their own sources\n // that match the interface, but don't extend DataSource.\n return value && typeof value.connect === 'function';\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** DataSource wrapper for a native array. */\nclass ArrayDataSource extends DataSource {\n constructor(_data) {\n super();\n this._data = _data;\n }\n connect() {\n return isObservable(this._data) ? this._data : of(this._data);\n }\n disconnect() { }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A repeater that destroys views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will always construct a new embedded view for each item.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _DisposeViewRepeaterStrategy {\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) {\n const insertContext = itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = viewContainerRef.createEmbeddedView(insertContext.templateRef, insertContext.context, insertContext.index);\n operation = 1 /* INSERTED */;\n }\n else if (currentIndex == null) {\n viewContainerRef.remove(adjustedPreviousIndex);\n operation = 3 /* REMOVED */;\n }\n else {\n view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n operation = 2 /* MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view === null || view === void 0 ? void 0 : view.context,\n operation,\n record,\n });\n }\n });\n }\n detach() {\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A repeater that caches views when they are removed from a\n * {@link ViewContainerRef}. When new items are inserted into the container,\n * the repeater will reuse one of the cached views instead of creating a new\n * embedded view. Recycling cached views reduces the quantity of expensive DOM\n * inserts.\n *\n * @template T The type for the embedded view's $implicit property.\n * @template R The type for the item in each IterableDiffer change record.\n * @template C The type for the context passed to each embedded view.\n */\nclass _RecycleViewRepeaterStrategy {\n constructor() {\n /**\n * The size of the cache used to store unused views.\n * Setting the cache size to `0` will disable caching. Defaults to 20 views.\n */\n this.viewCacheSize = 20;\n /**\n * View cache that stores embedded view instances that have been previously stamped out,\n * but don't are not currently rendered. The view repeater will reuse these views rather than\n * creating brand new ones.\n *\n * TODO(michaeljamesparsons) Investigate whether using a linked list would improve performance.\n */\n this._viewCache = [];\n }\n /** Apply changes to the DOM. */\n applyChanges(changes, viewContainerRef, itemContextFactory, itemValueResolver, itemViewChanged) {\n // Rearrange the views to put them in the right location.\n changes.forEachOperation((record, adjustedPreviousIndex, currentIndex) => {\n let view;\n let operation;\n if (record.previousIndex == null) { // Item added.\n const viewArgsFactory = () => itemContextFactory(record, adjustedPreviousIndex, currentIndex);\n view = this._insertView(viewArgsFactory, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = view ? 1 /* INSERTED */ : 0 /* REPLACED */;\n }\n else if (currentIndex == null) { // Item removed.\n this._detachAndCacheView(adjustedPreviousIndex, viewContainerRef);\n operation = 3 /* REMOVED */;\n }\n else { // Item moved.\n view = this._moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, itemValueResolver(record));\n operation = 2 /* MOVED */;\n }\n if (itemViewChanged) {\n itemViewChanged({\n context: view === null || view === void 0 ? void 0 : view.context,\n operation,\n record,\n });\n }\n });\n }\n detach() {\n for (const view of this._viewCache) {\n view.destroy();\n }\n }\n /**\n * Inserts a view for a new item, either from the cache or by creating a new\n * one. Returns `undefined` if the item was inserted into a cached view.\n */\n _insertView(viewArgsFactory, currentIndex, viewContainerRef, value) {\n let cachedView = this._insertViewFromCache(currentIndex, viewContainerRef);\n if (cachedView) {\n cachedView.context.$implicit = value;\n return undefined;\n }\n const viewArgs = viewArgsFactory();\n return viewContainerRef.createEmbeddedView(viewArgs.templateRef, viewArgs.context, viewArgs.index);\n }\n /** Detaches the view at the given index and inserts into the view cache. */\n _detachAndCacheView(index, viewContainerRef) {\n const detachedView = this._detachView(index, viewContainerRef);\n this._maybeCacheView(detachedView, viewContainerRef);\n }\n /** Moves view at the previous index to the current index. */\n _moveView(adjustedPreviousIndex, currentIndex, viewContainerRef, value) {\n const view = viewContainerRef.get(adjustedPreviousIndex);\n viewContainerRef.move(view, currentIndex);\n view.context.$implicit = value;\n return view;\n }\n /**\n * Cache the given detached view. If the cache is full, the view will be\n * destroyed.\n */\n _maybeCacheView(view, viewContainerRef) {\n if (this._viewCache.length < this.viewCacheSize) {\n this._viewCache.push(view);\n }\n else {\n const index = viewContainerRef.indexOf(view);\n // The host component could remove views from the container outside of\n // the view repeater. It's unlikely this will occur, but just in case,\n // destroy the view on its own, otherwise destroy it through the\n // container to ensure that all the references are removed.\n if (index === -1) {\n view.destroy();\n }\n else {\n viewContainerRef.remove(index);\n }\n }\n }\n /** Inserts a recycled view from the cache at the given index. */\n _insertViewFromCache(index, viewContainerRef) {\n const cachedView = this._viewCache.pop();\n if (cachedView) {\n viewContainerRef.insert(cachedView, index);\n }\n return cachedView || null;\n }\n /** Detaches the embedded view at the given index. */\n _detachView(index, viewContainerRef) {\n return viewContainerRef.detach(index);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class to be used to power selecting one or more options from a list.\n */\nclass SelectionModel {\n constructor(_multiple = false, initiallySelectedValues, _emitChanges = true) {\n this._multiple = _multiple;\n this._emitChanges = _emitChanges;\n /** Currently-selected values. */\n this._selection = new Set();\n /** Keeps track of the deselected options that haven't been emitted by the change event. */\n this._deselectedToEmit = [];\n /** Keeps track of the selected options that haven't been emitted by the change event. */\n this._selectedToEmit = [];\n /** Event emitted when the value has changed. */\n this.changed = new Subject();\n if (initiallySelectedValues && initiallySelectedValues.length) {\n if (_multiple) {\n initiallySelectedValues.forEach(value => this._markSelected(value));\n }\n else {\n this._markSelected(initiallySelectedValues[0]);\n }\n // Clear the array in order to avoid firing the change event for preselected values.\n this._selectedToEmit.length = 0;\n }\n }\n /** Selected values. */\n get selected() {\n if (!this._selected) {\n this._selected = Array.from(this._selection.values());\n }\n return this._selected;\n }\n /**\n * Selects a value or an array of values.\n */\n select(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._markSelected(value));\n this._emitChangeEvent();\n }\n /**\n * Deselects a value or an array of values.\n */\n deselect(...values) {\n this._verifyValueAssignment(values);\n values.forEach(value => this._unmarkSelected(value));\n this._emitChangeEvent();\n }\n /**\n * Toggles a value between selected and deselected.\n */\n toggle(value) {\n this.isSelected(value) ? this.deselect(value) : this.select(value);\n }\n /**\n * Clears all of the selected values.\n */\n clear() {\n this._unmarkAll();\n this._emitChangeEvent();\n }\n /**\n * Determines whether a value is selected.\n */\n isSelected(value) {\n return this._selection.has(value);\n }\n /**\n * Determines whether the model does not have a value.\n */\n isEmpty() {\n return this._selection.size === 0;\n }\n /**\n * Determines whether the model has a value.\n */\n hasValue() {\n return !this.isEmpty();\n }\n /**\n * Sorts the selected values based on a predicate function.\n */\n sort(predicate) {\n if (this._multiple && this.selected) {\n this._selected.sort(predicate);\n }\n }\n /**\n * Gets whether multiple values can be selected.\n */\n isMultipleSelection() {\n return this._multiple;\n }\n /** Emits a change event and clears the records of selected and deselected values. */\n _emitChangeEvent() {\n // Clear the selected values so they can be re-cached.\n this._selected = null;\n if (this._selectedToEmit.length || this._deselectedToEmit.length) {\n this.changed.next({\n source: this,\n added: this._selectedToEmit,\n removed: this._deselectedToEmit\n });\n this._deselectedToEmit = [];\n this._selectedToEmit = [];\n }\n }\n /** Selects a value. */\n _markSelected(value) {\n if (!this.isSelected(value)) {\n if (!this._multiple) {\n this._unmarkAll();\n }\n this._selection.add(value);\n if (this._emitChanges) {\n this._selectedToEmit.push(value);\n }\n }\n }\n /** Deselects a value. */\n _unmarkSelected(value) {\n if (this.isSelected(value)) {\n this._selection.delete(value);\n if (this._emitChanges) {\n this._deselectedToEmit.push(value);\n }\n }\n }\n /** Clears out the selected values. */\n _unmarkAll() {\n if (!this.isEmpty()) {\n this._selection.forEach(value => this._unmarkSelected(value));\n }\n }\n /**\n * Verifies the value assignment and throws an error if the specified value array is\n * including multiple values while the selection model is not supporting multiple values.\n */\n _verifyValueAssignment(values) {\n if (values.length > 1 && !this._multiple && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMultipleValuesInSingleSelectionError();\n }\n }\n}\n/**\n * Returns an error that reports that multiple values are passed into a selection model\n * with a single value.\n * @docs-private\n */\nfunction getMultipleValuesInSingleSelectionError() {\n return Error('Cannot pass multiple values into SelectionModel with single-value mode.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class to coordinate unique selection based on name.\n * Intended to be consumed as an Angular service.\n * This service is needed because native radio change events are only fired on the item currently\n * being selected, and we still need to uncheck the previous selection.\n *\n * This service does not *store* any IDs and names because they may change at any time, so it is\n * less error-prone if they are simply passed through when the events occur.\n */\nclass UniqueSelectionDispatcher {\n constructor() {\n this._listeners = [];\n }\n /**\n * Notify other items that selection for the given name has been set.\n * @param id ID of the item.\n * @param name Name of the item.\n */\n notify(id, name) {\n for (let listener of this._listeners) {\n listener(id, name);\n }\n }\n /**\n * Listen for future changes to item selection.\n * @return Function used to deregister listener\n */\n listen(listener) {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter((registered) => {\n return listener !== registered;\n });\n };\n }\n ngOnDestroy() {\n this._listeners = [];\n }\n}\nUniqueSelectionDispatcher.ɵfac = function UniqueSelectionDispatcher_Factory(t) { return new (t || UniqueSelectionDispatcher)(); };\nUniqueSelectionDispatcher.ɵprov = ɵɵdefineInjectable({ factory: function UniqueSelectionDispatcher_Factory() { return new UniqueSelectionDispatcher(); }, token: UniqueSelectionDispatcher, providedIn: \"root\" });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(UniqueSelectionDispatcher, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token for {@link _ViewRepeater}. This token is for use by Angular Material only.\n * @docs-private\n */\nconst _VIEW_REPEATER_STRATEGY = new InjectionToken('_ViewRepeater');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ArrayDataSource, DataSource, SelectionModel, UniqueSelectionDispatcher, _DisposeViewRepeaterStrategy, _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY, getMultipleValuesInSingleSelectionError, isDataSource };\n\n//# sourceMappingURL=collections.js.map","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map","import { Overlay, OverlayConfig, OverlayContainer, OverlayModule } from '@angular/cdk/overlay';\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { EventEmitter, Directive, ElementRef, ChangeDetectorRef, Optional, Inject, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, InjectionToken, Injector, TemplateRef, Type, Injectable, SkipSelf, Input, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { DOCUMENT, Location } from '@angular/common';\nimport { Subject, defer, of } from 'rxjs';\nimport { filter, take, startWith } from 'rxjs/operators';\nimport { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Configuration for opening a modal dialog with the MatDialog service.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/cdk/portal';\nimport * as ɵngcc3 from '@angular/cdk/overlay';\nimport * as ɵngcc4 from '@angular/common';\n\nfunction MatDialogContainer_ng_template_0_Template(rf, ctx) { }\nclass MatDialogConfig {\n constructor() {\n /** The ARIA role of the dialog element. */\n this.role = 'dialog';\n /** Custom class for the overlay pane. */\n this.panelClass = '';\n /** Whether the dialog has a backdrop. */\n this.hasBackdrop = true;\n /** Custom class for the backdrop. */\n this.backdropClass = '';\n /** Whether the user can use escape or clicking on the backdrop to close the modal. */\n this.disableClose = false;\n /** Width of the dialog. */\n this.width = '';\n /** Height of the dialog. */\n this.height = '';\n /** Max-width of the dialog. If a number is provided, assumes pixel units. Defaults to 80vw. */\n this.maxWidth = '80vw';\n /** Data being injected into the child component. */\n this.data = null;\n /** ID of the element that describes the dialog. */\n this.ariaDescribedBy = null;\n /** ID of the element that labels the dialog. */\n this.ariaLabelledBy = null;\n /** Aria label to assign to the dialog element. */\n this.ariaLabel = null;\n /** Whether the dialog should focus the first focusable element on open. */\n this.autoFocus = true;\n /**\n * Whether the dialog should restore focus to the\n * previously-focused element, after it's closed.\n */\n this.restoreFocus = true;\n /**\n * Whether the dialog should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.closeOnNavigation = true;\n // TODO(jelbourn): add configuration for lifecycle hooks, ARIA labelling.\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nconst matDialogAnimations = {\n /** Animation that is applied on the dialog container by default. */\n dialogContainer: trigger('dialogContainer', [\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues.\n state('void, exit', style({ opacity: 0, transform: 'scale(0.7)' })),\n state('enter', style({ transform: 'none' })),\n transition('* => enter', animate('150ms cubic-bezier(0, 0, 0.2, 1)', style({ transform: 'none', opacity: 1 }))),\n transition('* => void, * => exit', animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ opacity: 0 }))),\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Throws an exception for the case when a ComponentPortal is\n * attached to a DomPortalOutlet without an origin.\n * @docs-private\n */\nfunction throwMatDialogContentAlreadyAttachedError() {\n throw Error('Attempting to attach dialog content after content is already attached');\n}\n/**\n * Base class for the `MatDialogContainer`. The base class does not implement\n * animations as these are left to implementers of the dialog container.\n */\nclass _MatDialogContainerBase extends BasePortalOutlet {\n constructor(_elementRef, _focusTrapFactory, _changeDetectorRef, _document, \n /** The dialog configuration. */\n _config, _focusMonitor) {\n super();\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._changeDetectorRef = _changeDetectorRef;\n this._config = _config;\n this._focusMonitor = _focusMonitor;\n /** Emits when an animation state changes. */\n this._animationStateChanged = new EventEmitter();\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n this._elementFocusedBeforeDialogWasOpened = null;\n /**\n * Type of interaction that led to the dialog being closed. This is used to determine\n * whether the focus style will be applied when returning focus to its original location\n * after the dialog is closed.\n */\n this._closeInteractionType = null;\n /**\n * Attaches a DOM portal to the dialog container.\n * @param portal Portal to be attached.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDialogContentAlreadyAttachedError();\n }\n return this._portalOutlet.attachDomPortal(portal);\n };\n this._ariaLabelledBy = _config.ariaLabelledBy || null;\n this._document = _document;\n }\n /** Initializes the dialog container with the attached content. */\n _initializeWithAttachedContent() {\n this._setupFocusTrap();\n // Save the previously focused element. This element will be re-focused\n // when the dialog closes.\n this._capturePreviouslyFocusedElement();\n // Move focus onto the dialog immediately in order to prevent the user\n // from accidentally opening multiple dialogs at the same time.\n this._focusDialogContainer();\n }\n /**\n * Attach a ComponentPortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachComponentPortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDialogContentAlreadyAttachedError();\n }\n return this._portalOutlet.attachComponentPortal(portal);\n }\n /**\n * Attach a TemplatePortal as content to this dialog container.\n * @param portal Portal to be attached as the dialog content.\n */\n attachTemplatePortal(portal) {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDialogContentAlreadyAttachedError();\n }\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n /** Moves focus back into the dialog if it was moved out. */\n _recaptureFocus() {\n if (!this._containsFocus()) {\n const focusContainer = !this._config.autoFocus || !this._focusTrap.focusInitialElement();\n if (focusContainer) {\n this._elementRef.nativeElement.focus();\n }\n }\n }\n /** Moves the focus inside the focus trap. */\n _trapFocus() {\n // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait for the microtask queue to be empty.\n if (this._config.autoFocus) {\n this._focusTrap.focusInitialElementWhenReady();\n }\n else if (!this._containsFocus()) {\n // Otherwise ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n this._elementRef.nativeElement.focus();\n }\n }\n /** Restores focus to the element that was focused before the dialog opened. */\n _restoreFocus() {\n const previousElement = this._elementFocusedBeforeDialogWasOpened;\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this._config.restoreFocus && previousElement &&\n typeof previousElement.focus === 'function') {\n const activeElement = this._document.activeElement;\n const element = this._elementRef.nativeElement;\n // Make sure that focus is still inside the dialog or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (!activeElement || activeElement === this._document.body || activeElement === element ||\n element.contains(activeElement)) {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(previousElement, this._closeInteractionType);\n this._closeInteractionType = null;\n }\n else {\n previousElement.focus();\n }\n }\n }\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n /** Sets up the focus trap. */\n _setupFocusTrap() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n }\n /** Captures the element that was focused before the dialog was opened. */\n _capturePreviouslyFocusedElement() {\n if (this._document) {\n this._elementFocusedBeforeDialogWasOpened = this._document.activeElement;\n }\n }\n /** Focuses the dialog container. */\n _focusDialogContainer() {\n // Note that there is no focus method when rendering on the server.\n if (this._elementRef.nativeElement.focus) {\n this._elementRef.nativeElement.focus();\n }\n }\n /** Returns whether focus is inside the dialog. */\n _containsFocus() {\n const element = this._elementRef.nativeElement;\n const activeElement = this._document.activeElement;\n return element === activeElement || element.contains(activeElement);\n }\n}\n_MatDialogContainerBase.ɵfac = function _MatDialogContainerBase_Factory(t) { return new (t || _MatDialogContainerBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MatDialogConfig), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor)); };\n_MatDialogContainerBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatDialogContainerBase, viewQuery: function _MatDialogContainerBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(CdkPortalOutlet, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n_MatDialogContainerBase.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusTrapFactory },\n { type: ChangeDetectorRef },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDialogConfig },\n { type: FocusMonitor }\n];\n_MatDialogContainerBase.propDecorators = {\n _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatDialogContainerBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusTrapFactory }, { type: ɵngcc0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDialogConfig }, { type: ɵngcc1.FocusMonitor }]; }, { _portalOutlet: [{\n type: ViewChild,\n args: [CdkPortalOutlet, { static: true }]\n }] }); })();\n/**\n * Internal component that wraps user-provided dialog content.\n * Animation is based on https://material.io/guidelines/motion/choreography.html.\n * @docs-private\n */\nclass MatDialogContainer extends _MatDialogContainerBase {\n constructor() {\n super(...arguments);\n /** State of the dialog animation. */\n this._state = 'enter';\n }\n /** Callback, invoked whenever an animation on the host completes. */\n _onAnimationDone({ toState, totalTime }) {\n if (toState === 'enter') {\n this._trapFocus();\n this._animationStateChanged.next({ state: 'opened', totalTime });\n }\n else if (toState === 'exit') {\n this._restoreFocus();\n this._animationStateChanged.next({ state: 'closed', totalTime });\n }\n }\n /** Callback, invoked when an animation on the host starts. */\n _onAnimationStart({ toState, totalTime }) {\n if (toState === 'enter') {\n this._animationStateChanged.next({ state: 'opening', totalTime });\n }\n else if (toState === 'exit' || toState === 'void') {\n this._animationStateChanged.next({ state: 'closing', totalTime });\n }\n }\n /** Starts the dialog exit animation. */\n _startExitAnimation() {\n this._state = 'exit';\n // Mark the container for check so it can react if the\n // view container is using OnPush change detection.\n this._changeDetectorRef.markForCheck();\n }\n}\nMatDialogContainer.ɵfac = function MatDialogContainer_Factory(t) { return ɵMatDialogContainer_BaseFactory(t || MatDialogContainer); };\nMatDialogContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDialogContainer, selectors: [[\"mat-dialog-container\"]], hostAttrs: [\"tabindex\", \"-1\", \"aria-modal\", \"true\", 1, \"mat-dialog-container\"], hostVars: 6, hostBindings: function MatDialogContainer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@dialogContainer.start\", function MatDialogContainer_animation_dialogContainer_start_HostBindingHandler($event) { return ctx._onAnimationStart($event); })(\"@dialogContainer.done\", function MatDialogContainer_animation_dialogContainer_done_HostBindingHandler($event) { return ctx._onAnimationDone($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx._id);\n ɵngcc0.ɵɵattribute(\"role\", ctx._config.role)(\"aria-labelledby\", ctx._config.ariaLabel ? null : ctx._ariaLabelledBy)(\"aria-label\", ctx._config.ariaLabel)(\"aria-describedby\", ctx._config.ariaDescribedBy || null);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@dialogContainer\", ctx._state);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 0, consts: [[\"cdkPortalOutlet\", \"\"]], template: function MatDialogContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MatDialogContainer_ng_template_0_Template, 0, 0, \"ng-template\", 0);\n } }, directives: [ɵngcc2.CdkPortalOutlet], styles: [\".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}.cdk-high-contrast-active .mat-dialog-container{outline:solid 1px}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;box-sizing:content-box;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base,.mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"], encapsulation: 2, data: { animation: [matDialogAnimations.dialogContainer] } });\nconst ɵMatDialogContainer_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatDialogContainer);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogContainer, [{\n type: Component,\n args: [{\n selector: 'mat-dialog-container',\n template: \"\\n\",\n encapsulation: ViewEncapsulation.None,\n // Using OnPush for dialogs caused some G3 sync issues. Disabled until we can track them down.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [matDialogAnimations.dialogContainer],\n host: {\n 'class': 'mat-dialog-container',\n 'tabindex': '-1',\n 'aria-modal': 'true',\n '[id]': '_id',\n '[attr.role]': '_config.role',\n '[attr.aria-labelledby]': '_config.ariaLabel ? null : _ariaLabelledBy',\n '[attr.aria-label]': '_config.ariaLabel',\n '[attr.aria-describedby]': '_config.ariaDescribedBy || null',\n '[@dialogContainer]': '_state',\n '(@dialogContainer.start)': '_onAnimationStart($event)',\n '(@dialogContainer.done)': '_onAnimationDone($event)'\n },\n styles: [\".mat-dialog-container{display:block;padding:24px;border-radius:4px;box-sizing:border-box;overflow:auto;outline:0;width:100%;height:100%;min-height:inherit;max-height:inherit}.cdk-high-contrast-active .mat-dialog-container{outline:solid 1px}.mat-dialog-content{display:block;margin:0 -24px;padding:0 24px;max-height:65vh;overflow:auto;-webkit-overflow-scrolling:touch}.mat-dialog-title{margin:0 0 20px;display:block}.mat-dialog-actions{padding:8px 0;display:flex;flex-wrap:wrap;min-height:52px;align-items:center;box-sizing:content-box;margin-bottom:-24px}.mat-dialog-actions[align=end]{justify-content:flex-end}.mat-dialog-actions[align=center]{justify-content:center}.mat-dialog-actions .mat-button-base+.mat-button-base,.mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}\\n\"]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(jelbourn): resizing\n// Counter for unique dialog ids.\nlet uniqueId = 0;\n/**\n * Reference to a dialog opened via the MatDialog service.\n */\nclass MatDialogRef {\n constructor(_overlayRef, _containerInstance, id = `mat-dialog-${uniqueId++}`) {\n this._overlayRef = _overlayRef;\n this._containerInstance = _containerInstance;\n this.id = id;\n /** Whether the user is allowed to close the dialog. */\n this.disableClose = this._containerInstance._config.disableClose;\n /** Subject for notifying the user that the dialog has finished opening. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the dialog has finished closing. */\n this._afterClosed = new Subject();\n /** Subject for notifying the user that the dialog has started closing. */\n this._beforeClosed = new Subject();\n /** Current state of the dialog. */\n this._state = 0 /* OPEN */;\n // Pass the id along to the container.\n _containerInstance._id = id;\n // Emit when opening animation completes\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'opened'), take(1))\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n // Dispose overlay when closing animation is complete\n _containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closed'), take(1)).subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n this._finishDialogClose();\n });\n _overlayRef.detachments().subscribe(() => {\n this._beforeClosed.next(this._result);\n this._beforeClosed.complete();\n this._afterClosed.next(this._result);\n this._afterClosed.complete();\n this.componentInstance = null;\n this._overlayRef.dispose();\n });\n _overlayRef.keydownEvents()\n .pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }))\n .subscribe(event => {\n event.preventDefault();\n _closeDialogVia(this, 'keyboard');\n });\n _overlayRef.backdropClick().subscribe(() => {\n if (this.disableClose) {\n this._containerInstance._recaptureFocus();\n }\n else {\n _closeDialogVia(this, 'mouse');\n }\n });\n }\n /**\n * Close the dialog.\n * @param dialogResult Optional result to return to the dialog opener.\n */\n close(dialogResult) {\n this._result = dialogResult;\n // Transition the backdrop in parallel to the dialog.\n this._containerInstance._animationStateChanged.pipe(filter(event => event.state === 'closing'), take(1))\n .subscribe(event => {\n this._beforeClosed.next(dialogResult);\n this._beforeClosed.complete();\n this._overlayRef.detachBackdrop();\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has the chance to fire.\n this._closeFallbackTimeout = setTimeout(() => this._finishDialogClose(), event.totalTime + 100);\n });\n this._state = 1 /* CLOSING */;\n this._containerInstance._startExitAnimation();\n }\n /**\n * Gets an observable that is notified when the dialog is finished opening.\n */\n afterOpened() {\n return this._afterOpened;\n }\n /**\n * Gets an observable that is notified when the dialog is finished closing.\n */\n afterClosed() {\n return this._afterClosed;\n }\n /**\n * Gets an observable that is notified when the dialog has started closing.\n */\n beforeClosed() {\n return this._beforeClosed;\n }\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._overlayRef.backdropClick();\n }\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._overlayRef.keydownEvents();\n }\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position) {\n let strategy = this._getPositionStrategy();\n if (position && (position.left || position.right)) {\n position.left ? strategy.left(position.left) : strategy.right(position.right);\n }\n else {\n strategy.centerHorizontally();\n }\n if (position && (position.top || position.bottom)) {\n position.top ? strategy.top(position.top) : strategy.bottom(position.bottom);\n }\n else {\n strategy.centerVertically();\n }\n this._overlayRef.updatePosition();\n return this;\n }\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSize(width = '', height = '') {\n this._getPositionStrategy().width(width).height(height);\n this._overlayRef.updatePosition();\n return this;\n }\n /** Add a CSS class or an array of classes to the overlay pane. */\n addPanelClass(classes) {\n this._overlayRef.addPanelClass(classes);\n return this;\n }\n /** Remove a CSS class or an array of classes from the overlay pane. */\n removePanelClass(classes) {\n this._overlayRef.removePanelClass(classes);\n return this;\n }\n /** Gets the current state of the dialog's lifecycle. */\n getState() {\n return this._state;\n }\n /**\n * Finishes the dialog close by updating the state of the dialog\n * and disposing the overlay.\n */\n _finishDialogClose() {\n this._state = 2 /* CLOSED */;\n this._overlayRef.dispose();\n }\n /** Fetches the position strategy object from the overlay ref. */\n _getPositionStrategy() {\n return this._overlayRef.getConfig().positionStrategy;\n }\n}\n/**\n * Closes the dialog with the specified interaction type. This is currently not part of\n * `MatDialogRef` as that would conflict with custom dialog ref mocks provided in tests.\n * More details. See: https://github.com/angular/components/pull/9257#issuecomment-651342226.\n */\n// TODO: TODO: Move this back into `MatDialogRef` when we provide an official mock dialog ref.\nfunction _closeDialogVia(ref, interactionType, result) {\n // Some mock dialog ref instances in tests do not have the `_containerInstance` property.\n // For those, we keep the behavior as is and do not deal with the interaction type.\n if (ref._containerInstance !== undefined) {\n ref._containerInstance._closeInteractionType = interactionType;\n }\n return ref.close(result);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to access the data that was passed in to a dialog. */\nconst MAT_DIALOG_DATA = new InjectionToken('MatDialogData');\n/** Injection token that can be used to specify default dialog options. */\nconst MAT_DIALOG_DEFAULT_OPTIONS = new InjectionToken('mat-dialog-default-options');\n/** Injection token that determines the scroll handling while the dialog is open. */\nconst MAT_DIALOG_SCROLL_STRATEGY = new InjectionToken('mat-dialog-scroll-strategy');\n/** @docs-private */\nfunction MAT_DIALOG_SCROLL_STRATEGY_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/** @docs-private */\nfunction MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.block();\n}\n/** @docs-private */\nconst MAT_DIALOG_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_DIALOG_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/**\n * Base class for dialog services. The base dialog service allows\n * for arbitrary dialog refs and dialog container components.\n */\nclass _MatDialogBase {\n constructor(_overlay, _injector, _defaultOptions, _parentDialog, _overlayContainer, scrollStrategy, _dialogRefConstructor, _dialogContainerType, _dialogDataToken) {\n this._overlay = _overlay;\n this._injector = _injector;\n this._defaultOptions = _defaultOptions;\n this._parentDialog = _parentDialog;\n this._overlayContainer = _overlayContainer;\n this._dialogRefConstructor = _dialogRefConstructor;\n this._dialogContainerType = _dialogContainerType;\n this._dialogDataToken = _dialogDataToken;\n this._openDialogsAtThisLevel = [];\n this._afterAllClosedAtThisLevel = new Subject();\n this._afterOpenedAtThisLevel = new Subject();\n this._ariaHiddenElements = new Map();\n // TODO (jelbourn): tighten the typing right-hand side of this expression.\n /**\n * Stream that emits when all open dialog have finished closing.\n * Will emit on subscribe if there are no open dialogs to begin with.\n */\n this.afterAllClosed = defer(() => this.openDialogs.length ?\n this._getAfterAllClosed() :\n this._getAfterAllClosed().pipe(startWith(undefined)));\n this._scrollStrategy = scrollStrategy;\n }\n /** Keeps track of the currently-open dialogs. */\n get openDialogs() {\n return this._parentDialog ? this._parentDialog.openDialogs : this._openDialogsAtThisLevel;\n }\n /** Stream that emits when a dialog has been opened. */\n get afterOpened() {\n return this._parentDialog ? this._parentDialog.afterOpened : this._afterOpenedAtThisLevel;\n }\n _getAfterAllClosed() {\n const parent = this._parentDialog;\n return parent ? parent._getAfterAllClosed() : this._afterAllClosedAtThisLevel;\n }\n open(componentOrTemplateRef, config) {\n config = _applyConfigDefaults(config, this._defaultOptions || new MatDialogConfig());\n if (config.id && this.getDialogById(config.id) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`);\n }\n const overlayRef = this._createOverlay(config);\n const dialogContainer = this._attachDialogContainer(overlayRef, config);\n const dialogRef = this._attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);\n // If this is the first dialog that we're opening, hide all the non-overlay content.\n if (!this.openDialogs.length) {\n this._hideNonDialogContentFromAssistiveTechnology();\n }\n this.openDialogs.push(dialogRef);\n dialogRef.afterClosed().subscribe(() => this._removeOpenDialog(dialogRef));\n this.afterOpened.next(dialogRef);\n // Notify the dialog container that the content has been attached.\n dialogContainer._initializeWithAttachedContent();\n return dialogRef;\n }\n /**\n * Closes all of the currently-open dialogs.\n */\n closeAll() {\n this._closeDialogs(this.openDialogs);\n }\n /**\n * Finds an open dialog by its id.\n * @param id ID to use when looking up the dialog.\n */\n getDialogById(id) {\n return this.openDialogs.find(dialog => dialog.id === id);\n }\n ngOnDestroy() {\n // Only close the dialogs at this level on destroy\n // since the parent service may still be active.\n this._closeDialogs(this._openDialogsAtThisLevel);\n this._afterAllClosedAtThisLevel.complete();\n this._afterOpenedAtThisLevel.complete();\n }\n /**\n * Creates the overlay into which the dialog will be loaded.\n * @param config The dialog configuration.\n * @returns A promise resolving to the OverlayRef for the created overlay.\n */\n _createOverlay(config) {\n const overlayConfig = this._getOverlayConfig(config);\n return this._overlay.create(overlayConfig);\n }\n /**\n * Creates an overlay config from a dialog config.\n * @param dialogConfig The dialog configuration.\n * @returns The overlay configuration.\n */\n _getOverlayConfig(dialogConfig) {\n const state = new OverlayConfig({\n positionStrategy: this._overlay.position().global(),\n scrollStrategy: dialogConfig.scrollStrategy || this._scrollStrategy(),\n panelClass: dialogConfig.panelClass,\n hasBackdrop: dialogConfig.hasBackdrop,\n direction: dialogConfig.direction,\n minWidth: dialogConfig.minWidth,\n minHeight: dialogConfig.minHeight,\n maxWidth: dialogConfig.maxWidth,\n maxHeight: dialogConfig.maxHeight,\n disposeOnNavigation: dialogConfig.closeOnNavigation\n });\n if (dialogConfig.backdropClass) {\n state.backdropClass = dialogConfig.backdropClass;\n }\n return state;\n }\n /**\n * Attaches a dialog container to a dialog's already-created overlay.\n * @param overlay Reference to the dialog's underlying overlay.\n * @param config The dialog configuration.\n * @returns A promise resolving to a ComponentRef for the attached container.\n */\n _attachDialogContainer(overlay, config) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: MatDialogConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(this._dialogContainerType, config.viewContainerRef, injector, config.componentFactoryResolver);\n const containerRef = overlay.attach(containerPortal);\n return containerRef.instance;\n }\n /**\n * Attaches the user-provided component to the already-created dialog container.\n * @param componentOrTemplateRef The type of component being loaded into the dialog,\n * or a TemplateRef to instantiate as the content.\n * @param dialogContainer Reference to the wrapping dialog container.\n * @param overlayRef Reference to the overlay in which the dialog resides.\n * @param config The dialog configuration.\n * @returns A promise resolving to the MatDialogRef that should be returned to the user.\n */\n _attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {\n // Create a reference to the dialog we're creating in order to give the user a handle\n // to modify and close it.\n const dialogRef = new this._dialogRefConstructor(overlayRef, dialogContainer, config.id);\n if (componentOrTemplateRef instanceof TemplateRef) {\n dialogContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, { $implicit: config.data, dialogRef }));\n }\n else {\n const injector = this._createInjector(config, dialogRef, dialogContainer);\n const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));\n dialogRef.componentInstance = contentRef.instance;\n }\n dialogRef\n .updateSize(config.width, config.height)\n .updatePosition(config.position);\n return dialogRef;\n }\n /**\n * Creates a custom injector to be used inside the dialog. This allows a component loaded inside\n * of a dialog to close itself and, optionally, to return a value.\n * @param config Config object that is used to construct the dialog.\n * @param dialogRef Reference to the dialog.\n * @param dialogContainer Dialog container element that wraps all of the contents.\n * @returns The custom injector that can be used inside the dialog.\n */\n _createInjector(config, dialogRef, dialogContainer) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n // The dialog container should be provided as the dialog container and the dialog's\n // content are created out of the same `ViewContainerRef` and as such, are siblings\n // for injector purposes. To allow the hierarchy that is expected, the dialog\n // container is explicitly provided in the injector.\n const providers = [\n { provide: this._dialogContainerType, useValue: dialogContainer },\n { provide: this._dialogDataToken, useValue: config.data },\n { provide: this._dialogRefConstructor, useValue: dialogRef }\n ];\n if (config.direction &&\n (!userInjector || !userInjector.get(Directionality, null))) {\n providers.push({\n provide: Directionality,\n useValue: { value: config.direction, change: of() }\n });\n }\n return Injector.create({ parent: userInjector || this._injector, providers });\n }\n /**\n * Removes a dialog from the array of open dialogs.\n * @param dialogRef Dialog to be removed.\n */\n _removeOpenDialog(dialogRef) {\n const index = this.openDialogs.indexOf(dialogRef);\n if (index > -1) {\n this.openDialogs.splice(index, 1);\n // If all the dialogs were closed, remove/restore the `aria-hidden`\n // to a the siblings and emit to the `afterAllClosed` stream.\n if (!this.openDialogs.length) {\n this._ariaHiddenElements.forEach((previousValue, element) => {\n if (previousValue) {\n element.setAttribute('aria-hidden', previousValue);\n }\n else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenElements.clear();\n this._getAfterAllClosed().next();\n }\n }\n }\n /**\n * Hides all of the content that isn't an overlay from assistive technology.\n */\n _hideNonDialogContentFromAssistiveTechnology() {\n const overlayContainer = this._overlayContainer.getContainerElement();\n // Ensure that the overlay container is attached to the DOM.\n if (overlayContainer.parentElement) {\n const siblings = overlayContainer.parentElement.children;\n for (let i = siblings.length - 1; i > -1; i--) {\n let sibling = siblings[i];\n if (sibling !== overlayContainer &&\n sibling.nodeName !== 'SCRIPT' &&\n sibling.nodeName !== 'STYLE' &&\n !sibling.hasAttribute('aria-live')) {\n this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));\n sibling.setAttribute('aria-hidden', 'true');\n }\n }\n }\n }\n /** Closes all of the dialogs in an array. */\n _closeDialogs(dialogs) {\n let i = dialogs.length;\n while (i--) {\n // The `_openDialogs` property isn't updated after close until the rxjs subscription\n // runs on the next microtask, in addition to modifying the array as we're going\n // through it. We loop through all of them and call close without assuming that\n // they'll be removed from the list instantaneously.\n dialogs[i].close();\n }\n }\n}\n_MatDialogBase.ɵfac = function _MatDialogBase_Factory(t) { return new (t || _MatDialogBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Overlay), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(undefined), ɵngcc0.ɵɵdirectiveInject(undefined), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.OverlayContainer), ɵngcc0.ɵɵdirectiveInject(undefined), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Type), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Type), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.InjectionToken)); };\n_MatDialogBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatDialogBase });\n_MatDialogBase.ctorParameters = () => [\n { type: Overlay },\n { type: Injector },\n { type: undefined },\n { type: undefined },\n { type: OverlayContainer },\n { type: undefined },\n { type: Type },\n { type: Type },\n { type: InjectionToken }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatDialogBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc3.Overlay }, { type: ɵngcc0.Injector }, { type: undefined }, { type: undefined }, { type: ɵngcc3.OverlayContainer }, { type: undefined }, { type: ɵngcc0.Type }, { type: ɵngcc0.Type }, { type: ɵngcc0.InjectionToken }]; }, null); })();\n/**\n * Service to open Material Design modal dialogs.\n */\nclass MatDialog extends _MatDialogBase {\n constructor(overlay, injector, \n /**\n * @deprecated `_location` parameter to be removed.\n * @breaking-change 10.0.0\n */\n location, defaultOptions, scrollStrategy, parentDialog, overlayContainer) {\n super(overlay, injector, defaultOptions, parentDialog, overlayContainer, scrollStrategy, MatDialogRef, MatDialogContainer, MAT_DIALOG_DATA);\n }\n}\nMatDialog.ɵfac = function MatDialog_Factory(t) { return new (t || MatDialog)(ɵngcc0.ɵɵinject(ɵngcc3.Overlay), ɵngcc0.ɵɵinject(ɵngcc0.Injector), ɵngcc0.ɵɵinject(ɵngcc4.Location, 8), ɵngcc0.ɵɵinject(MAT_DIALOG_DEFAULT_OPTIONS, 8), ɵngcc0.ɵɵinject(MAT_DIALOG_SCROLL_STRATEGY), ɵngcc0.ɵɵinject(MatDialog, 12), ɵngcc0.ɵɵinject(ɵngcc3.OverlayContainer)); };\nMatDialog.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MatDialog, factory: MatDialog.ɵfac });\nMatDialog.ctorParameters = () => [\n { type: Overlay },\n { type: Injector },\n { type: Location, decorators: [{ type: Optional }] },\n { type: MatDialogConfig, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DIALOG_DEFAULT_OPTIONS,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_SCROLL_STRATEGY,] }] },\n { type: MatDialog, decorators: [{ type: Optional }, { type: SkipSelf }] },\n { type: OverlayContainer }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialog, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc3.Overlay }, { type: ɵngcc0.Injector }, { type: ɵngcc4.Location, decorators: [{\n type: Optional\n }] }, { type: MatDialogConfig, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DIALOG_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DIALOG_SCROLL_STRATEGY]\n }] }, { type: MatDialog, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc3.OverlayContainer }]; }, null); })();\n/**\n * Applies default options to the dialog config.\n * @param config Config to be modified.\n * @param defaultOptions Default options provided.\n * @returns The new configuration object.\n */\nfunction _applyConfigDefaults(config, defaultOptions) {\n return Object.assign(Object.assign({}, defaultOptions), config);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Counter used to generate unique IDs for dialog elements. */\nlet dialogElementUid = 0;\n/**\n * Button that will close the current dialog.\n */\nclass MatDialogClose {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n dialogRef, _elementRef, _dialog) {\n this.dialogRef = dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n /** Default to \"button\" to prevents accidental form submits. */\n this.type = 'button';\n }\n ngOnInit() {\n if (!this.dialogRef) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the DialogRef isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the DialogRef by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n }\n ngOnChanges(changes) {\n const proxiedChange = changes['_matDialogClose'] || changes['_matDialogCloseResult'];\n if (proxiedChange) {\n this.dialogResult = proxiedChange.currentValue;\n }\n }\n _onButtonClick(event) {\n // Determinate the focus origin using the click event, because using the FocusMonitor will\n // result in incorrect origins. Most of the time, close buttons will be auto focused in the\n // dialog, and therefore clicking the button won't result in a focus change. This means that\n // the FocusMonitor won't detect any origin change, and will always output `program`.\n _closeDialogVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);\n }\n}\nMatDialogClose.ɵfac = function MatDialogClose_Factory(t) { return new (t || MatDialogClose)(ɵngcc0.ɵɵdirectiveInject(MatDialogRef, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MatDialog)); };\nMatDialogClose.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDialogClose, selectors: [[\"\", \"mat-dialog-close\", \"\"], [\"\", \"matDialogClose\", \"\"]], hostVars: 2, hostBindings: function MatDialogClose_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatDialogClose_click_HostBindingHandler($event) { return ctx._onButtonClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.ariaLabel || null)(\"type\", ctx.type);\n } }, inputs: { type: \"type\", dialogResult: [\"mat-dialog-close\", \"dialogResult\"], ariaLabel: [\"aria-label\", \"ariaLabel\"], _matDialogClose: [\"matDialogClose\", \"_matDialogClose\"] }, exportAs: [\"matDialogClose\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nMatDialogClose.ctorParameters = () => [\n { type: MatDialogRef, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: MatDialog }\n];\nMatDialogClose.propDecorators = {\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n type: [{ type: Input }],\n dialogResult: [{ type: Input, args: ['mat-dialog-close',] }],\n _matDialogClose: [{ type: Input, args: ['matDialogClose',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogClose, [{\n type: Directive,\n args: [{\n selector: '[mat-dialog-close], [matDialogClose]',\n exportAs: 'matDialogClose',\n host: {\n '(click)': '_onButtonClick($event)',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.type]': 'type'\n }\n }]\n }], function () { return [{ type: MatDialogRef, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: MatDialog }]; }, { type: [{\n type: Input\n }], dialogResult: [{\n type: Input,\n args: ['mat-dialog-close']\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], _matDialogClose: [{\n type: Input,\n args: ['matDialogClose']\n }] }); })();\n/**\n * Title of a dialog element. Stays fixed to the top of the dialog when scrolling.\n */\nclass MatDialogTitle {\n constructor(\n // The dialog title directive is always used in combination with a `MatDialogRef`.\n // tslint:disable-next-line: lightweight-tokens\n _dialogRef, _elementRef, _dialog) {\n this._dialogRef = _dialogRef;\n this._elementRef = _elementRef;\n this._dialog = _dialog;\n this.id = `mat-dialog-title-${dialogElementUid++}`;\n }\n ngOnInit() {\n if (!this._dialogRef) {\n this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openDialogs);\n }\n if (this._dialogRef) {\n Promise.resolve().then(() => {\n const container = this._dialogRef._containerInstance;\n if (container && !container._ariaLabelledBy) {\n container._ariaLabelledBy = this.id;\n }\n });\n }\n }\n}\nMatDialogTitle.ɵfac = function MatDialogTitle_Factory(t) { return new (t || MatDialogTitle)(ɵngcc0.ɵɵdirectiveInject(MatDialogRef, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(MatDialog)); };\nMatDialogTitle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDialogTitle, selectors: [[\"\", \"mat-dialog-title\", \"\"], [\"\", \"matDialogTitle\", \"\"]], hostAttrs: [1, \"mat-dialog-title\"], hostVars: 1, hostBindings: function MatDialogTitle_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n } }, inputs: { id: \"id\" }, exportAs: [\"matDialogTitle\"] });\nMatDialogTitle.ctorParameters = () => [\n { type: MatDialogRef, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: MatDialog }\n];\nMatDialogTitle.propDecorators = {\n id: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogTitle, [{\n type: Directive,\n args: [{\n selector: '[mat-dialog-title], [matDialogTitle]',\n exportAs: 'matDialogTitle',\n host: {\n 'class': 'mat-dialog-title',\n '[id]': 'id'\n }\n }]\n }], function () { return [{ type: MatDialogRef, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: MatDialog }]; }, { id: [{\n type: Input\n }] }); })();\n/**\n * Scrollable content container of a dialog.\n */\nclass MatDialogContent {\n}\nMatDialogContent.ɵfac = function MatDialogContent_Factory(t) { return new (t || MatDialogContent)(); };\nMatDialogContent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDialogContent, selectors: [[\"\", \"mat-dialog-content\", \"\"], [\"mat-dialog-content\"], [\"\", \"matDialogContent\", \"\"]], hostAttrs: [1, \"mat-dialog-content\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogContent, [{\n type: Directive,\n args: [{\n selector: `[mat-dialog-content], mat-dialog-content, [matDialogContent]`,\n host: { 'class': 'mat-dialog-content' }\n }]\n }], null, null); })();\n/**\n * Container for the bottom action buttons in a dialog.\n * Stays fixed to the bottom when scrolling.\n */\nclass MatDialogActions {\n}\nMatDialogActions.ɵfac = function MatDialogActions_Factory(t) { return new (t || MatDialogActions)(); };\nMatDialogActions.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatDialogActions, selectors: [[\"\", \"mat-dialog-actions\", \"\"], [\"mat-dialog-actions\"], [\"\", \"matDialogActions\", \"\"]], hostAttrs: [1, \"mat-dialog-actions\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogActions, [{\n type: Directive,\n args: [{\n selector: `[mat-dialog-actions], mat-dialog-actions, [matDialogActions]`,\n host: { 'class': 'mat-dialog-actions' }\n }]\n }], null, null); })();\n/**\n * Finds the closest MatDialogRef to an element by looking at the DOM.\n * @param element Element relative to which to look for a dialog.\n * @param openDialogs References to the currently-open dialogs.\n */\nfunction getClosestDialog(element, openDialogs) {\n let parent = element.nativeElement.parentElement;\n while (parent && !parent.classList.contains('mat-dialog-container')) {\n parent = parent.parentElement;\n }\n return parent ? openDialogs.find(dialog => dialog.id === parent.id) : null;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatDialogModule {\n}\nMatDialogModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatDialogModule });\nMatDialogModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatDialogModule_Factory(t) { return new (t || MatDialogModule)(); }, providers: [\n MatDialog,\n MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,\n ], imports: [[\n OverlayModule,\n PortalModule,\n MatCommonModule,\n ], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatDialogModule, { declarations: function () { return [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogActions, MatDialogContent]; }, imports: function () { return [OverlayModule,\n PortalModule,\n MatCommonModule]; }, exports: function () { return [MatDialogContainer, MatDialogClose, MatDialogTitle, MatDialogContent, MatDialogActions, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDialogModule, [{\n type: NgModule,\n args: [{\n imports: [\n OverlayModule,\n PortalModule,\n MatCommonModule,\n ],\n exports: [\n MatDialogContainer,\n MatDialogClose,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatCommonModule,\n ],\n declarations: [\n MatDialogContainer,\n MatDialogClose,\n MatDialogTitle,\n MatDialogActions,\n MatDialogContent,\n ],\n providers: [\n MatDialog,\n MAT_DIALOG_SCROLL_STRATEGY_PROVIDER,\n ],\n entryComponents: [MatDialogContainer]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, MAT_DIALOG_SCROLL_STRATEGY, MAT_DIALOG_SCROLL_STRATEGY_FACTORY, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER, MAT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY, MatDialog, MatDialogActions, MatDialogClose, MatDialogConfig, MatDialogContainer, MatDialogContent, MatDialogModule, MatDialogRef, MatDialogTitle, _MatDialogBase, _MatDialogContainerBase, _closeDialogVia, matDialogAnimations, throwMatDialogContentAlreadyAttachedError };\n\n//# sourceMappingURL=dialog.js.map","import { NgModule, ɵɵdefineInjectable, ɵɵinject, Injectable, NgZone } from '@angular/core';\nimport { coerceArray } from '@angular/cdk/coercion';\nimport { Subject, combineLatest, concat, Observable } from 'rxjs';\nimport { take, skip, debounceTime, map, startWith, takeUntil } from 'rxjs/operators';\nimport { Platform } from '@angular/cdk/platform';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nclass LayoutModule {\n}\nLayoutModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: LayoutModule });\nLayoutModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function LayoutModule_Factory(t) { return new (t || LayoutModule)(); } });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutModule, [{\n type: NgModule,\n args: [{}]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Global registry for all dynamically-created, injected media queries. */\nconst mediaQueriesForWebkitCompatibility = new Set();\n/** Style tag that holds all of the dynamically-created media queries. */\nlet mediaQueryStyleNode;\n/** A utility for calling matchMedia queries. */\nclass MediaMatcher {\n constructor(_platform) {\n this._platform = _platform;\n this._matchMedia = this._platform.isBrowser && window.matchMedia ?\n // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window) :\n noopMatchMedia;\n }\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n matchMedia(query) {\n if (this._platform.WEBKIT) {\n createEmptyStyleRule(query);\n }\n return this._matchMedia(query);\n }\n}\nMediaMatcher.ɵfac = function MediaMatcher_Factory(t) { return new (t || MediaMatcher)(ɵngcc0.ɵɵinject(ɵngcc1.Platform)); };\nMediaMatcher.ɵprov = ɵɵdefineInjectable({ factory: function MediaMatcher_Factory() { return new MediaMatcher(ɵɵinject(Platform)); }, token: MediaMatcher, providedIn: \"root\" });\nMediaMatcher.ctorParameters = () => [\n { type: Platform }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MediaMatcher, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.Platform }]; }, null); })();\n/**\n * For Webkit engines that only trigger the MediaQueryListListener when\n * there is at least one CSS selector for the respective media query.\n */\nfunction createEmptyStyleRule(query) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n mediaQueryStyleNode.setAttribute('type', 'text/css');\n document.head.appendChild(mediaQueryStyleNode);\n }\n if (mediaQueryStyleNode.sheet) {\n mediaQueryStyleNode.sheet\n .insertRule(`@media ${query} {.fx-query-test{ }}`, 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n }\n catch (e) {\n console.error(e);\n }\n}\n/** No-op matchMedia replacement for non-browser platforms. */\nfunction noopMatchMedia(query) {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => { },\n removeListener: () => { }\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Utility for checking the matching state of @media queries. */\nclass BreakpointObserver {\n constructor(_mediaMatcher, _zone) {\n this._mediaMatcher = _mediaMatcher;\n this._zone = _zone;\n /** A map of all media queries currently being listened for. */\n this._queries = new Map();\n /** A subject for all other observables to takeUntil based on. */\n this._destroySubject = new Subject();\n }\n /** Completes the active subject, signalling to all other observables to complete. */\n ngOnDestroy() {\n this._destroySubject.next();\n this._destroySubject.complete();\n }\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n isMatched(value) {\n const queries = splitQueries(coerceArray(value));\n return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches);\n }\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n observe(value) {\n const queries = splitQueries(coerceArray(value));\n const observables = queries.map(query => this._registerQuery(query).observable);\n let stateObservable = combineLatest(observables);\n // Emit the first state immediately, and then debounce the subsequent emissions.\n stateObservable = concat(stateObservable.pipe(take(1)), stateObservable.pipe(skip(1), debounceTime(0)));\n return stateObservable.pipe(map(breakpointStates => {\n const response = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(({ matches, query }) => {\n response.matches = response.matches || matches;\n response.breakpoints[query] = matches;\n });\n return response;\n }));\n }\n /** Registers a specific query to be listened for. */\n _registerQuery(query) {\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return this._queries.get(query);\n }\n const mql = this._mediaMatcher.matchMedia(query);\n // Create callback for match changes and add it is as a listener.\n const queryObservable = new Observable((observer) => {\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n const handler = (e) => this._zone.run(() => observer.next(e));\n mql.addListener(handler);\n return () => {\n mql.removeListener(handler);\n };\n }).pipe(startWith(mql), map(({ matches }) => ({ query, matches })), takeUntil(this._destroySubject));\n // Add the MediaQueryList to the set of queries.\n const output = { observable: queryObservable, mql };\n this._queries.set(query, output);\n return output;\n }\n}\nBreakpointObserver.ɵfac = function BreakpointObserver_Factory(t) { return new (t || BreakpointObserver)(ɵngcc0.ɵɵinject(MediaMatcher), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nBreakpointObserver.ɵprov = ɵɵdefineInjectable({ factory: function BreakpointObserver_Factory() { return new BreakpointObserver(ɵɵinject(MediaMatcher), ɵɵinject(NgZone)); }, token: BreakpointObserver, providedIn: \"root\" });\nBreakpointObserver.ctorParameters = () => [\n { type: MediaMatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BreakpointObserver, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: MediaMatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries) {\n return queries.map(query => query.split(','))\n .reduce((a1, a2) => a1.concat(a2))\n .map(query => query.trim());\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// PascalCase is being used as Breakpoints is used like an enum.\n// tslint:disable-next-line:variable-name\nconst Breakpoints = {\n XSmall: '(max-width: 599.98px)',\n Small: '(min-width: 600px) and (max-width: 959.98px)',\n Medium: '(min-width: 960px) and (max-width: 1279.98px)',\n Large: '(min-width: 1280px) and (max-width: 1919.98px)',\n XLarge: '(min-width: 1920px)',\n Handset: '(max-width: 599.98px) and (orientation: portrait), ' +\n '(max-width: 959.98px) and (orientation: landscape)',\n Tablet: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait), ' +\n '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',\n Web: '(min-width: 840px) and (orientation: portrait), ' +\n '(min-width: 1280px) and (orientation: landscape)',\n HandsetPortrait: '(max-width: 599.98px) and (orientation: portrait)',\n TabletPortrait: '(min-width: 600px) and (max-width: 839.98px) and (orientation: portrait)',\n WebPortrait: '(min-width: 840px) and (orientation: portrait)',\n HandsetLandscape: '(max-width: 959.98px) and (orientation: landscape)',\n TabletLandscape: '(min-width: 960px) and (max-width: 1279.98px) and (orientation: landscape)',\n WebLandscape: '(min-width: 1280px) and (orientation: landscape)',\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BreakpointObserver, Breakpoints, LayoutModule, MediaMatcher };\n\n//# sourceMappingURL=layout.js.map","import * as drawing from './drawing';\nimport * as geometry from './geometry';\nimport * as pdf from './pdf';\n\nexport * from './html';\nexport { exportPDF } from './pdf';\nexport { exportImage, exportSVG } from './drawing';\n\nexport {\n animationFrame, Class, Color, htmlEncode,\n logToConsole, Observable, saveAs, support,\n template, throttle, parseColor, namedColors\n} from './common';\n\nexport {\n Animation, AnimationFactory, Arc,\n BaseNode, Circle, Element, Gradient, GradientStop, Group,\n Image, Layout, LinearGradient, MultiPath,\n HasObservers,\n OptionsStore, Path, PathParser, QuadNode, RadialGradient,\n Rect, ShapesQuadTree, Surface, SurfaceFactory, Text,\n align, fit, stack, vAlign, vStack, vWrap, wrap\n} from './drawing';\n\nexport { drawing, geometry, pdf };\n\n","import { innerSubscribe, SimpleInnerSubscriber, SimpleOuterSubscriber } from '../innerSubscribe';\nexport function takeUntil(notifier) {\n return (source) => source.lift(new TakeUntilOperator(notifier));\n}\nclass TakeUntilOperator {\n constructor(notifier) {\n this.notifier = notifier;\n }\n call(subscriber, source) {\n const takeUntilSubscriber = new TakeUntilSubscriber(subscriber);\n const notifierSubscription = innerSubscribe(this.notifier, new SimpleInnerSubscriber(takeUntilSubscriber));\n if (notifierSubscription && !takeUntilSubscriber.seenValue) {\n takeUntilSubscriber.add(notifierSubscription);\n return source.subscribe(takeUntilSubscriber);\n }\n return takeUntilSubscriber;\n }\n}\nclass TakeUntilSubscriber extends SimpleOuterSubscriber {\n constructor(destination) {\n super(destination);\n this.seenValue = false;\n }\n notifyNext() {\n this.seenValue = true;\n this.complete();\n }\n notifyComplete() {\n }\n}\n//# sourceMappingURL=takeUntil.js.map","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","export default function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}","import { ComponentRef, ElementRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { PopoverOverlayRef } from './popover-view-ref';\nimport { ComponentPortal, PortalInjector } from '@angular/cdk/portal';\nimport { POPOVER_VIEW_DATA } from './popover-view.token';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopoverViewService {\n\n constructor(private overlay: Overlay,\n private injector: Injector) {\n }\n\n public openPopoverPanel(elementConnect: ElementRef, filterData: any, componentContainer: any): PopoverOverlayRef {\n const strategy = this.overlay.position()\n .flexibleConnectedTo(elementConnect)\n .withPositions([\n {\n overlayX: 'start',\n overlayY: 'top',\n originX: 'start',\n originY: 'bottom',\n offsetY: 0\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: 0\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n }\n ]);\n\n const config = new OverlayConfig({\n hasBackdrop: false,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n positionStrategy: strategy,\n scrollStrategy: this.overlay.scrollStrategies.close()\n });\n\n const overlayRef = this.overlay.create(config);\n\n const dialogRef = new PopoverOverlayRef(overlayRef);\n\n const overlayComponent = this.attachDialogContainer(overlayRef, filterData, dialogRef, componentContainer);\n\n dialogRef.componentInstance = overlayComponent;\n\n overlayRef.backdropClick().subscribe(_ => dialogRef.close());\n\n return dialogRef;\n }\n\n private attachDialogContainer(overlayRef: OverlayRef, config: any, dialogRef: PopoverOverlayRef, componentContainer: any) {\n const injector = this.createInjector(config, dialogRef);\n\n const containerPortal = new ComponentPortal(componentContainer, null, injector);\n\n const containerRef: ComponentRef = overlayRef.attach(containerPortal);\n\n return containerRef.instance;\n }\n\n private createInjector(config: any, dialogRef: PopoverOverlayRef): PortalInjector {\n const injectionTokens = new WeakMap();\n\n injectionTokens.set(PopoverOverlayRef, dialogRef);\n injectionTokens.set(POPOVER_VIEW_DATA, config);\n\n return new PortalInjector(this.injector, injectionTokens);\n }\n}\n","import { fromArray } from './fromArray';\nimport { isArray } from '../util/isArray';\nimport { Subscriber } from '../Subscriber';\nimport { iterator as Symbol_iterator } from '../../internal/symbol/iterator';\nimport { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';\nexport function zip(...observables) {\n const resultSelector = observables[observables.length - 1];\n if (typeof resultSelector === 'function') {\n observables.pop();\n }\n return fromArray(observables, undefined).lift(new ZipOperator(resultSelector));\n}\nexport class ZipOperator {\n constructor(resultSelector) {\n this.resultSelector = resultSelector;\n }\n call(subscriber, source) {\n return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));\n }\n}\nexport class ZipSubscriber extends Subscriber {\n constructor(destination, resultSelector, values = Object.create(null)) {\n super(destination);\n this.resultSelector = resultSelector;\n this.iterators = [];\n this.active = 0;\n this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : undefined;\n }\n _next(value) {\n const iterators = this.iterators;\n if (isArray(value)) {\n iterators.push(new StaticArrayIterator(value));\n }\n else if (typeof value[Symbol_iterator] === 'function') {\n iterators.push(new StaticIterator(value[Symbol_iterator]()));\n }\n else {\n iterators.push(new ZipBufferIterator(this.destination, this, value));\n }\n }\n _complete() {\n const iterators = this.iterators;\n const len = iterators.length;\n this.unsubscribe();\n if (len === 0) {\n this.destination.complete();\n return;\n }\n this.active = len;\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n if (iterator.stillUnsubscribed) {\n const destination = this.destination;\n destination.add(iterator.subscribe());\n }\n else {\n this.active--;\n }\n }\n }\n notifyInactive() {\n this.active--;\n if (this.active === 0) {\n this.destination.complete();\n }\n }\n checkIterators() {\n const iterators = this.iterators;\n const len = iterators.length;\n const destination = this.destination;\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n return;\n }\n }\n let shouldComplete = false;\n const args = [];\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n let result = iterator.next();\n if (iterator.hasCompleted()) {\n shouldComplete = true;\n }\n if (result.done) {\n destination.complete();\n return;\n }\n args.push(result.value);\n }\n if (this.resultSelector) {\n this._tryresultSelector(args);\n }\n else {\n destination.next(args);\n }\n if (shouldComplete) {\n destination.complete();\n }\n }\n _tryresultSelector(args) {\n let result;\n try {\n result = this.resultSelector.apply(this, args);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n }\n}\nclass StaticIterator {\n constructor(iterator) {\n this.iterator = iterator;\n this.nextResult = iterator.next();\n }\n hasValue() {\n return true;\n }\n next() {\n const result = this.nextResult;\n this.nextResult = this.iterator.next();\n return result;\n }\n hasCompleted() {\n const nextResult = this.nextResult;\n return Boolean(nextResult && nextResult.done);\n }\n}\nclass StaticArrayIterator {\n constructor(array) {\n this.array = array;\n this.index = 0;\n this.length = 0;\n this.length = array.length;\n }\n [Symbol_iterator]() {\n return this;\n }\n next(value) {\n const i = this.index++;\n const array = this.array;\n return i < this.length ? { value: array[i], done: false } : { value: null, done: true };\n }\n hasValue() {\n return this.array.length > this.index;\n }\n hasCompleted() {\n return this.array.length === this.index;\n }\n}\nclass ZipBufferIterator extends SimpleOuterSubscriber {\n constructor(destination, parent, observable) {\n super(destination);\n this.parent = parent;\n this.observable = observable;\n this.stillUnsubscribed = true;\n this.buffer = [];\n this.isComplete = false;\n }\n [Symbol_iterator]() {\n return this;\n }\n next() {\n const buffer = this.buffer;\n if (buffer.length === 0 && this.isComplete) {\n return { value: null, done: true };\n }\n else {\n return { value: buffer.shift(), done: false };\n }\n }\n hasValue() {\n return this.buffer.length > 0;\n }\n hasCompleted() {\n return this.buffer.length === 0 && this.isComplete;\n }\n notifyComplete() {\n if (this.buffer.length > 0) {\n this.isComplete = true;\n this.parent.notifyInactive();\n }\n else {\n this.destination.complete();\n }\n }\n notifyNext(innerValue) {\n this.buffer.push(innerValue);\n this.parent.checkIterators();\n }\n subscribe() {\n return innerSubscribe(this.observable, new SimpleInnerSubscriber(this));\n }\n}\n//# sourceMappingURL=zip.js.map","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","const DEG_TO_RAD = Math.PI / 180;\nconst MAX_NUM = Number.MAX_VALUE;\nconst MIN_NUM = -Number.MAX_VALUE;\n\nexport { DEG_TO_RAD, MAX_NUM, MIN_NUM };","export const rxSubscriber = (() => typeof Symbol === 'function'\n ? Symbol('rxSubscriber')\n : '@@rxSubscriber_' + Math.random())();\nexport const $$rxSubscriber = rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map","import { Subject } from './Subject';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nexport class BehaviorSubject extends Subject {\n constructor(_value) {\n super();\n this._value = _value;\n }\n get value() {\n return this.getValue();\n }\n _subscribe(subscriber) {\n const subscription = super._subscribe(subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(this._value);\n }\n return subscription;\n }\n getValue() {\n if (this.hasError) {\n throw this.thrownError;\n }\n else if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return this._value;\n }\n }\n next(value) {\n super.next(this._value = value);\n }\n}\n//# sourceMappingURL=BehaviorSubject.js.map","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","let _enable_super_gross_mode_that_will_cause_bad_things = false;\nexport const config = {\n Promise: undefined,\n set useDeprecatedSynchronousErrorHandling(value) {\n if (value) {\n const error = new Error();\n console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \\n' + error.stack);\n }\n else if (_enable_super_gross_mode_that_will_cause_bad_things) {\n console.log('RxJS: Back to a better error behavior. Thank you. <3');\n }\n _enable_super_gross_mode_that_will_cause_bad_things = value;\n },\n get useDeprecatedSynchronousErrorHandling() {\n return _enable_super_gross_mode_that_will_cause_bad_things;\n },\n};\n//# sourceMappingURL=config.js.map","import { Class } from '../common';\n\nclass QuadRoot extends Class {\n constructor() {\n super();\n\n this.shapes = [];\n }\n\n _add(shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n }\n\n pointShapes(point) {\n const shapes = this.shapes;\n const length = shapes.length;\n const result = [];\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n }\n\n insert(shape, bbox) {\n this._add(shape, bbox);\n }\n\n remove(shape) {\n const shapes = this.shapes;\n const length = shapes.length;\n\n for (let idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n}\n\nexport default QuadRoot;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Subscriber } from '../Subscriber';\nexport function skipWhile(predicate) {\n return (source) => source.lift(new SkipWhileOperator(predicate));\n}\nclass SkipWhileOperator {\n constructor(predicate) {\n this.predicate = predicate;\n }\n call(subscriber, source) {\n return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));\n }\n}\nclass SkipWhileSubscriber extends Subscriber {\n constructor(destination, predicate) {\n super(destination);\n this.predicate = predicate;\n this.skipping = true;\n this.index = 0;\n }\n _next(value) {\n const destination = this.destination;\n if (this.skipping) {\n this.tryCallPredicate(value);\n }\n if (!this.skipping) {\n destination.next(value);\n }\n }\n tryCallPredicate(value) {\n try {\n const result = this.predicate(value, this.index++);\n this.skipping = Boolean(result);\n }\n catch (err) {\n this.destination.error(err);\n }\n }\n}\n//# sourceMappingURL=skipWhile.js.map","export function isDate(value) {\n return value instanceof Date && !isNaN(+value);\n}\n//# sourceMappingURL=isDate.js.map","import { async } from '../scheduler/async';\nimport { isDate } from '../util/isDate';\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function delay(delay, scheduler = async) {\n const absoluteDelay = isDate(delay);\n const delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n return (source) => source.lift(new DelayOperator(delayFor, scheduler));\n}\nclass DelayOperator {\n constructor(delay, scheduler) {\n this.delay = delay;\n this.scheduler = scheduler;\n }\n call(subscriber, source) {\n return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n }\n}\nclass DelaySubscriber extends Subscriber {\n constructor(destination, delay, scheduler) {\n super(destination);\n this.delay = delay;\n this.scheduler = scheduler;\n this.queue = [];\n this.active = false;\n this.errored = false;\n }\n static dispatch(state) {\n const source = state.source;\n const queue = source.queue;\n const scheduler = state.scheduler;\n const destination = state.destination;\n while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n queue.shift().notification.observe(destination);\n }\n if (queue.length > 0) {\n const delay = Math.max(0, queue[0].time - scheduler.now());\n this.schedule(state, delay);\n }\n else {\n this.unsubscribe();\n source.active = false;\n }\n }\n _schedule(scheduler) {\n this.active = true;\n const destination = this.destination;\n destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n source: this, destination: this.destination, scheduler: scheduler\n }));\n }\n scheduleNotification(notification) {\n if (this.errored === true) {\n return;\n }\n const scheduler = this.scheduler;\n const message = new DelayMessage(scheduler.now() + this.delay, notification);\n this.queue.push(message);\n if (this.active === false) {\n this._schedule(scheduler);\n }\n }\n _next(value) {\n this.scheduleNotification(Notification.createNext(value));\n }\n _error(err) {\n this.errored = true;\n this.queue = [];\n this.destination.error(err);\n this.unsubscribe();\n }\n _complete() {\n this.scheduleNotification(Notification.createComplete());\n this.unsubscribe();\n }\n}\nclass DelayMessage {\n constructor(time, notification) {\n this.time = time;\n this.notification = notification;\n }\n}\n//# sourceMappingURL=delay.js.map","import { Action } from './Action';\nexport class AsyncAction extends Action {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n this.pending = false;\n }\n schedule(state, delay = 0) {\n if (this.closed) {\n return this;\n }\n this.state = state;\n const id = this.id;\n const scheduler = this.scheduler;\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n this.pending = true;\n this.delay = delay;\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n return this;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n return setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && this.delay === delay && this.pending === false) {\n return id;\n }\n clearInterval(id);\n return undefined;\n }\n execute(state, delay) {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n }\n else if (this.pending === false && this.id != null) {\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n _execute(state, delay) {\n let errored = false;\n let errorValue = undefined;\n try {\n this.work(state);\n }\n catch (e) {\n errored = true;\n errorValue = !!e && e || new Error(e);\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n _unsubscribe() {\n const id = this.id;\n const scheduler = this.scheduler;\n const actions = scheduler.actions;\n const index = actions.indexOf(this);\n this.work = null;\n this.state = null;\n this.pending = false;\n this.scheduler = null;\n if (index !== -1) {\n actions.splice(index, 1);\n }\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n this.delay = null;\n }\n}\n//# sourceMappingURL=AsyncAction.js.map","import { Subscription } from '../Subscription';\nexport class Action extends Subscription {\n constructor(scheduler, work) {\n super();\n }\n schedule(state, delay = 0) {\n return this;\n }\n}\n//# sourceMappingURL=Action.js.map","/**\n * @license Angular v11.0.4\n * (c) 2010-2020 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { InjectionToken, forwardRef, Directive, Renderer2, ElementRef, Optional, Inject, ɵisPromise, ɵisObservable, Self, Injectable, Injector, Input, Host, EventEmitter, SkipSelf, Output, NgModule, Version } from '@angular/core';\nimport { ɵgetDOM } from '@angular/common';\nimport { forkJoin, from } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to provide a `ControlValueAccessor` for form controls.\n *\n * See `DefaultValueAccessor` for how to implement one.\n *\n * @publicApi\n */\nimport * as ɵngcc0 from '@angular/core';\nconst NG_VALUE_ACCESSOR = new InjectionToken('NgValueAccessor');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n/**\n * @description\n * A `ControlValueAccessor` for writing a value and listening to changes on a checkbox input\n * element.\n *\n * @usageNotes\n *\n * ### Using a checkbox with a reactive form.\n *\n * The following example shows how to use a checkbox with a reactive form.\n *\n * ```ts\n * const rememberLoginControl = new FormControl();\n * ```\n *\n * ```\n * \n * ```\n *\n * @ngModule ReactiveFormsModule\n * @ngModule FormsModule\n * @publicApi\n */\nclass CheckboxControlValueAccessor {\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * The registered callback function called when a change event occurs on the input element.\n * @nodoc\n */\n this.onChange = (_) => { };\n /**\n * The registered callback function called when a blur event occurs on the input element.\n * @nodoc\n */\n this.onTouched = () => { };\n }\n /**\n * Sets the \"checked\" property on the input element.\n * @nodoc\n */\n writeValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n /**\n * Registers a function called when the control value changes.\n * @nodoc\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * Registers a function called when the control is touched.\n * @nodoc\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets the \"disabled\" property on the input element.\n * @nodoc\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nCheckboxControlValueAccessor.ɵfac = function CheckboxControlValueAccessor_Factory(t) { return new (t || CheckboxControlValueAccessor)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nCheckboxControlValueAccessor.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CheckboxControlValueAccessor, selectors: [[\"input\", \"type\", \"checkbox\", \"formControlName\", \"\"], [\"input\", \"type\", \"checkbox\", \"formControl\", \"\"], [\"input\", \"type\", \"checkbox\", \"ngModel\", \"\"]], hostBindings: function CheckboxControlValueAccessor_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"change\", function CheckboxControlValueAccessor_change_HostBindingHandler($event) { return ctx.onChange($event.target.checked); })(\"blur\", function CheckboxControlValueAccessor_blur_HostBindingHandler() { return ctx.onTouched(); });\n } }, features: [ɵngcc0.ɵɵProvidersFeature([CHECKBOX_VALUE_ACCESSOR])] });\nCheckboxControlValueAccessor.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CheckboxControlValueAccessor, [{\n type: Directive,\n args: [{\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n providers: [CHECKBOX_VALUE_ACCESSOR]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n */\nfunction _isAndroid() {\n const userAgent = ɵgetDOM() ? ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * @description\n * Provide this token to control if form directives buffer IME input until\n * the \"compositionend\" event occurs.\n * @publicApi\n */\nconst COMPOSITION_BUFFER_MODE = new InjectionToken('CompositionEventMode');\n/**\n * @description\n *\n * {@searchKeywords ngDefaultControl}\n *\n * The default `ControlValueAccessor` for writing a value and listening to changes on input\n * elements. The accessor is used by the `FormControlDirective`, `FormControlName`, and\n * `NgModel` directives.\n *\n * @usageNotes\n *\n * ### Using the default value accessor\n *\n * The following example shows how to use an input element that activates the default value accessor\n * (in this case, a text field).\n *\n * ```ts\n * const firstNameControl = new FormControl();\n * ```\n *\n * ```\n * \n * ```\n *\n * This value accessor is used by default for `` and `\n * ```\n */\nclass TextAreaDirective {\n constructor(renderer, element, zone, changeDetector, injector, rtl) {\n this.renderer = renderer;\n this.element = element;\n this.zone = zone;\n this.changeDetector = changeDetector;\n this.injector = injector;\n this.elementClass = true;\n this.autofillClass = true;\n /**\n * Fires each time the textarea value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Specifies if the `textarea` element will resize its height automatically\n * ([see example]({% slug overview_textarea %}#toc-auto-resizing)).\n *\n * @default false\n */\n this.autoSize = false;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.direction = rtl ? 'rtl' : 'ltr';\n }\n get id() {\n return this.element.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.element.nativeElement, 'id', id);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.elementValue = value;\n this.resize();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.setElementProperty('disabled', isDisabled);\n }\n ngOnInit() {\n const element = this.element.nativeElement;\n this.zone.runOutsideAngular(() => {\n this.listeners = [\n this.renderer.listen(element, 'focus', this.handleFocus.bind(this)),\n this.renderer.listen(element, 'blur', this.handleBlur.bind(this)),\n this.renderer.listen(element, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n })\n ];\n if (isDocumentAvailable() && this.autoSize) {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe((debounceTime(50)))\n .subscribe(() => this.resize());\n }\n this.inputSubscription = fromEvent(element, 'input')\n .subscribe(this.handleInput.bind(this));\n });\n this.control = this.injector.get(NgControl, null);\n }\n ngOnChanges(changes) {\n const element = this.element.nativeElement;\n if (changes.value) {\n this.elementValue = this.value;\n }\n if (changes.autoSize) {\n if (this.autoSize) {\n this.initialHeight = element.offsetHeight;\n this.renderer.setStyle(element, 'resize', 'none');\n }\n else {\n this.renderer.setStyle(element, 'overflow-y', 'auto');\n this.renderer.setStyle(element, 'resize', 'both');\n element.style.height = `${this.initialHeight}px`;\n }\n }\n this.resize();\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n if (this.inputSubscription) {\n this.inputSubscription.unsubscribe();\n }\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n get elementValue() {\n if (this.element) {\n return this.element.nativeElement.value;\n }\n return '';\n }\n set elementValue(value) {\n this.setElementProperty('value', (value === undefined || value === null) ? '' : value);\n }\n setElementProperty(name, value) {\n if (this.element) {\n this.renderer.setProperty(this.element.nativeElement, name, value);\n }\n }\n resize() {\n if (!this.autoSize) {\n return;\n }\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, 'overflow-y', 'hidden');\n element.style.height = `${this.initialHeight}px`;\n const scrollHeight = element.scrollHeight;\n if (scrollHeight > this.initialHeight) {\n element.style.height = `${scrollHeight}px`;\n }\n }\n handleInput() {\n const value = this.elementValue;\n this.value = value;\n if (this.control || hasObservers(this.onValueChange) || hasObservers(this.valueChange)) {\n this.zone.run(() => {\n this.ngChange(value);\n this.onValueChange.emit(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n this.resize();\n }\n handleFocus() {\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur() {\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n this.changeDetector.markForCheck();\n });\n }\n }\n}\nTextAreaDirective.ɵfac = function TextAreaDirective_Factory(t) { return new (t || TextAreaDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nTextAreaDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextAreaDirective, selectors: [[\"textarea\", \"kendoTextArea\", \"\"]], hostVars: 5, hostBindings: function TextAreaDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textarea\", ctx.elementClass)(\"k-autofill\", ctx.autofillClass);\n } }, inputs: { autoSize: \"autoSize\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective)\n }]), ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nTextAreaDirective.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: Injector },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nTextAreaDirective.propDecorators = {\n elementClass: [{ type: HostBinding, args: ['class.k-textarea',] }],\n autofillClass: [{ type: HostBinding, args: ['class.k-autofill',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n valueChange: [{ type: Output }],\n autoSize: [{ type: Input }],\n value: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextAreaDirective, [{\n type: Directive,\n args: [{\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective)\n }],\n selector: 'textarea[kendoTextArea]'\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Injector }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { elementClass: [{\n type: HostBinding,\n args: ['class.k-textarea']\n }], autofillClass: [{\n type: HostBinding,\n args: ['class.k-autofill']\n }], valueChange: [{\n type: Output\n }], autoSize: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], value: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FloatingLabelInputAdapter {\n constructor(component, formControl) {\n this.component = component;\n const isObservableOrEventEmitter = (event) => event instanceof Observable || event instanceof EventEmitter;\n if (isObservableOrEventEmitter(component.onFocus)) {\n this.onFocus = component.onFocus;\n }\n if (isObservableOrEventEmitter(component.autoFillStart)) {\n this.autoFillStart = component.autoFillStart;\n }\n if (isObservableOrEventEmitter(component.autoFillEnd)) {\n this.autoFillEnd = component.autoFillEnd;\n }\n if (isObservableOrEventEmitter(component.onBlur)) {\n this.onBlur = component.onBlur;\n }\n if (formControl) {\n this.onValueChange = formControl.valueChanges;\n }\n else if (component.onValueChange) {\n this.onValueChange = component.onValueChange;\n }\n }\n get focusableId() {\n const component = this.component;\n if ('focusableId' in component) {\n return component.focusableId;\n }\n else if ('id' in component) {\n return component.id;\n }\n return \"\";\n }\n set focusableId(value) {\n const component = this.component;\n if ('focusableId' in component) {\n component.focusableId = value;\n }\n else if ('id' in component) {\n component.id = value;\n }\n }\n}\n\nconst isFunction = (x) => Object.prototype.toString.call(x) === '[object Function]';\n/**\n * @hidden\n */\nclass TextBoxContainerComponent {\n constructor(elementRef, renderer, changeDetectorRef, rtl) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.changeDetectorRef = changeDetectorRef;\n /**\n * @hidden\n */\n this.focused = false;\n /**\n * @hidden\n */\n this.empty = true;\n /**\n * @hidden\n */\n this.invalid = false;\n this._subscriptions = [];\n this.autoFillStarted = false;\n this.direction = rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, \"id\");\n }\n get hostClasses() {\n return true;\n }\n get textareaElementClass() {\n return !!this.textarea;\n }\n get focusedClass() {\n return this.focused;\n }\n get invalidClass() {\n return this.invalid;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (!this.formControl && !this.kendoInput) {\n if (isDevMode()) {\n throw new Error(\"The TextBoxContainer requires a Kendo Input component\" +\n \" or a forms-bound component to function properly.\");\n }\n return;\n }\n // add focus/blur/valueChange handlers\n const control = new FloatingLabelInputAdapter(this.kendoInput || this.formControl.valueAccessor, this.formControl);\n const setFocus = (isFocused) => () => {\n this.focused = isFocused;\n this.updateState();\n };\n this.subscribe(control, 'onFocus', setFocus(true));\n this.subscribe(control, 'onBlur', setFocus(false));\n this.subscribe(control, 'autoFillStart', () => {\n this.autoFillStarted = true;\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n });\n this.subscribe(control, 'autoFillEnd', () => {\n if (this.autoFillStarted) {\n this.autoFillStarted = false;\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n }\n });\n const updateState = () => this.updateState();\n updateState();\n this.subscribe(control, 'onValueChange', updateState);\n // set label id for floating label\n if (this.id && control.focusableId) {\n // input wins\n this.id = control.focusableId;\n }\n else if (this.id) {\n control.focusableId = this.id;\n }\n else if (control.focusableId) {\n this.id = control.focusableId;\n }\n else {\n const id = \"_\" + guid();\n control.focusableId = id;\n this.id = id;\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._subscriptions.forEach(s => s.unsubscribe());\n this._subscriptions = [];\n }\n subscribe(control, eventName, handler) {\n if (control[eventName] instanceof EventEmitter) {\n const subscription = control[eventName].subscribe(handler);\n this._subscriptions.push(subscription);\n }\n }\n updateState() {\n const empty = value => {\n // zero is not an empty value (e.g., NumericTextBox)\n if (value === 0 || value === false) {\n return false;\n }\n // empty arrays are an empty value (e.g., MultiSelect)\n if (Array.isArray(value) && !value.length) {\n return true;\n }\n return !value;\n };\n const formControl = this.formControl;\n if (formControl) {\n const valueAccessor = formControl.valueAccessor;\n if (isFunction(valueAccessor.isEmpty)) {\n this.empty = valueAccessor.isEmpty();\n }\n else {\n this.empty = empty(formControl.value);\n }\n this.invalid = formControl.invalid && (formControl.touched || formControl.dirty);\n }\n else {\n this.empty = isFunction(this.kendoInput.isEmpty) ?\n this.kendoInput.isEmpty() : empty(this.kendoInput.value);\n }\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n this.changeDetectorRef.markForCheck();\n }\n}\nTextBoxContainerComponent.ɵfac = function TextBoxContainerComponent_Factory(t) { return new (t || TextBoxContainerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nTextBoxContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TextBoxContainerComponent, selectors: [[\"kendo-textbox-container\"]], contentQueries: function TextBoxContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextAreaDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.textarea = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControl = _t.first);\n } }, hostVars: 9, hostBindings: function TextBoxContainerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textbox-container\", ctx.hostClasses)(\"k-textarea-wrapper\", ctx.textareaElementClass)(\"k-state-focused\", ctx.focusedClass)(\"k-state-invalid\", ctx.invalidClass);\n } }, inputs: { id: \"id\", floatingLabel: \"floatingLabel\" }, ngContentSelectors: _c27, decls: 2, vars: 1, consts: [[\"class\", \"k-label\", 3, \"for\", 4, \"ngIf\"], [1, \"k-label\", 3, \"for\"]], template: function TextBoxContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵtemplate(1, TextBoxContainerComponent_label_1_Template, 2, 2, \"label\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.floatingLabel);\n } }, directives: [ɵngcc3.NgIf], encapsulation: 2 });\n/** @nocollapse */\nTextBoxContainerComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nTextBoxContainerComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-textbox-container',] }],\n textareaElementClass: [{ type: HostBinding, args: ['class.k-textarea-wrapper',] }],\n focusedClass: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n invalidClass: [{ type: HostBinding, args: ['class.k-state-invalid',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n id: [{ type: Input }],\n floatingLabel: [{ type: Input }],\n kendoInput: [{ type: ContentChild, args: [KendoInput,] }],\n textarea: [{ type: ContentChild, args: [TextAreaDirective,] }],\n formControl: [{ type: ContentChild, args: [NgControl,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxContainerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-textbox-container',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-textbox-container']\n }], textareaElementClass: [{\n type: HostBinding,\n args: ['class.k-textarea-wrapper']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], invalidClass: [{\n type: HostBinding,\n args: ['class.k-state-invalid']\n }], id: [{\n type: Input\n }], floatingLabel: [{\n type: Input\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput]\n }], textarea: [{\n type: ContentChild,\n args: [TextAreaDirective]\n }], formControl: [{\n type: ContentChild,\n args: [NgControl]\n }] }); })();\n\n/**\n * Represents the [Kendo UI TextBox directive]({% slug overview_textbox %}) for the Inputs components for Angular.\n * Used to style the textbox of any `input` element.\n *\n * @example\n * ```ts-no-run\n * \n * \n * \n * ```\n */\nclass TextBoxDirective {\n constructor(renderer, inputElement, ngZone) {\n this.renderer = renderer;\n this.inputElement = inputElement;\n this.ngZone = ngZone;\n this.hostClass = true;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n }\n /**\n * @hidden\n */\n set value(text) {\n if (!this.inputElement) {\n return;\n }\n this.inputElement.nativeElement.value = (text === undefined || text === null) ? '' : text;\n this.onValueChange.emit();\n }\n /**\n * @hidden\n */\n get value() {\n return this.inputElement.nativeElement.value;\n }\n get id() {\n return this.inputElement.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.inputElement.nativeElement, 'id', id);\n }\n ngAfterViewInit() {\n const input = this.inputElement.nativeElement;\n this.listeners = [\n this.renderer.listen(input, 'focus', () => this.onFocus.emit()),\n this.renderer.listen(input, 'blur', () => this.onBlur.emit())\n ];\n this.ngZone.runOutsideAngular(() => {\n this.renderer.listen(input, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n });\n });\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n }\n}\nTextBoxDirective.ɵfac = function TextBoxDirective_Factory(t) { return new (t || TextBoxDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nTextBoxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextBoxDirective, selectors: [[\"input\", \"kendoTextBox\", \"\"]], hostVars: 2, hostBindings: function TextBoxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-textbox\", ctx.hostClass);\n } }, inputs: { value: \"value\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective)\n }])] });\n/** @nocollapse */\nTextBoxDirective.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone }\n];\nTextBoxDirective.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-textbox',] }],\n value: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoTextBox]',\n providers: [{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective)\n }]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }], value: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst createMaxValidator = (maxValue) => {\n return (c) => {\n if (!isPresent(maxValue) || !isPresent(c.value) || c.value <= maxValue) {\n return null;\n }\n return {\n maxError: {\n maxValue: maxValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst createMinValidator = (minValue) => {\n return (c) => {\n if (!isPresent(minValue) || !isPresent(c.value) || c.value >= minValue) {\n return null;\n }\n return {\n minError: {\n minValue: minValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-min';\n/**\n * @hidden\n */\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-max';\n/**\n * @hidden\n */\nconst POINT = \".\";\n/**\n * @hidden\n */\nconst INITIAL_SPIN_DELAY = 500;\n/**\n * @hidden\n */\nconst SPIN_DELAY = 50;\n/**\n * @hidden\n */\nconst EXPONENT_REGEX = /[eE][\\-+]?([0-9]+)/;\n\n/**\n * @hidden\n */\nconst numericRegex = (options) => {\n const { autoCorrect, decimals, min } = options;\n let separator = options.separator;\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n const signPattern = autoCorrect && min !== null && min >= 0 ? '' : '-?';\n let numberPattern;\n if (decimals === 0) {\n numberPattern = '\\\\d*';\n }\n else {\n numberPattern = `(?:(?:\\\\d+(${separator}\\\\d*)?)|(?:${separator}\\\\d*))?`;\n }\n return new RegExp(`^${signPattern}${numberPattern}$`);\n};\n/**\n * @hidden\n */\nconst decimalPart = (value) => {\n return value >= 0 ? Math.floor(value) : Math.ceil(value);\n};\n/**\n * @hidden\n */\nconst noop = (_) => { }; // tslint:disable-line:no-empty\n/**\n * @hidden\n */\nconst defined = (value) => {\n return typeof value !== 'undefined';\n};\n/**\n * @hidden\n */\nconst isNumber = (value) => {\n return !isNaN(value) && value !== null;\n};\n/**\n * @hidden\n */\nfunction pad(value, digits) {\n const count = digits - String(value).length;\n let result = value;\n if (count > 0) {\n const padString = new Array(count + 1).join(\"0\");\n result = parseFloat(value + padString);\n }\n return result;\n}\n/**\n * @hidden\n */\nconst getDeltaFromMouseWheel = (e) => {\n let delta = 0;\n if (e.wheelDelta) {\n delta = e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n else if (e.detail) {\n delta = Math.round(-e.detail / 3);\n }\n return delta;\n};\n/**\n * @hidden\n */\nconst getCaretPosition = (element) => element.selectionStart;\n/**\n * @hidden\n */\nconst extractSignificantNumericChars = (formattedString, separator) => {\n const significantCharacters = `${separator}0123456789-`;\n return formattedString.split('').reduce((acc, curr) => significantCharacters.includes(curr) ? ++acc : acc, 0);\n};\n\n/**\n * @hidden\n */\nvar ArrowDirection;\n(function (ArrowDirection) {\n ArrowDirection[ArrowDirection[\"Down\"] = -1] = \"Down\";\n ArrowDirection[ArrowDirection[\"None\"] = 0] = \"None\";\n ArrowDirection[ArrowDirection[\"Up\"] = 1] = \"Up\";\n})(ArrowDirection || (ArrowDirection = {}));\n\nconst PARSABLE_OPTIONS = ['min', 'max', 'step', 'decimals'];\nconst PARSABLE_DEFAULTS = {\n decimals: null,\n max: null,\n min: null,\n step: 1\n};\nconst FOCUSED$2 = 'k-state-focused';\nconst FORMATTED_VALUE = 'k-formatted-value';\n/**\n * Represents the [Kendo UI NumericTextBox component for Angular]({% slug overview_numerictextbox %}).\n */\nclass NumericTextBoxComponent {\n constructor(intl, renderer, localizationService, injector, ngZone, changeDetector, hostElement) {\n this.intl = intl;\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.injector = injector;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the NumericTextBox is disabled ([see example]({% slug disabled_numerictextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the NumericTextBox is in its read-only state ([see example]({% slug readonly_numerictextbox %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the `input` element of the NumericTextBox.\n */\n this.title = '';\n /**\n * Specifies whether the value will be auto-corrected based on the minimum and maximum values\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.autoCorrect = false;\n /**\n * Specifies the number of decimals that the user can enter when the input is focused\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.decimals = null;\n /**\n * Specifies the value that is used to increment or decrement the component value\n * ([see example]({% slug predefinedsteps_numerictextbox %})).\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered\n * ([see example]({% slug spinbuttons_numerictextbox %})).\n */\n this.spinners = true;\n /**\n * Determines whether the built-in minimum or maximum validators are enforced when a form is validated.\n *\n * > The 4.2.0 Angular version introduces the `min` and `max` validation directives. As a result, even if you set `rangeValidation`\n * to `false`, the built-in Angular validators will be executed.\n */\n this.rangeValidation = true;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Determines whether the whole value will be selected when the NumericTextBox is clicked. Defaults to `true`.\n */\n this.selectOnFocus = true;\n /**\n * Specifies the value of the NumericTextBox\n * ([see example]({% slug formats_numerictextbox %})).\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.ArrowDirection = ArrowDirection;\n /**\n * @hidden\n */\n this.arrowDirection = ArrowDirection.None;\n this.inputValue = '';\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this._format = \"n2\";\n this.isPasted = false;\n this.mouseDown = false;\n this.ngChange = noop;\n this.ngTouched = noop;\n this.ngValidatorChange = noop;\n /**\n * @hidden\n */\n this.increasePress = (e) => {\n this.arrowPress(ArrowDirection.Up, e);\n };\n /**\n * @hidden\n */\n this.decreasePress = (e) => {\n this.arrowPress(ArrowDirection.Down, e);\n };\n /**\n * @hidden\n */\n this.releaseArrow = () => {\n clearTimeout(this.spinTimeout);\n if (this.arrowDirection !== ArrowDirection.None) {\n this.arrowDirection = ArrowDirection.None;\n this.changeDetector.detectChanges();\n }\n };\n /**\n * @hidden\n */\n this.handlePaste = () => {\n this.isPasted = true;\n };\n /**\n * @hidden\n */\n this.handleInput = () => {\n const input = this.numericInput.nativeElement;\n let { selectionStart, selectionEnd, value: inputValue } = input;\n if (this.pressedKey === Keys.NumpadDecimal) {\n inputValue = this.replaceNumpadDotValue();\n }\n if (this.isPasted) {\n inputValue = this.formatInputValue(this.intl.parseNumber(inputValue));\n }\n if (!this.isValid(inputValue)) {\n input.value = this.inputValue;\n this.setSelection(selectionStart - 1, selectionEnd - 1);\n return;\n }\n const parsedValue = this.intl.parseNumber(inputValue);\n let value = this.restrictDecimals(parsedValue);\n if (this.autoCorrect) {\n const limited = this.limitInputValue(value);\n value = limited.value;\n selectionStart = limited.selectionStart;\n selectionEnd = limited.selectionEnd;\n }\n if (parsedValue !== value || this.hasTrailingZeros(inputValue) || !this.focused) {\n this.setInputValue(value);\n this.setSelection(selectionStart, selectionEnd);\n }\n else {\n this.inputValue = inputValue;\n }\n if (this.isPasted) {\n input.value = this.inputValue;\n }\n this.updateValue(value);\n this.previousSelection = null;\n this.isPasted = false;\n };\n /**\n * @hidden\n */\n this.handleDragEnter = () => {\n if (!this.focused && !this.isDisabled) {\n this.setInputValue(this.value, true);\n }\n };\n /**\n * @hidden\n */\n this.handleMouseDown = () => {\n this.mouseDown = true;\n };\n /**\n * @hidden\n */\n this.handleFocus = () => {\n if (!this.focused) {\n this.focused = true;\n if (!this.isDisabled) {\n const shouldSelectAll = this.selectOnFocus || !this.mouseDown;\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (shouldSelectAll) {\n this.selectAll();\n }\n else {\n this.selectCaret();\n }\n }, 0);\n });\n }\n }\n this.mouseDown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n //blur is thrown before input when dragging the input text in IE\n if (this.inputValue !== this.elementValue) {\n this.handleInput();\n }\n this.setInputValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleKeyDown = (e) => {\n if (this.isDisabled) {\n return;\n }\n let step;\n if (e.keyCode === Keys.ArrowDown) {\n step = -1;\n }\n else if (e.keyCode === Keys.ArrowUp) {\n step = 1;\n }\n if (step && this.step) {\n e.preventDefault();\n this.addStep(step);\n }\n const input = this.numericInput.nativeElement;\n this.previousSelection = {\n end: input.selectionEnd,\n start: input.selectionStart\n };\n this.pressedKey = e.keyCode;\n };\n /**\n * @hidden\n */\n this.handleWheel = (e) => {\n if (this.focused && !this.isDisabled) {\n e.preventDefault();\n const delta = getDeltaFromMouseWheel(e);\n this.addStep(delta);\n }\n };\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Specifies the number format which is used when the NumericTextBox is not focused\n * ([see example]({% slug formats_numerictextbox %})).\n * If `format` is set to `null` or `undefined`, the default format will be used.\n */\n get format() {\n const format = this._format;\n return format !== null && format !== undefined ? format : 'n2';\n }\n set format(value) {\n this._format = value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get widgetClasses() {\n return true;\n }\n ngOnInit() {\n this.subscriptions = this.localizationService\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.subscriptions.add(this.intl.changes.subscribe(this.intlChange.bind(this)));\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(PARSABLE_OPTIONS, changes, false)) {\n this.parseOptions(PARSABLE_OPTIONS.filter(option => changes[option]));\n }\n this.verifySettings();\n if (anyChanged(['min', 'max', 'rangeValidation'], changes, false)) {\n this.minValidateFn = this.rangeValidation ? createMinValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? createMaxValidator(this.max) : noop;\n this.ngValidatorChange();\n }\n if (anyChanged(['autoCorrect', 'decimals', 'min'], changes)) {\n delete this.numericRegex;\n }\n if (anyChanged(['value', 'format'], changes, false)) {\n this.verifyValue(this.value);\n this.value = this.restrictModelValue(this.value);\n if (!this.focused || (this.intl.parseNumber(this.elementValue) !== this.value)) {\n this.setInputValue();\n }\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n clearTimeout(this.spinTimeout);\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.ngValidatorChange = fn;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n let restrictedValue = this.restrictModelValue(value);\n this.value = restrictedValue;\n this.setInputValue();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * Focuses the NumericTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n invokeElementMethod(this.numericInput, 'focus');\n }\n /**\n * Blurs the NumericTextBox.\n */\n blur() {\n invokeElementMethod(this.numericInput, 'blur');\n }\n /**\n * Notifies the `NumericTextBoxComponent` that the input value should be changed.\n * Can be used to update the input after setting the component properties directly.\n */\n notifyValueChange() {\n this.setInputValue();\n }\n /**\n * @hidden\n */\n get incrementTitle() {\n return this.localizationService.get('increment');\n }\n /**\n * @hidden\n */\n get decrementTitle() {\n return this.localizationService.get('decrement');\n }\n get decimalSeparator() {\n const numberSymbols = this.intl.numberSymbols();\n return numberSymbols.decimal;\n }\n get elementValue() {\n return this.numericInput.nativeElement.value;\n }\n set elementValue(value) {\n this.renderer.setProperty(this.numericInput.nativeElement, 'value', value);\n }\n get focused() {\n return this.isFocused;\n }\n get hasDecimals() {\n return this.decimals !== null && this.decimals >= 0;\n }\n set focused(value) {\n if (this.isFocused !== value && this.numericWrap) {\n const wrap = this.numericWrap.nativeElement;\n const input = this.numericInput.nativeElement;\n if (value) {\n this.renderer.addClass(wrap, FOCUSED$2);\n if (!this.isDisabled) {\n this.renderer.removeClass(input, FORMATTED_VALUE);\n }\n }\n else {\n this.renderer.removeClass(wrap, FOCUSED$2);\n this.renderer.addClass(input, FORMATTED_VALUE);\n }\n this.isFocused = value;\n }\n }\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n arrowPress(direction, e) {\n e.preventDefault();\n if (this.isDisabled) {\n return;\n }\n if (!mobileOS) {\n this.focused = true;\n this.focus();\n }\n if (this.arrowDirection !== direction) {\n this.arrowDirection = direction;\n this.changeDetector.detectChanges();\n }\n if (this.step) {\n this.spin(direction, INITIAL_SPIN_DELAY);\n }\n else {\n this.setInputValue();\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n replaceNumpadDotValue() {\n let value = this.inputValue || \"\";\n if (this.previousSelection) {\n const input = this.numericInput.nativeElement;\n const { selectionStart, selectionEnd } = input;\n const { start, end } = this.previousSelection;\n input.value = value = value.substring(0, start) + this.decimalSeparator + value.substring(end);\n this.setSelection(selectionStart, selectionEnd);\n }\n return value;\n }\n isValid(value) {\n if (!this.numericRegex) {\n this.numericRegex = numericRegex({\n autoCorrect: this.autoCorrect,\n decimals: this.decimals,\n min: this.min,\n separator: this.decimalSeparator\n });\n }\n return this.numericRegex.test(value);\n }\n spin(step, timeout) {\n clearTimeout(this.spinTimeout);\n this.spinTimeout = window.setTimeout(() => {\n this.spin(step, SPIN_DELAY);\n }, timeout);\n this.addStep(step);\n }\n addStep(step) {\n let value = add(this.value || 0, this.step * step);\n value = this.limitValue(value);\n value = this.restrictDecimals(value);\n this.setInputValue(value);\n this.updateValue(value);\n }\n setSelection(start, end) {\n if (this.focused) {\n invokeElementMethod(this.numericInput, 'setSelectionRange', start, end);\n }\n }\n limitValue(value) {\n let result = value;\n if (!this.isInRange(value)) {\n if (isNumber(this.max) && value > this.max) {\n result = this.max;\n }\n if (isNumber(this.min) && value < this.min) {\n result = this.min;\n }\n }\n return result;\n }\n limitInputValue(value) {\n let { selectionStart, selectionEnd, value: enteredValue } = this.numericInput.nativeElement;\n let limitedValue = value;\n let selectToEnd = false;\n if (!this.isInRange(value)) {\n const lengthChange = enteredValue.length - String(this.inputValue).length;\n const { min, max } = this;\n const hasMax = isNumber(max);\n const hasMin = isNumber(min);\n let padLimit, replaceNext;\n let correctedValue = value;\n if (selectionStart === 0 && this.inputValue.substr(1) === enteredValue) {\n return {\n selectionEnd: selectionEnd,\n selectionStart: selectionStart,\n value: null\n };\n }\n if (hasMax && value > max) {\n if (value > 0) {\n replaceNext = true;\n }\n else {\n padLimit = max;\n }\n }\n else if (hasMin && value < min) {\n if (value > 0) {\n padLimit = min;\n }\n else {\n replaceNext = true;\n }\n }\n if (padLimit) {\n const paddedValue = this.tryPadValue(value, padLimit);\n if (paddedValue && decimalPart(value) !== decimalPart(padLimit)) {\n correctedValue = paddedValue;\n selectToEnd = true;\n }\n }\n else if (replaceNext) {\n if (this.inputValue && selectionStart !== enteredValue.length) {\n correctedValue = parseFloat(enteredValue.substr(0, selectionStart) +\n enteredValue.substr(selectionStart + lengthChange));\n }\n }\n limitedValue = this.limitValue(correctedValue);\n selectToEnd = (selectToEnd || limitedValue !== correctedValue) && this.previousSelection &&\n (this.previousSelection.end - this.previousSelection.start + lengthChange) > 0;\n }\n return {\n selectionEnd: selectToEnd ? String(limitedValue).length : selectionEnd,\n selectionStart: selectionStart,\n value: limitedValue\n };\n }\n tryPadValue(value, limit) {\n const limitLength = String(Math.floor(limit)).length;\n const zeroPadded = pad(value, limitLength);\n const zeroPaddedNext = pad(value, limitLength + 1);\n let result;\n if (this.isInRange(zeroPadded)) {\n result = zeroPadded;\n }\n else if (this.isInRange(zeroPaddedNext)) {\n result = zeroPaddedNext;\n }\n return result;\n }\n isInRange(value) {\n return !isNumber(value) || ((!isNumber(this.min) || this.min <= value) && (!isNumber(this.max) || value <= this.max));\n }\n restrictModelValue(value) {\n let result = this.restrictDecimals(value, true);\n if (this.autoCorrect && this.limitValue(result) !== result) {\n result = null;\n }\n return result;\n }\n restrictDecimals(value, round) {\n let result = value;\n if (value && this.hasDecimals) {\n const decimals = this.decimals;\n const stringValue = String(value);\n if (round || EXPONENT_REGEX.test(stringValue)) {\n result = toFixedPrecision(value, decimals);\n }\n else {\n const parts = stringValue.split(POINT);\n let fraction = parts[1];\n if (fraction && fraction.length > decimals) {\n fraction = fraction.substr(0, decimals);\n result = parseFloat(`${parts[0]}${POINT}${fraction}`);\n }\n }\n }\n return result;\n }\n formatInputValue(value) {\n let stringValue = String(value);\n const exponentMatch = EXPONENT_REGEX.exec(stringValue);\n if (exponentMatch) {\n stringValue = value.toFixed(limitPrecision(parseInt(exponentMatch[1], 10)));\n }\n return stringValue.replace(POINT, this.decimalSeparator);\n }\n formatValue(value, focused) {\n let formattedValue;\n if (value === null || !defined(value) || value === '') {\n formattedValue = '';\n }\n else if (focused && !this.readonly) {\n formattedValue = this.formatInputValue(value);\n }\n else {\n formattedValue = this.intl.formatNumber(value, this.format);\n }\n return formattedValue;\n }\n setInputValue(value = this.value, focused = this.focused) {\n const formattedValue = this.formatValue(value, focused);\n this.elementValue = formattedValue;\n this.inputValue = formattedValue;\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.min !== null && this.max !== null && this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n }\n verifyValue(value) {\n if (isDevMode() && value && typeof value !== 'number') {\n throw new Error(`The NumericTextBox component requires value of type Number and ${JSON.stringify(value)} was set.`);\n }\n }\n parseOptions(options) {\n for (let idx = 0; idx < options.length; idx++) {\n const name = options[idx];\n const value = this[name];\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n const valid = !isNaN(parsed);\n if (isDevMode() && !valid && value !== '') {\n throw new Error('The NumericTextBox component requires value of type Number or a String representing ' +\n `a number for the ${name} property and ${JSON.stringify(value)} was set.`);\n }\n this[name] = valid ? parsed : PARSABLE_DEFAULTS[name];\n }\n }\n }\n intlChange() {\n delete this.numericRegex;\n if (this.numericInput && (!this.focused || !this.isValid(this.elementValue))) {\n this.setInputValue();\n }\n }\n hasTrailingZeros(inputValue) {\n if (this.hasDecimals && this.focused) {\n const fraction = inputValue.split(this.decimalSeparator)[1];\n return fraction && fraction.length > this.decimals && fraction.lastIndexOf('0') === fraction.length - 1;\n }\n }\n selectAll() {\n this.setInputValue();\n this.setSelection(0, this.inputValue.length);\n }\n selectCaret() {\n const caretPosition = getCaretPosition(this.numericInput.nativeElement);\n const formattedValue = this.elementValue;\n const partialValue = formattedValue.substring(0, caretPosition);\n this.setInputValue();\n if (partialValue.length) {\n const significantCharsInFormattedValue = extractSignificantNumericChars(partialValue, this.decimalSeparator);\n const adjustedSignificantChars = this.adjustSignificantChars(formattedValue, significantCharsInFormattedValue);\n this.setSelection(adjustedSignificantChars, adjustedSignificantChars);\n }\n else {\n this.setSelection(0, 0);\n }\n }\n numberOfLeadingZeroes(formattedValue) {\n const separatorIndex = formattedValue.indexOf(this.decimalSeparator);\n const matchedLeadingZeroes = formattedValue.match(/^[^1-9]*?(0+)/);\n if (matchedLeadingZeroes) {\n const lengthOfMatch = matchedLeadingZeroes[0].length;\n const lengthOfLeadingZeroesMatch = matchedLeadingZeroes[1].length;\n return lengthOfMatch === separatorIndex ? lengthOfLeadingZeroesMatch - 1 : lengthOfLeadingZeroesMatch;\n }\n return 0;\n }\n adjustSignificantChars(formattedValue, significantChars) {\n const leadingZeroes = this.numberOfLeadingZeroes(formattedValue);\n if (leadingZeroes > 0) {\n return Math.max(0, significantChars - leadingZeroes);\n }\n return significantChars;\n }\n}\nNumericTextBoxComponent.ɵfac = function NumericTextBoxComponent_Factory(t) { return new (t || NumericTextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nNumericTextBoxComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericTextBoxComponent, selectors: [[\"kendo-numerictextbox\"]], viewQuery: function NumericTextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c28, true);\n ɵngcc0.ɵɵviewQuery(_c29, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericWrap = _t.first);\n } }, hostVars: 5, hostBindings: function NumericTextBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-numerictextbox\", ctx.widgetClasses);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", autoCorrect: \"autoCorrect\", decimals: \"decimals\", step: \"step\", spinners: \"spinners\", rangeValidation: \"rangeValidation\", tabindex: \"tabindex\", selectOnFocus: \"selectOnFocus\", value: \"value\", format: \"format\", tabIndex: \"tabIndex\", max: \"max\", min: \"min\", placeholder: \"placeholder\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoNumericTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 25, consts: function () { let i18n_30; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Increment** button in the NumericTextBox\n * @meaning kendo.numerictextbox.increment\n */\n const MSG_EXTERNAL_4467784268438010275$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"Increase value\");\n i18n_30 = MSG_EXTERNAL_4467784268438010275$$DIST_FESM2015_INDEX_JS_31;\n }\n else {\n i18n_30 = $localize `:kendo.numerictextbox.increment|The title for the **Increment** button in the NumericTextBox␟0fc68540ffa04fdc246cf6cf8a1fed085f8b19a5␟4467784268438010275:Increase value`;\n } let i18n_32; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Decrement** button in the NumericTextBox\n * @meaning kendo.numerictextbox.decrement\n */\n const MSG_EXTERNAL_3960022057994897997$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"Decrease value\");\n i18n_32 = MSG_EXTERNAL_3960022057994897997$$DIST_FESM2015_INDEX_JS_33;\n }\n else {\n i18n_32 = $localize `:kendo.numerictextbox.decrement|The title for the **Decrement** button in the NumericTextBox␟df4751834075bf970c77d0da2c960b4e19a6b0dd␟3960022057994897997:Decrease value`;\n } return [[\"kendoNumericTextBoxLocalizedMessages\", \"\", \"increment\", i18n_30, \"decrement\", i18n_32], [1, \"k-numeric-wrap\", 3, \"kendoEventsOutsideAngular\"], [\"numericWrap\", \"\"], [\"role\", \"spinbutton\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", 1, \"k-input\", \"k-formatted-value\", 3, \"id\", \"tabindex\", \"disabled\", \"readonly\", \"kendoEventsOutsideAngular\"], [\"numericInput\", \"\"], [\"class\", \"k-select\", 3, \"kendoEventsOutsideAngular\", 4, \"ngIf\"], [1, \"k-select\", 3, \"kendoEventsOutsideAngular\"], [1, \"k-link\", \"k-link-increase\", 3, \"kendoEventsOutsideAngular\", \"title\"], [1, \"k-icon\", \"k-i-arrow-n\"], [1, \"k-link\", \"k-link-decrease\", 3, \"kendoEventsOutsideAngular\", \"title\"], [1, \"k-icon\", \"k-i-arrow-s\"]]; }, template: function NumericTextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelement(3, \"input\", 3, 4);\n ɵngcc0.ɵɵtemplate(5, NumericTextBoxComponent_span_5_Template, 5, 18, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(14, _c36, ctx.handleWheel, ctx.handleWheel));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"tabindex\", ctx.tabIndex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction7(17, _c37, ctx.handleMouseDown, ctx.handleDragEnter, ctx.handleKeyDown, ctx.handleInput, ctx.handleFocus, ctx.handleBlur, ctx.handlePaste));\n ɵngcc0.ɵɵattribute(\"aria-valuemin\", ctx.min)(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.value)(\"title\", ctx.title)(\"placeholder\", ctx.placeholder);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.spinners);\n } }, directives: function () { return [LocalizedNumericTextBoxMessagesDirective, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf]; }, encapsulation: 2 });\n/** @nocollapse */\nNumericTextBoxComponent.ctorParameters = () => [\n { type: IntlService },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: Injector },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ElementRef }\n];\nNumericTextBoxComponent.propDecorators = {\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n title: [{ type: Input }],\n autoCorrect: [{ type: Input }],\n format: [{ type: Input }],\n max: [{ type: Input }],\n min: [{ type: Input }],\n decimals: [{ type: Input }],\n placeholder: [{ type: Input }],\n step: [{ type: Input }],\n spinners: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n selectOnFocus: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n numericInput: [{ type: ViewChild, args: ['numericInput', { static: true },] }],\n numericWrap: [{ type: ViewChild, args: ['numericWrap',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n widgetClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-numerictextbox',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericTextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoNumericTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent) }\n ],\n selector: 'kendo-numerictextbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc4.IntlService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Injector }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], decimals: [{\n type: Input\n }], step: [{\n type: Input\n }], spinners: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], format: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-numerictextbox']\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], numericInput: [{\n type: ViewChild,\n args: ['numericInput', { static: true }]\n }], numericWrap: [{\n type: ViewChild,\n args: ['numericWrap']\n }] }); })();\n\n/**\n * @hidden\n */\nclass NumericTextBoxMessages extends ComponentMessages {\n}\nNumericTextBoxMessages.ɵfac = function NumericTextBoxMessages_Factory(t) { return ɵNumericTextBoxMessages_BaseFactory(t || NumericTextBoxMessages); };\nNumericTextBoxMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NumericTextBoxMessages, inputs: { decrement: \"decrement\", increment: \"increment\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nNumericTextBoxMessages.propDecorators = {\n decrement: [{ type: Input }],\n increment: [{ type: Input }]\n};\nconst ɵNumericTextBoxMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(NumericTextBoxMessages);\n\n/**\n * Custom component messages override default component messages.\n */\nclass NumericTextBoxCustomMessagesComponent extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nNumericTextBoxCustomMessagesComponent.ɵfac = function NumericTextBoxCustomMessagesComponent_Factory(t) { return new (t || NumericTextBoxCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericTextBoxCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericTextBoxCustomMessagesComponent, selectors: [[\"kendo-numerictextbox-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NumericTextBoxCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nNumericTextBoxCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericTextBoxCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-numerictextbox-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nvar ResultType;\n(function (ResultType) {\n ResultType[ResultType[\"Literal\"] = 0] = \"Literal\";\n ResultType[ResultType[\"Mask\"] = 1] = \"Mask\";\n ResultType[ResultType[\"Undefined\"] = 2] = \"Undefined\";\n})(ResultType || (ResultType = {}));\n/**\n * @hidden\n */\nclass Result {\n constructor(value, rest, type = ResultType.Undefined) {\n this.value = value;\n this.rest = rest;\n this.type = type;\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(fn) {\n return new Result(fn(this.value), this.rest);\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(fn) {\n return fn(this.value, this.rest);\n }\n fold(s, _ /*we don't need it*/) {\n return s(this.value, this.rest);\n }\n concat(r) {\n return this.map((vs, _) => r.chain((v, __) => vs.concat([v])));\n }\n toString() {\n return `Result({ value: '${this.value}', rest: ${this.rest} })`;\n }\n}\n\n/**\n * @hidden\n */\nclass Stream {\n constructor(input = [], control = []) {\n this.input = input;\n this.control = control;\n this.inputCursor = 0;\n this.controlCursor = 0;\n }\n eof() {\n return this.inputCursor >= this.input.length;\n }\n // Get the first value from the input.\n next() {\n return {\n char: this.input[this.inputCursor++],\n control: this.control[this.controlCursor++]\n };\n }\n peek() {\n return {\n char: this.input[this.inputCursor],\n control: this.control[this.controlCursor]\n };\n }\n eat_input() {\n this.inputCursor++;\n }\n eat_control() {\n this.controlCursor++;\n }\n eat() {\n this.inputCursor++;\n this.controlCursor++;\n }\n}\n\nconst toArray = (value) => (value || '').split('');\nconst ESCAPE_CHARACTER = '\\\\';\n/**\n * @hidden\n */\nclass Parser {\n constructor(parse) {\n this.parse = parse;\n }\n run(input, control = '') {\n if (input instanceof Stream) {\n return this.parse(input);\n }\n else {\n return this.parse(new Stream(toArray(input), toArray(control)));\n }\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(f) {\n return new Parser(stream => this.parse(stream).map(f));\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(f) {\n return new Parser(stream => this.parse(stream).chain((v, s) => f(v).run(s)));\n }\n isLiteral(c) {\n return this.run(c).type === ResultType.Literal;\n }\n}\n/**\n * @hidden\n */\nconst mask = ({ prompt, promptPlaceholder }) => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === control && control === prompt) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream, ResultType.Mask);\n }\n if (char === promptPlaceholder) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n});\n/**\n * @hidden\n */\nconst literal = _token => new Parser(stream => {\n // let {char, control} = stream.peek();\n let char = stream.peek().char;\n if (char === _token) {\n stream.eat();\n return new Result(_token, stream, ResultType.Literal);\n }\n // if (control === _token) {\n // while (!stream.eof() && char !== _token) {\n // stream.eat_input();\n // char = stream.peek().char;\n // }\n // }\n //\n // if (control !== undefined) {\n // stream.eat();\n // }\n return new Result(_token, stream, ResultType.Literal);\n});\n/**\n * @hidden\n */\nconst unmask = prompt => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === prompt && control === prompt) {\n stream.eat();\n return new Result(char, stream);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result('', stream);\n});\n/**\n * @hidden\n */\nconst unliteral = _token => new Parser(stream => {\n if (stream.eof()) {\n return new Result('', stream);\n }\n const { char } = stream.peek();\n if (char === _token) {\n stream.eat();\n }\n return new Result(_token, stream);\n});\n/**\n * @hidden\n */\nconst token = (rules, creator) => new Parser(stream => {\n let { char } = stream.next();\n const rule = rules[char];\n if (char === ESCAPE_CHARACTER) {\n char = stream.next().char;\n return new Result(creator.literal(char), stream);\n }\n if (!rule) {\n return new Result(creator.literal(char), stream);\n }\n return new Result(creator.mask(rule), stream);\n});\n/**\n * @hidden\n */\nconst rawMask = ({ prompt, promptPlaceholder }) => new Parser(stream => {\n let { char } = stream.next();\n if (char === prompt) {\n return new Result(promptPlaceholder, stream);\n }\n return new Result(char, stream);\n});\n/**\n * @hidden\n */\nconst rawLiteral = includeLiterals => new Parser(stream => {\n let { char } = stream.next();\n if (includeLiterals) {\n return new Result(char, stream);\n }\n return new Result('', stream);\n});\n\n/**\n * @hidden\n */\nconst always = value => new Parser(stream => new Result(value, stream));\n/**\n * @hidden\n */\nconst append = (p1, p2) => p1.chain(vs => p2.map(v => vs.concat([v])));\n/**\n * @hidden\n */\nconst sequence = list => list.reduce((acc, parser) => append(acc, parser), always([]));\n/**\n * @hidden\n */\nconst greedy = parser => new Parser(stream => {\n let result = new Result([], stream);\n while (!stream.eof()) {\n result = result.concat(parser.run(stream));\n }\n return result;\n});\n\n/**\n * @hidden\n */\nclass MaskingService {\n constructor() {\n this.rules = {};\n this.prompt = \"_\";\n this.mask = \"\";\n this.promptPlaceholder = \" \";\n this.includeLiterals = false;\n this.maskTokens = [];\n this.unmaskTokens = [];\n this.rawTokens = [];\n this.validationTokens = [];\n }\n update({ mask: mask$$1 = '', prompt = '', promptPlaceholder = ' ', rules = {}, includeLiterals = false }) {\n this.mask = mask$$1;\n this.prompt = prompt;\n this.promptPlaceholder = promptPlaceholder;\n this.rules = rules;\n this.includeLiterals = includeLiterals;\n this.tokenize();\n }\n validationValue(maskedValue = '') {\n let value = maskedValue;\n sequence(this.validationTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n rawValue(maskedValue = '') {\n let value = maskedValue;\n if (!this.rawTokens.length) {\n return value;\n }\n sequence(this.rawTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n /**\n * @hidden\n */\n maskRaw(rawValue = '') {\n let value = rawValue;\n if (!this.maskTokens.length) {\n return value;\n }\n sequence(this.maskTokens)\n .run(rawValue)\n .fold(masked => {\n value = masked.join('');\n });\n return value;\n }\n maskInput(input, control, splitPoint) {\n if (input.length < control.length) {\n return this.maskRemoved(input, control, splitPoint);\n }\n return this.maskInserted(input, control, splitPoint);\n }\n maskInRange(pasted, oldValue, start, end) {\n let value = '';\n let selection = end;\n const beforeChange = oldValue.split('').slice(0, start);\n const afterChange = oldValue.split('').slice(end);\n sequence(this.maskTokens.slice(start, end))\n .run(pasted)\n .fold(masked => {\n value = beforeChange\n .concat(masked)\n .concat(afterChange)\n .join('');\n });\n return {\n selection,\n value\n };\n }\n maskRemoved(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const unchanged = input.split('').slice(splitPoint);\n const changed = input.split('').slice(0, splitPoint).join('');\n const take$$1 = this.maskTokens.length - (input.length - splitPoint);\n sequence(this.maskTokens.slice(0, take$$1))\n .run(changed, control)\n .fold(masked => {\n selection = this.adjustPosition(masked, selection);\n value = masked.concat(unchanged).join('');\n });\n return {\n selection,\n value\n };\n }\n adjustPosition(input, selection) {\n const caretChar = input[selection];\n const isLiteral = this.maskTokens[selection].isLiteral(caretChar);\n if (!isLiteral && caretChar !== this.prompt) {\n return selection + 1;\n }\n return selection;\n }\n maskInserted(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const changed = input.slice(0, splitPoint);\n sequence(this.unmaskTokens)\n .run(changed, control)\n .chain(unmasked => {\n selection = unmasked.join('').length;\n const unchanged = control.slice(selection);\n return sequence(this.maskTokens)\n .run(unmasked.join('') + unchanged, control);\n })\n .fold(masked => {\n value = masked.join('');\n });\n return {\n selection,\n value\n };\n }\n get maskTokenCreator() {\n const { prompt, promptPlaceholder } = this;\n return {\n literal: rule => literal(rule),\n mask: rule => mask({ prompt, promptPlaceholder })(rule)\n };\n }\n get unmaskTokenCreator() {\n return {\n literal: rule => unliteral(rule),\n mask: rule => unmask(this.prompt)(rule)\n };\n }\n get rawTokenCreator() {\n const { prompt, promptPlaceholder, includeLiterals } = this;\n return {\n literal: _ => rawLiteral(includeLiterals),\n mask: _ => rawMask({ prompt, promptPlaceholder })\n };\n }\n get validationTokenCreator() {\n const { prompt } = this;\n return {\n literal: _ => rawLiteral(false),\n mask: _ => rawMask({ prompt, promptPlaceholder: '' })\n };\n }\n tokenize() {\n greedy(token(this.rules, this.maskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.maskTokens = tokens;\n });\n greedy(token(this.rules, this.unmaskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.unmaskTokens = tokens;\n });\n greedy(token(this.rules, this.rawTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.rawTokens = tokens;\n });\n greedy(token(this.rules, this.validationTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.validationTokens = tokens;\n });\n }\n}\nMaskingService.ɵfac = function MaskingService_Factory(t) { return new (t || MaskingService)(); };\nMaskingService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MaskingService, factory: MaskingService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MaskingService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst resolvedPromise = Promise.resolve(null);\nconst FOCUSED$3 = 'k-state-focused';\n/**\n * Represents the [Kendo UI MaskedTextBox component for Angular]({% slug overview_maskedtextbox %}).\n *\n * @example\n * ```ts-no-run\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public value: string = \"9580128055807792\";\n * public mask: string = \"0000-0000-0000-0000\";\n * }\n * ```\n */\nclass MaskedTextBoxComponent {\n constructor(service, renderer, hostElement, ngZone, injector, changeDetector, rtl) {\n this.service = service;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.ngZone = ngZone;\n this.injector = injector;\n this.changeDetector = changeDetector;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the MaskedTextBox is disabled ([see example]({% slug disabled_maskedtextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the MaskedTextBox is in its read-only state ([see example]({% slug readonly_maskedtextbox %})).\n */\n this.readonly = false;\n this.hostClasses = true;\n /**\n * Represents a prompt character for the masked value.\n * @default `_`\n */\n this.prompt = '_';\n /**\n * Indicates a character which represents an empty position in the raw value.\n * @default ' '\n */\n this.promptPlaceholder = ' ';\n /**\n * Indicates whether to include literals in the raw value ([see example]({% slug value_maskedtextbox %})).\n * @default false\n */\n this.includeLiterals = false;\n /**\n * Specifies if the mask should be shown on focus for empty value.\n */\n this.maskOnFocus = false;\n /**\n * Determines whether the built-in mask validator is enforced when a form is validated\n * ([see example]({% slug validation_maskedtextbox %})).\n * @default true\n */\n this.maskValidation = true;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the `input` element.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the `input` element gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the value changes.\n */\n this.valueChange = new EventEmitter();\n this.focusClick = false;\n this.defaultRules = {\n \"#\": /[\\d\\s\\+\\-]/,\n \"&\": /[\\S]/,\n \"0\": /[\\d]/,\n \"9\": /[\\d\\s]/,\n \"?\": /[a-zA-Z\\s]/,\n \"A\": /[a-zA-Z0-9]/,\n \"C\": /./,\n \"L\": /[a-zA-Z]/,\n \"a\": /[a-zA-Z0-9\\s]/\n };\n this.isPasted = false;\n this.selection = [0, 0];\n /**\n * @hidden\n */\n this.handleFocus = () => {\n this.focused = true;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.service.maskRaw(this.value));\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => { this.setSelection(0, 0); }, 0);\n });\n }\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleClick = () => {\n if (this.focused && !this.focusClick) {\n this.focusClick = true;\n const { selectionStart, selectionEnd } = this.input.nativeElement;\n if (selectionStart === selectionEnd) {\n this.setFocusSelection();\n }\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n this.focusClick = false;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.maskedValue);\n }\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onTouched();\n this.onBlur.emit();\n });\n }\n };\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this.direction = rtl ? 'rtl' : 'ltr';\n this.updateService();\n }\n get hostDisabledClass() {\n return this.disabled;\n }\n /**\n * Exposes the RegExp-based mask validation array ([see example]({% slug masks_maskedtextbox %})).\n */\n get rules() {\n return this._rules || this.defaultRules;\n }\n set rules(value) {\n this._rules = Object.assign({}, this.defaultRules, value);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n ngOnInit() {\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the MaskedTextBox is empty.\n */\n isEmpty() {\n if (this.input) {\n return !Boolean(this.input.nativeElement.value);\n }\n }\n /**\n * @hidden\n */\n handleDragDrop() {\n return false;\n }\n /**\n * Focuses the MaskedTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.focus();\n this.setFocusSelection();\n }\n /**\n * Blurs the MaskedTextBox.\n */\n blur() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.blur();\n }\n /**\n * @hidden\n */\n pasteHandler(e) {\n const { selectionStart, selectionEnd } = e.target;\n if (selectionEnd === selectionStart) {\n return;\n }\n this.isPasted = true;\n this.selection = [selectionStart, selectionEnd];\n }\n /**\n * @hidden\n */\n inputHandler(e) {\n const value = e.target.value;\n const [start, end] = this.selection;\n if (!this.mask) {\n this.updateValue(value);\n this.isPasted = false;\n return;\n }\n let result;\n if (this.isPasted) {\n this.isPasted = false;\n const rightPart = this.maskedValue.length - end;\n const to = value.length - rightPart;\n result = this.service.maskInRange(value.slice(start, to), this.maskedValue, start, end);\n }\n else {\n result = this.service.maskInput(value, this.maskedValue, e.target.selectionStart);\n }\n this.updateInput(result.value, result.selection);\n this.updateValue(result.value);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.value) {\n this.value = this.normalizeValue();\n }\n if (!this.mask) {\n this.updateInput(this.value);\n return;\n }\n const next = this.extractChanges(changes);\n this.updateService(next);\n if (isChanged('value', changes)) {\n const maskedValue = this.service.maskRaw(this.value);\n if (maskedValue !== this.maskedValue) {\n this.updateInput(maskedValue);\n }\n }\n else if (anyChanged(['promptPlaceholder', 'includeLiterals'], changes)) {\n resolvedPromise.then(() => {\n this.updateValue(this.maskedValue);\n });\n }\n else {\n this.updateInput(this.service.maskRaw(this.value));\n }\n }\n /**\n * @hidden\n * Writes a new value to the element.\n */\n writeValue(value) {\n this.value = this.normalizeValue(value);\n this.updateInput(this.service.maskRaw(this.value));\n }\n /**\n * @hidden\n * Sets the function that will be called when a `change` event is triggered.\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * @hidden\n * Sets the function that will be called when a `touch` event is triggered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n validate(_) {\n if (this.maskValidation === false || !this.mask) {\n return null;\n }\n if (!this.service.validationValue(this.maskedValue)) {\n return null;\n }\n if (this.maskedValue.indexOf(this.prompt) !== -1) {\n return {\n patternError: {\n mask: this.mask,\n maskedValue: this.maskedValue,\n value: this.value\n }\n };\n }\n return null;\n }\n /**\n * @hidden\n */\n updateValue(maskedValue) {\n if (this.mask && !this.service.validationValue(maskedValue)) {\n this.value = '';\n }\n else {\n this.value = this.service.rawValue(maskedValue);\n }\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n updateInput(maskedValue = '', selection) {\n this.maskedValue = maskedValue;\n const value = this.maskOnFocus && !this.focused && this.emptyMask ? '' : maskedValue;\n this.renderer.setProperty(this.input.nativeElement, \"value\", value);\n if (selection !== undefined) {\n this.setSelection(selection, selection);\n }\n }\n extractChanges(changes) {\n return Object.keys(changes).filter(key => key !== 'rules').reduce((obj, key) => {\n obj[key] = changes[key].currentValue;\n return obj;\n }, {}); // tslint:disable-line:align\n }\n updateService(extra) {\n const config = Object.assign({\n includeLiterals: this.includeLiterals,\n mask: this.mask,\n prompt: this.prompt,\n promptPlaceholder: this.promptPlaceholder,\n rules: this.rules\n }, extra); // tslint:disable-line:align\n this.service.update(config);\n }\n setSelection(start = this.selection[0], end = this.selection[1]) {\n if (this.focused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n get emptyMask() {\n return this.service.maskRaw() === this.maskedValue;\n }\n setFocusSelection() {\n const selectionStart = this.input.nativeElement.selectionStart;\n const index = this.maskedValue ? this.maskedValue.indexOf(this.prompt) : 0;\n if (index >= 0 && index < selectionStart) {\n this.selection = [index, index];\n this.setSelection();\n }\n }\n get focused() {\n return this.isFocused;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(element, FOCUSED$3);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$3);\n }\n this.isFocused = value;\n }\n }\n normalizeValue(value = this.value) {\n const present = isPresent(value);\n if (present && typeof value !== 'string') {\n if (isDevMode()) {\n throw new Error('The MaskedTextBox component supports only string values.');\n }\n return String(value);\n }\n return present ? value : '';\n }\n}\nMaskedTextBoxComponent.ɵfac = function MaskedTextBoxComponent_Factory(t) { return new (t || MaskedTextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(MaskingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nMaskedTextBoxComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MaskedTextBoxComponent, selectors: [[\"kendo-maskedtextbox\"]], viewQuery: function MaskedTextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c38, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 7, hostBindings: function MaskedTextBoxComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"paste\", function MaskedTextBoxComponent_paste_HostBindingHandler($event) { return ctx.pasteHandler($event); })(\"input\", function MaskedTextBoxComponent_input_HostBindingHandler($event) { return ctx.inputHandler($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-maskedtextbox\", ctx.hostClasses)(\"k-state-disabled\", ctx.hostDisabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", prompt: \"prompt\", promptPlaceholder: \"promptPlaceholder\", includeLiterals: \"includeLiterals\", maskOnFocus: \"maskOnFocus\", maskValidation: \"maskValidation\", tabindex: \"tabindex\", rules: \"rules\", tabIndex: \"tabIndex\", value: \"value\", title: \"title\", mask: \"mask\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, exportAs: [\"kendoMaskedTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* tslint:disable-line */\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 2, vars: 12, consts: [[\"type\", \"text\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"k-textbox\", 3, \"id\", \"tabindex\", \"disabled\", \"readonly\", \"kendoEventsOutsideAngular\"], [\"input\", \"\"]], template: function MaskedTextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 0, 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"tabindex\", ctx.tabIndex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction5(6, _c39, ctx.handleFocus, ctx.handleBlur, ctx.handleClick, ctx.handleDragDrop, ctx.handleDragDrop));\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, directives: [ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n/** @nocollapse */\nMaskedTextBoxComponent.ctorParameters = () => [\n { type: MaskingService },\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone },\n { type: Injector },\n { type: ChangeDetectorRef },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nMaskedTextBoxComponent.propDecorators = {\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n title: [{ type: Input }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-maskedtextbox',] }],\n hostDisabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n mask: [{ type: Input }],\n value: [{ type: Input }],\n rules: [{ type: Input }],\n prompt: [{ type: Input }],\n promptPlaceholder: [{ type: Input }],\n includeLiterals: [{ type: Input }],\n maskOnFocus: [{ type: Input }],\n maskValidation: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n valueChange: [{ type: Output }],\n input: [{ type: ViewChild, args: ['input', { static: true },] }],\n pasteHandler: [{ type: HostListener, args: ['paste', ['$event'],] }],\n inputHandler: [{ type: HostListener, args: ['input', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MaskedTextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoMaskedTextBox',\n providers: [\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* tslint:disable-line */\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent)\n }\n ],\n selector: 'kendo-maskedtextbox',\n template: `\n \n `\n }]\n }], function () { return [{ type: MaskingService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-maskedtextbox']\n }], prompt: [{\n type: Input\n }], promptPlaceholder: [{\n type: Input\n }], includeLiterals: [{\n type: Input\n }], maskOnFocus: [{\n type: Input\n }], maskValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostDisabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], rules: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], \n /**\n * @hidden\n */\n pasteHandler: [{\n type: HostListener,\n args: ['paste', ['$event']]\n }], \n /**\n * @hidden\n */\n inputHandler: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], value: [{\n type: Input\n }], title: [{\n type: Input\n }], mask: [{\n type: Input\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }] }); })();\n\n/* tslint:disable:component-selector */\n/**\n * @hidden\n */\nclass SliderTick {\n constructor(value) {\n this.value = value;\n this.classes = {\n 'k-tick': true\n };\n }\n}\n/**\n * @hidden\n */\nclass SliderTicksComponent {\n constructor(rtl) {\n this.rtl = rtl;\n this.wrapperClasses = 'k-reset k-slider-items';\n this.ticks = [];\n }\n ngOnChanges(_) {\n this.createTicks();\n }\n createTicks() {\n const count = calculateTicksCount(this.min, this.max, this.step);\n const largeStep = this.largeStep;\n const tickValueProps = {\n max: this.max,\n min: this.min,\n smallStep: this.step\n };\n let result = [];\n for (let i = 0; i < count; i++) {\n result.push(new SliderTick(calculateValueFromTick(i, tickValueProps)));\n if (largeStep && i % largeStep === 0) {\n result[i].large = true;\n result[i].classes['k-tick-large'] = true;\n }\n }\n if (this.rtl || this.vertical) {\n result = result.reverse();\n }\n if (result.length > 0) {\n Object.assign(result[0].classes, this.endTickClasses(true));\n Object.assign(result[result.length - 1].classes, this.endTickClasses(false));\n }\n this.ticks = result;\n }\n endTickClasses(first) {\n return {\n 'k-first': (first && !this.vertical) || (!first && this.vertical),\n 'k-last': (!first && !this.vertical) || (first && this.vertical)\n };\n }\n}\nSliderTicksComponent.ɵfac = function SliderTicksComponent_Factory(t) { return new (t || SliderTicksComponent)(ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nSliderTicksComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SliderTicksComponent, selectors: [[\"\", \"kendoSliderTicks\", \"\"]], viewQuery: function SliderTicksComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c40, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tickElements = _t);\n } }, hostVars: 2, hostBindings: function SliderTicksComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassMap(ctx.wrapperClasses);\n } }, inputs: { tickTitle: \"tickTitle\", vertical: \"vertical\", step: \"step\", largeStep: \"largeStep\", min: \"min\", max: \"max\", labelTemplate: \"labelTemplate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c41, decls: 3, vars: 1, consts: [[\"role\", \"presentation\", 3, \"ngClass\", \"title\", 4, \"ngFor\", \"ngForOf\"], [\"defaultLabel\", \"\"], [\"role\", \"presentation\", 3, \"ngClass\", \"title\"], [\"tickElement\", \"\"], [3, \"ngSwitch\"], [\"class\", \"k-label\", 4, \"ngSwitchCase\"], [4, \"ngSwitchCase\"], [1, \"k-label\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function SliderTicksComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, SliderTicksComponent_li_0_Template, 5, 5, \"li\", 0);\n ɵngcc0.ɵɵtemplate(1, SliderTicksComponent_ng_template_1_Template, 1, 1, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.ticks);\n } }, directives: [ɵngcc3.NgForOf, ɵngcc3.NgClass, ɵngcc3.NgSwitch, ɵngcc3.NgSwitchCase, ɵngcc3.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nSliderTicksComponent.ctorParameters = () => [\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nSliderTicksComponent.propDecorators = {\n wrapperClasses: [{ type: HostBinding, args: ['class',] }],\n tickTitle: [{ type: Input }],\n vertical: [{ type: Input }],\n step: [{ type: Input }],\n largeStep: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n labelTemplate: [{ type: Input }],\n tickElements: [{ type: ViewChildren, args: ['tickElement',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SliderTicksComponent, [{\n type: Component,\n args: [{\n selector: '[kendoSliderTicks]',\n template: `\n
  • \n \n \n \n \n \n  \n \n
  • \n\n \n {{ tickTitle(value) }}\n \n `\n }]\n }], function () { return [{ type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { wrapperClasses: [{\n type: HostBinding,\n args: ['class']\n }], tickTitle: [{\n type: Input\n }], vertical: [{\n type: Input\n }], step: [{\n type: Input\n }], largeStep: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], tickElements: [{\n type: ViewChildren,\n args: ['tickElement']\n }] }); })();\n\n/**\n * @hidden\n */\nclass SlidersCommonModule {\n}\nSlidersCommonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SlidersCommonModule });\nSlidersCommonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SlidersCommonModule_Factory(t) { return new (t || SlidersCommonModule)(); }, imports: [[CommonModule, DraggableModule, EventsModule, ResizeSensorModule], DraggableModule,\n EventsModule,\n ResizeSensorModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SlidersCommonModule, { declarations: function () { return [SliderTicksComponent, LabelTemplateDirective]; }, imports: function () { return [CommonModule, DraggableModule, EventsModule, ResizeSensorModule]; }, exports: function () { return [LabelTemplateDirective, SliderTicksComponent, DraggableModule,\n EventsModule,\n ResizeSensorModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SlidersCommonModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SliderTicksComponent,\n LabelTemplateDirective\n ],\n exports: [\n LabelTemplateDirective,\n SliderTicksComponent,\n DraggableModule,\n EventsModule,\n ResizeSensorModule\n ],\n imports: [CommonModule, DraggableModule, EventsModule, ResizeSensorModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass SliderMessages extends ComponentMessages {\n}\nSliderMessages.ɵfac = function SliderMessages_Factory(t) { return ɵSliderMessages_BaseFactory(t || SliderMessages); };\nSliderMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SliderMessages, inputs: { decrement: \"decrement\", increment: \"increment\", dragHandle: \"dragHandle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nSliderMessages.propDecorators = {\n decrement: [{ type: Input }],\n increment: [{ type: Input }],\n dragHandle: [{ type: Input }]\n};\nconst ɵSliderMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(SliderMessages);\n\n/**\n * @hidden\n */\nclass LocalizedSliderMessagesDirective extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedSliderMessagesDirective.ɵfac = function LocalizedSliderMessagesDirective_Factory(t) { return new (t || LocalizedSliderMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedSliderMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedSliderMessagesDirective, selectors: [[\"\", \"kendoSliderLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedSliderMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedSliderMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages.\n */\nclass SliderCustomMessagesComponent extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nSliderCustomMessagesComponent.ɵfac = function SliderCustomMessagesComponent_Factory(t) { return new (t || SliderCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nSliderCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SliderCustomMessagesComponent, selectors: [[\"kendo-slider-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SliderCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nSliderCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SliderCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-slider-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Slider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { SliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, SliderModule], // import Slider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass SliderModule {\n}\nSliderModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SliderModule });\nSliderModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SliderModule_Factory(t) { return new (t || SliderModule)(); }, imports: [[CommonModule, SlidersCommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SliderModule, { declarations: function () { return [SliderComponent, SliderCustomMessagesComponent, LocalizedSliderMessagesDirective]; }, imports: function () { return [CommonModule, SlidersCommonModule]; }, exports: function () { return [SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, LocalizedSliderMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SliderModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LocalizedSliderMessagesDirective\n ],\n exports: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LabelTemplateDirective,\n LocalizedSliderMessagesDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass RangeSliderMessages extends ComponentMessages {\n}\nRangeSliderMessages.ɵfac = function RangeSliderMessages_Factory(t) { return ɵRangeSliderMessages_BaseFactory(t || RangeSliderMessages); };\nRangeSliderMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RangeSliderMessages, inputs: { dragHandleStart: \"dragHandleStart\", dragHandleEnd: \"dragHandleEnd\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nRangeSliderMessages.propDecorators = {\n dragHandleStart: [{ type: Input }],\n dragHandleEnd: [{ type: Input }]\n};\nconst ɵRangeSliderMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(RangeSliderMessages);\n\n/**\n * @hidden\n */\nclass LocalizedRangeSliderMessagesDirective extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedRangeSliderMessagesDirective.ɵfac = function LocalizedRangeSliderMessagesDirective_Factory(t) { return new (t || LocalizedRangeSliderMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedRangeSliderMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedRangeSliderMessagesDirective, selectors: [[\"\", \"kendoSliderLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedRangeSliderMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedRangeSliderMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages.\n */\nclass RangeSliderCustomMessagesComponent extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nRangeSliderCustomMessagesComponent.ɵfac = function RangeSliderCustomMessagesComponent_Factory(t) { return new (t || RangeSliderCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nRangeSliderCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: RangeSliderCustomMessagesComponent, selectors: [[\"kendo-rangeslider-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function RangeSliderCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nRangeSliderCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RangeSliderCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-rangeslider-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RangeSlider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { RangeSliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, RangeSliderModule], // import RangeSlider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass RangeSliderModule {\n}\nRangeSliderModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: RangeSliderModule });\nRangeSliderModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function RangeSliderModule_Factory(t) { return new (t || RangeSliderModule)(); }, imports: [[CommonModule, SlidersCommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RangeSliderModule, { declarations: function () { return [RangeSliderComponent, RangeSliderCustomMessagesComponent, LocalizedRangeSliderMessagesDirective]; }, imports: function () { return [CommonModule, SlidersCommonModule]; }, exports: function () { return [RangeSliderComponent, RangeSliderCustomMessagesComponent, LocalizedRangeSliderMessagesDirective, LabelTemplateDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RangeSliderModule, [{\n type: NgModule,\n args: [{\n declarations: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective\n ],\n exports: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective,\n LabelTemplateDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { on: \"on\", off: \"off\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n on: [{ type: Input }],\n off: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedSwitchMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedSwitchMessagesDirective.ɵfac = function LocalizedSwitchMessagesDirective_Factory(t) { return new (t || LocalizedSwitchMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedSwitchMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedSwitchMessagesDirective, selectors: [[\"\", \"kendoSwitchLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedSwitchMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedSwitchMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSwitchLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages.\n */\nclass SwitchCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nSwitchCustomMessagesComponent.ɵfac = function SwitchCustomMessagesComponent_Factory(t) { return new (t || SwitchCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nSwitchCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SwitchCustomMessagesComponent, selectors: [[\"kendo-switch-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SwitchCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nSwitchCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SwitchCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-switch-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Switch component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Switch module\n * import { SwitchModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, SwitchModule], // import Switch module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass SwitchModule {\n}\nSwitchModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SwitchModule });\nSwitchModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SwitchModule_Factory(t) { return new (t || SwitchModule)(); }, imports: [[CommonModule, EventsModule, ResizeSensorModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SwitchModule, { declarations: function () { return [SwitchComponent, SwitchCustomMessagesComponent, LocalizedSwitchMessagesDirective]; }, imports: function () { return [CommonModule, EventsModule, ResizeSensorModule]; }, exports: function () { return [SwitchComponent, SwitchCustomMessagesComponent, LocalizedSwitchMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SwitchModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n exports: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n imports: [CommonModule, EventsModule, ResizeSensorModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass LocalizedNumericTextBoxMessagesDirective extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedNumericTextBoxMessagesDirective.ɵfac = function LocalizedNumericTextBoxMessagesDirective_Factory(t) { return new (t || LocalizedNumericTextBoxMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedNumericTextBoxMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedNumericTextBoxMessagesDirective, selectors: [[\"\", \"kendoNumericTextBoxLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedNumericTextBoxMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedNumericTextBoxMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoNumericTextBoxLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the NumericTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the NumericTextBox module\n * import { NumericTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, NumericTextBoxModule], // import NumericTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass NumericTextBoxModule {\n}\nNumericTextBoxModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: NumericTextBoxModule });\nNumericTextBoxModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function NumericTextBoxModule_Factory(t) { return new (t || NumericTextBoxModule)(); }, imports: [[CommonModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(NumericTextBoxModule, { declarations: function () { return [LocalizedNumericTextBoxMessagesDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericTextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [\n LocalizedNumericTextBoxMessagesDirective,\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n exports: [\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the MaskedTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MaskedTextBox module\n * import { MaskedTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MaskedTextBoxModule], // import MaskedTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass MaskedTextBoxModule {\n}\nMaskedTextBoxModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MaskedTextBoxModule });\nMaskedTextBoxModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MaskedTextBoxModule_Factory(t) { return new (t || MaskedTextBoxModule)(); }, imports: [[CommonModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MaskedTextBoxModule, { declarations: function () { return [MaskedTextBoxComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [MaskedTextBoxComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MaskedTextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [MaskedTextBoxComponent],\n exports: [MaskedTextBoxComponent],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * Specifies the adornments in the suffix container ([see examples]({% slug adornments_textbox %}#toc-suffixadornments)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextBoxSuffixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTextBoxSuffixTemplateDirective.ɵfac = function TextBoxSuffixTemplateDirective_Factory(t) { return new (t || TextBoxSuffixTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nTextBoxSuffixTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextBoxSuffixTemplateDirective, selectors: [[\"\", \"kendoTextBoxSuffixTemplate\", \"\"]] });\n/** @nocollapse */\nTextBoxSuffixTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxSuffixTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxSuffixTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Specifies the adornments in the prefix container ([see examples]({% slug adornments_textbox %}#toc-prefixadornments)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextBoxPrefixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTextBoxPrefixTemplateDirective.ɵfac = function TextBoxPrefixTemplateDirective_Factory(t) { return new (t || TextBoxPrefixTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nTextBoxPrefixTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextBoxPrefixTemplateDirective, selectors: [[\"\", \"kendoTextBoxPrefixTemplate\", \"\"]] });\n/** @nocollapse */\nTextBoxPrefixTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxPrefixTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxPrefixTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\nclass TextBoxComponent {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * Sets the `title` attribute of the `input` element of the TextBox.\n */\n this.title = '';\n /**\n * Sets the disabled state of the component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Specifies the `tabindex` of the TextBox.\n *\n * @default 0\n */\n this.tabindex = 0;\n /**\n * Provides a value for the TextBox.\n */\n this.value = null;\n /**\n * Determines whether the whole value will be selected when the TextBox is clicked. Defaults to `false`.\n *\n * @default false\n */\n this.selectOnFocus = false;\n /**\n * Specifies when the Success icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * `boolean`—The Success icon is displayed, if the condition given by the developer is met.\n *\n * `initial`—The Success icon will be displayed when the component state is neither `invalid` nor `touched` or `dirty`.\n *\n * @default false\n */\n this.showSuccessIcon = false;\n /**\n * Specifies when the Error icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * * `initial`—The Error icon will be displayed when the component state is\n * `invalid` and `touched` or `dirty`.\n * * `boolean`—The Error icon is displayed, if the condition given by the developer is met.\n *\n * @default false\n */\n this.showErrorIcon = false;\n /**\n * Specifies whether a Clear button will be rendered.\n *\n * @default false\n */\n this.clearButton = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_textbox %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element.\n */\n this.inputFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred.\n */\n this.inputBlur = new EventEmitter();\n /**\n * Fires each time the user focuses the TextBox component.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log('Component is isFocused');\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the TextBox component gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log('Component is blurred');\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n this.hostClass = true;\n this._isFocused = false;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.handleInputFocus = () => {\n if (!this.disabled) {\n if (this.selectOnFocus && this.value) {\n this.ngZone.run(() => {\n setTimeout(() => { this.selectAll(); });\n });\n }\n if (hasObservers(this.onFocus)) {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n if (hasObservers(this.inputFocus)) {\n if (!this.focusChangedProgrammatically || (this.focusChangedProgrammatically && this.clearButtonClicked)) {\n this.ngZone.run(() => {\n this.inputFocus.emit();\n });\n }\n }\n this.ngZone.run(() => {\n this.isFocused = true;\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInputBlur = () => {\n this.changeDetector.markForCheck();\n if (hasObservers(this.inputBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.inputBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInput = (ev) => {\n let incomingValue = ev.target.value;\n this.updateValue(incomingValue);\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get disabledClass() {\n return this.disabled;\n }\n get isFocused() {\n return this.disabled ? false : this._isFocused;\n }\n set isFocused(isFocused) {\n this._isFocused = isFocused;\n }\n ngOnInit() {\n this.control = this.injector.get(NgControl, null);\n this.checkClearButton();\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n ngAfterViewInit() {\n const hostElement = this.hostElement.nativeElement;\n let cursorInsideWrapper = false;\n let tabbing = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n this.isFocused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n const closestTextbox = closest(args.relatedTarget, (element) => element === this.hostElement.nativeElement);\n if (!closestTextbox) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper && !this.clearButtonClicked) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n ngOnChanges(changes) {\n if (changes.disabled || changes.readonly) {\n this.checkClearButton();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * Focuses the TextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.focusChangedProgrammatically = true;\n this.isFocused = true;\n this.input.nativeElement.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the TextBox.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const isFocusedElement = this.hostElement.nativeElement.querySelector(':focus');\n if (isFocusedElement) {\n isFocusedElement.blur();\n }\n this.isFocused = false;\n this.focusChangedProgrammatically = false;\n }\n /**\n * @hidden\n */\n clearTitle() {\n return this.localizationService.get('clear');\n }\n /**\n * @hidden\n */\n checkClearButton() {\n this.showClearButton =\n !this.disabled &&\n !this.readonly &&\n this.clearButton &&\n !!this.value;\n }\n /**\n * @hidden\n */\n clearValue(ev) {\n if (ev) {\n ev.preventDefault();\n }\n this.clearButtonClicked = true;\n this.input.nativeElement.value = '';\n this.input.nativeElement.focus();\n this.updateValue(null);\n this.checkClearButton();\n this.clearButtonClicked = false;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.checkClearButton();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n /**\n * @hidden\n */\n showSuccessInitial() {\n if (!this.control) {\n return false;\n }\n const { valid, dirty, touched } = this.control;\n return valid && (dirty || touched);\n }\n /**\n * @hidden\n */\n get successIconClasses() {\n return this.successIcon\n ? `k-text-success ${this.successIcon}`\n : `k-text-success k-icon k-i-check-outline`;\n }\n /**\n * @hidden\n */\n get errorIconClasses() {\n return this.errorIcon\n ? `k-text-error ${this.errorIcon}`\n : `k-text-error k-icon k-i-warning`;\n }\n /**\n * @hidden\n */\n get clearButtonClasses() {\n return this.clearButtonIcon\n ? this.clearButtonIcon\n : `k-icon k-i-close-circle`;\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrorIcon === 'initial'\n ? this.showErrorsInitial()\n : this.showErrorIcon;\n }\n /**\n * @hidden\n */\n get isSuccessful() {\n return this.showSuccessIcon === 'initial'\n ? this.showSuccessInitial()\n : this.showSuccessIcon;\n }\n setSelection(start, end) {\n if (this.isFocused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n selectAll() {\n if (this.value) {\n this.setSelection(0, this.value.length);\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.checkClearButton();\n this.changeDetector.markForCheck();\n });\n }\n }\n handleBlur() {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n this.isFocused = false;\n });\n }\n}\nTextBoxComponent.ɵfac = function TextBoxComponent_Factory(t) { return new (t || TextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nTextBoxComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TextBoxComponent, selectors: [[\"kendo-textbox\"]], contentQueries: function TextBoxComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextBoxSuffixTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextBoxPrefixTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.suffixTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.prefixTemplate = _t.first);\n } }, viewQuery: function TextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c38, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 7, hostBindings: function TextBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textbox\", ctx.hostClass)(\"k-state-focused\", ctx.isFocused)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { title: \"title\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", value: \"value\", selectOnFocus: \"selectOnFocus\", showSuccessIcon: \"showSuccessIcon\", showErrorIcon: \"showErrorIcon\", clearButton: \"clearButton\", tabIndex: \"tabIndex\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", clearButtonIcon: \"clearButtonIcon\", placeholder: \"placeholder\" }, outputs: { valueChange: \"valueChange\", inputFocus: \"inputFocus\", inputBlur: \"inputBlur\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 16, consts: function () { let i18n_42; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Clear** button in the TextBox.\n * @meaning kendo.textbox.clear\n */\n const MSG_EXTERNAL_2651889799249671820$$DIST_FESM2015_INDEX_JS_43 = goog.getMsg(\"Clear\");\n i18n_42 = MSG_EXTERNAL_2651889799249671820$$DIST_FESM2015_INDEX_JS_43;\n }\n else {\n i18n_42 = $localize `:kendo.textbox.clear|The title for the **Clear** button in the TextBox.␟e6edd360fd0d3c873c0d94a3aecd3c407d31da5a␟2651889799249671820:Clear`;\n } return [[\"kendoTextBoxLocalizedMessages\", \"\", \"clear\", i18n_42], [1, \"k-input-prefix\"], [4, \"ngIf\"], [1, \"k-input\", 3, \"disabled\", \"readonly\", \"value\", \"kendoEventsOutsideAngular\"], [\"input\", \"\"], [1, \"k-input-suffix\"], [3, \"ngClass\", 4, \"ngIf\"], [\"role\", \"button\", \"class\", \"k-clear-value\", 3, \"tabindex\", \"title\", \"click\", \"mousedown\", \"keydown.enter\", \"keydown.space\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\"], [3, \"ngClass\"], [\"role\", \"button\", 1, \"k-clear-value\", 3, \"tabindex\", \"title\", \"click\", \"mousedown\", \"keydown.enter\", \"keydown.space\"]]; }, template: function TextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1);\n ɵngcc0.ɵɵtemplate(2, TextBoxComponent_2_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(3, \"input\", 3, 4);\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵtemplate(6, TextBoxComponent_span_6_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(7, TextBoxComponent_span_7_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(8, TextBoxComponent_span_8_Template, 2, 4, \"span\", 7);\n ɵngcc0.ɵɵtemplate(9, TextBoxComponent_9_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.prefixTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"value\", ctx.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(12, _c44, ctx.handleInputFocus, ctx.handleInputBlur, ctx.handleInput));\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? undefined : ctx.tabindex)(\"placeholder\", ctx.placeholder)(\"title\", ctx.title);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasErrors);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isSuccessful);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showClearButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.suffixTemplate);\n } }, directives: function () { return [LocalizedTextBoxMessagesDirective, ɵngcc3.NgIf, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgTemplateOutlet, ɵngcc3.NgClass]; }, encapsulation: 2 });\n/** @nocollapse */\nTextBoxComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: Renderer2 },\n { type: Injector },\n { type: ElementRef }\n];\nTextBoxComponent.propDecorators = {\n title: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n tabindex: [{ type: Input }],\n value: [{ type: Input }],\n selectOnFocus: [{ type: Input }],\n showSuccessIcon: [{ type: Input }],\n showErrorIcon: [{ type: Input }],\n clearButton: [{ type: Input }],\n successIcon: [{ type: Input }],\n errorIcon: [{ type: Input }],\n clearButtonIcon: [{ type: Input }],\n tabIndex: [{ type: Input }],\n placeholder: [{ type: Input }],\n valueChange: [{ type: Output }],\n inputFocus: [{ type: Output }],\n inputBlur: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n input: [{ type: ViewChild, args: ['input', { static: true },] }],\n suffixTemplate: [{ type: ContentChild, args: [TextBoxSuffixTemplateDirective,] }],\n prefixTemplate: [{ type: ContentChild, args: [TextBoxPrefixTemplateDirective,] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n hostClass: [{ type: HostBinding, args: ['class.k-textbox',] }],\n isFocused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent) }\n ],\n selector: 'kendo-textbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ElementRef }]; }, { title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], value: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], showSuccessIcon: [{\n type: Input\n }], showErrorIcon: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], inputFocus: [{\n type: Output\n }], inputBlur: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }], isFocused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabIndex: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], clearButtonIcon: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], suffixTemplate: [{\n type: ContentChild,\n args: [TextBoxSuffixTemplateDirective]\n }], prefixTemplate: [{\n type: ContentChild,\n args: [TextBoxPrefixTemplateDirective]\n }] }); })();\n\n/**\n * Specifies a separator in the content of the TextBox ([see examples]({% slug adornments_textbox %}#toc-separator)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nclass TextBoxSeparatorComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nTextBoxSeparatorComponent.ɵfac = function TextBoxSeparatorComponent_Factory(t) { return new (t || TextBoxSeparatorComponent)(); };\nTextBoxSeparatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TextBoxSeparatorComponent, selectors: [[\"kendo-textbox-separator\"]], hostVars: 2, hostBindings: function TextBoxSeparatorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-textbox-separator\", ctx.hostClass);\n } }, decls: 0, vars: 0, template: function TextBoxSeparatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\nTextBoxSeparatorComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-textbox-separator',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxSeparatorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-textbox-separator',\n template: ``\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-textbox-separator']\n }] }); })();\n\n/**\n * @hidden\n */\nclass TextBoxMessages extends ComponentMessages {\n}\nTextBoxMessages.ɵfac = function TextBoxMessages_Factory(t) { return ɵTextBoxMessages_BaseFactory(t || TextBoxMessages); };\nTextBoxMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TextBoxMessages, inputs: { clear: \"clear\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nTextBoxMessages.propDecorators = {\n clear: [{ type: Input }]\n};\nconst ɵTextBoxMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(TextBoxMessages);\n\n/**\n * Custom component messages override default component messages.\n */\nclass TextBoxCustomMessagesComponent extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTextBoxCustomMessagesComponent.ɵfac = function TextBoxCustomMessagesComponent_Factory(t) { return new (t || TextBoxCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nTextBoxCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TextBoxCustomMessagesComponent, selectors: [[\"kendo-textbox-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TextBoxCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nTextBoxCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-textbox-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass LocalizedTextBoxMessagesDirective extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedTextBoxMessagesDirective.ɵfac = function LocalizedTextBoxMessagesDirective_Factory(t) { return new (t || LocalizedTextBoxMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedTextBoxMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedTextBoxMessagesDirective, selectors: [[\"\", \"kendoTextBoxLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedTextBoxMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedTextBoxMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTextBoxLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the TextBox module\n * import { TextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TextBoxModule], // import TextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass TextBoxModule {\n}\nTextBoxModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TextBoxModule });\nTextBoxModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TextBoxModule_Factory(t) { return new (t || TextBoxModule)(); }, imports: [[CommonModule, EventsModule], EventsModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TextBoxModule, { declarations: function () { return [TextBoxDirective, TextAreaDirective, TextBoxContainerComponent, TextBoxComponent, TextBoxSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, LocalizedTextBoxMessagesDirective]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [TextBoxDirective, TextAreaDirective, TextBoxContainerComponent, TextBoxComponent, TextBoxSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, EventsModule, TextBoxCustomMessagesComponent, LocalizedTextBoxMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [\n TextBoxDirective,\n TextAreaDirective,\n TextBoxContainerComponent,\n TextBoxComponent,\n TextBoxSeparatorComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective\n ],\n exports: [\n TextBoxDirective,\n TextAreaDirective,\n TextBoxContainerComponent,\n TextBoxComponent,\n TextBoxSeparatorComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n EventsModule,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective\n ],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns - `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * Provides information about the current active color and gives the option to prevent the opening of the popup.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public handleActiveColorClick(event: ActiveColorClickEvent): void {\n * event.preventOpen();\n *\n * console.log('Open prevented:', event.isOpenPrevented());\n * console.log('Current color:', event.color);\n * }\n * }\n * ```\n */\nclass ActiveColorClickEvent {\n /**\n * @hidden\n * @param color Represents the current value of the ColorPicker.\n */\n constructor(color) {\n this.color = color;\n this.openPrevented = false;\n }\n /**\n * Prevents the opening of the popup.\n */\n preventOpen() {\n this.openPrevented = true;\n }\n /**\n * Returns `true` if the popup opening is prevented by any of its subscribers.\n *\n * @returns - Returns `true` if the open action was prevented. Otherwise, returns `false`.\n */\n isOpenPrevented() {\n return this.openPrevented;\n }\n}\n\n/**\n * @hidden\n *\n * Returns the hex or rgba string representation of the color.\n */\nconst parseColor$1 = (value, format, safe = true) => {\n const allowedFormats = ['hex', 'rgba', 'name'];\n if (allowedFormats.indexOf(format) === -1) {\n throw new Error(`Unsupported color output format '${format}'. The available options are 'hex', 'rgba' or 'name'.`);\n }\n if (!isPresent(value)) {\n return;\n }\n if (format === 'name') {\n return nameFormat(value, safe);\n }\n const parsedColor = parseColor(value.trim(), safe);\n if (!isPresent(parsedColor)) {\n return;\n }\n return format === 'hex' ? parsedColor.toCss() : parsedColor.toCssRgba();\n};\n/**\n * @hidden\n *\n * Returns an HSV object representation of the color string.\n */\nconst getHSV = (value, safe = true) => {\n const parsed = parseColor(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toHSV();\n};\n/**\n * @hidden\n *\n * Returns an RGBA object representation of the color string.\n */\nconst getRGBA = (value, safe = true) => {\n const parsed = parseColor(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toBytes();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromHSV = (hsva) => {\n const hue = fitIntoBounds(hsva.h, 0, 359.9);\n const saturation = fitIntoBounds(hsva.s, 0, 1);\n const value = fitIntoBounds(hsva.v, 0, 1);\n const alpha = fitIntoBounds(hsva.a, 0, 1);\n return Color.fromHSV(hue, saturation, value, alpha).toCssRgba();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color based on the `hue`, assuming the `value`, `saturation` and `alpha` have value of `1`.\n */\nconst getColorFromHue = (hue) => {\n return getColorFromHSV({ h: hue, s: 1, v: 1, a: 1 });\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromRGBA = (rgba) => {\n const red = fitIntoBounds(rgba.r, 0, 255);\n const green = fitIntoBounds(rgba.g, 0, 255);\n const blue = fitIntoBounds(rgba.b, 0, 255);\n const alpha = fitIntoBounds(rgba.a, 0, 1);\n return Color.fromBytes(red, green, blue, alpha).toCssRgba();\n};\n/**\n *\n * @hidden\n */\nfunction nameFormat(value, safe) {\n value = value.toLowerCase().trim();\n if (isPresent(namedColors[value])) {\n return value;\n }\n if (parseColor(value, safe)) {\n value = parseColor(value, safe).toHex();\n }\n const key = Object.keys(namedColors).find(key => namedColors[key] === value);\n if (!key && !safe) {\n throw new Error(`The provided color ${value} is not supported for 'format=\"name\"' property.To display ${value} color, the component 'format' property shoud be set to 'hex' or 'rgba' `);\n }\n return key;\n}\n\n// tslint:disable:max-line-length\n/**\n * @hidden\n */\nconst PALETTEPRESETS = {\n basic: {\n colors: '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7',\n columns: 10\n },\n office: {\n colors: 'ffffff, 000000, e6e6e6, 435569, 4371c4, ed7e32, a5a4a5, febf04, 5a9bd5, 71ae48, f2f2f3, 7f7f7f, d1cece, d5dde3, dae1f4, fce5d4, deeded, fff2cc, deeaf6, e1efd9, d7d8d8, 585959, aeabab, adbaca, b4c5e7, f6caac, dbdbdb, ffe498, bcd6ee, c5e0b2, bfbfc0, 3f3f3f, 767070, 8595b1, 8fabdb, f5b183, c9c8c9, fed965, 9bc4e5, a8d08d, a5a5a6, 262625, 393939, 334050, 2e5496, c45a11, 7b7b7a, bf9000, 2f75b5, 548235, 7f7f7f, 0b0c0c, 161616, 222a34, 203764, 843d0b, 525252, 7f6000, 1d4d79, 375623',\n columns: 10\n },\n apex: {\n colors: 'ffffff, 000000, c9c2d1, 69676d, ceb966, 9cb084, 6bb1c9, 6585cf, 7e6bc9, a379bb, f2f2f2, 7f7f7f, f4f2f5, e0e0e2, f5f1e0, ebefe6, e1eff4, e0e6f5, e5e1f4, ece4f1, d8d8d8, 595959, e9e6ec, c2c1c5, ebe3c1, d7dfcd, c3dfe9, c1ceeb, cbc3e9, dac9e3, bfbfbf, 3f3f3f, dedae3, a4a3a8, e1d5a3, c3cfb5, a6d0de, a2b5e2, b1a6de, c7aed6, a5a5a5, 262626, 9688a5, 4e4d51, ae9638, 758c5a, 3d8da9, 365bb0, 533da9, 7d4d99, 7f7f7f, 0c0c0c, 635672, 343336, 746425, 4e5d3c, 295e70, 243c75, 372970, 533366',\n columns: 10\n },\n austin: {\n colors: 'ffffff, 000000, caf278, 3e3d2d, 94c600, 71685a, ff6700, 909465, 956b43, fea022, f2f2f2, 7f7f7f, f4fce4, dddcd0, efffc0, e3e1dc, ffe0cb, e8e9df, ece1d6, feecd2, d8d8d8, 595959, e9f9c9, bbb9a1, dfff82, c8c3ba, ffc299, d2d4c0, dac3ad, fed9a6, bfbfbf, 3f3f3f, dff7ae, ada598, cfff43, ada598, ffa365, bcbfa1, c8a585, fec67a, a5a5a5, 262626, a9ea25, 2e2d21, 6f9400, 544e43, bf4d00, 6c6f4b, 6f5032, d77b00, 7f7f7f, 0c0c0c, 74a50f, 1f1e16, 4a6300, 38342d, 7f3300, 484a32, 4a3521, 8f5200',\n columns: 10\n },\n clarity: {\n colors: 'ffffff, 292934, f3f2dc, d2533c, 93a299, ad8f67, 726056, 4c5a6a, 808da0, 79463d, f2f2f2, e7e7ec, e7e5b9, f6dcd8, e9ecea, eee8e0, e4dedb, d8dde3, e5e8ec, e9d6d3, d8d8d8, c4c4d1, d5d185, edbab1, d3d9d6, ded2c2, c9beb8, b2bcc8, ccd1d9, d3aea7, bfbfbf, 8a8aa3, aca73b, e4978a, bec7c1, cdbba3, af9e94, 8c9bac, b2bac6, bd857c, a5a5a5, 56566e, 56531d, a43925, 6b7c72, 866b48, 554840, 39434f, 5c697b, 5a342d, 7f7f7f, 3b3b4b, 22210b, 6d2619, 47534c, 594730, 39302b, 262d35, 3d4652, 3c231e',\n columns: 10\n },\n slipstream: {\n colors: 'ffffff, 000000, b4dcfa, 212745, 4e67c8, 5eccf3, a7ea52, 5dceaf, ff8021, f14124, f2f2f2, 7f7f7f, 8bc9f7, c7cce4, dbe0f4, def4fc, edfadc, def5ef, ffe5d2, fcd9d3, d8d8d8, 595959, 4facf3, 909aca, b8c2e9, beeafa, dbf6b9, beebdf, ffcca6, f9b3a7, bfbfbf, 3f3f3f, 0d78c9, 5967af, 94a3de, 9ee0f7, caf297, 9de1cf, ffb279, f68d7b, a5a5a5, 262626, 063c64, 181d33, 31479f, 11b2eb, 81d319, 34ac8b, d85c00, c3260c, 7f7f7f, 0c0c0c, 021828, 101322, 202f6a, 0b769c, 568c11, 22725c, 903d00, 821908',\n columns: 10\n },\n metro: {\n colors: 'ffffff, 000000, d6ecff, 4e5b6f, 7fd13b, ea157a, feb80a, 00addc, 738ac8, 1ab39f, f2f2f2, 7f7f7f, a7d6ff, d9dde4, e5f5d7, fad0e4, fef0cd, c5f2ff, e2e7f4, c9f7f1, d8d8d8, 595959, 60b5ff, b3bcca, cbecb0, f6a1c9, fee29c, 8be6ff, c7d0e9, 94efe3, bfbfbf, 3f3f3f, 007dea, 8d9baf, b2e389, f272af, fed46b, 51d9ff, aab8de, 5fe7d5, a5a5a5, 262626, 003e75, 3a4453, 5ea226, af0f5b, c58c00, 0081a5, 425ea9, 138677, 7f7f7f, 0c0c0c, 00192e, 272d37, 3f6c19, 750a3d, 835d00, 00566e, 2c3f71, 0c594f',\n columns: 10\n },\n flow: {\n colors: 'ffffff, 000000, dbf5f9, 04617b, 0f6fc6, 009dd9, 0bd0d9, 10cf9b, 7cca62, a5c249, f2f2f2, 7f7f7f, b2e9f2, b4ecfc, c7e2fa, c4eeff, c9fafc, c9faed, e4f4df, edf2da, d8d8d8, 595959, 76d9e8, 6adafa, 90c6f6, 89deff, 93f5f9, 94f6db, cae9c0, dbe6b6, bfbfbf, 3f3f3f, 21b2c8, 20c8f7, 59a9f2, 4fceff, 5df0f6, 5ff2ca, b0dfa0, c9da91, a5a5a5, 262626, 105964, 02485c, 0b5394, 0075a2, 089ca2, 0b9b74, 54a838, 7e9532, 7f7f7f, 0c0c0c, 062328, 01303d, 073763, 004e6c, 05686c, 07674d, 387025, 546321',\n columns: 10\n },\n hardcover: {\n colors: 'ffffff, 000000, ece9c6, 895d1d, 873624, d6862d, d0be40, 877f6c, 972109, aeb795, f2f2f2, 7f7f7f, e1dca5, f2e0c6, f0d0c9, f6e6d5, f5f2d8, e7e5e1, fbc7bc, eef0e9, d8d8d8, 595959, d0c974, e6c28d, e2a293, eeceaa, ece5b2, cfccc3, f78f7a, dee2d4, bfbfbf, 3f3f3f, a29a36, daa454, d4735e, e6b681, e2d88c, b7b2a5, f35838, ced3bf, a5a5a5, 262626, 514d1b, 664515, 65281a, a2641f, a39428, 655f50, 711806, 879464, 7f7f7f, 0c0c0c, 201e0a, 442e0e, 431b11, 6c4315, 6d621a, 433f35, 4b1004, 5a6243',\n columns: 10\n },\n trek: {\n colors: 'ffffff, 000000, fbeec9, 4e3b30, f0a22e, a5644e, b58b80, c3986d, a19574, c17529, f2f2f2, 7f7f7f, f7e09e, e1d6cf, fcecd5, eddfda, f0e7e5, f3eae1, ece9e3, f5e3d1, d8d8d8, 595959, f3cc5f, c4ad9f, f9d9ab, dcc0b6, e1d0cc, e7d5c4, d9d4c7, ebc7a3, bfbfbf, 3f3f3f, d29f0f, a78470, f6c781, cba092, d2b9b2, dbc1a7, c6bfab, e1ac76, a5a5a5, 262626, 694f07, 3a2c24, c87d0e, 7b4b3a, 926255, a17242, 7b7153, 90571e, 7f7f7f, 0c0c0c, 2a1f03, 271d18, 855309, 523226, 614138, 6b4c2c, 524b37, 603a14',\n columns: 10\n },\n verve: {\n colors: 'ffffff, 000000, d2d2d2, 666666, ff388c, e40059, 9c007f, 68007f, 005bd3, 00349e, f2f2f2, 7f7f7f, bdbdbd, e0e0e0, ffd7e8, ffc6dc, ffb8f1, f1b2ff, c3dcff, b8cfff, d8d8d8, 595959, 9d9d9d, c1c1c1, ffafd1, ff8eba, ff71e4, e365ff, 87baff, 72a0ff, bfbfbf, 3f3f3f, 696969, a3a3a3, ff87ba, ff5597, ff2ad7, d519ff, 4b98ff, 2b71ff, a5a5a5, 262626, 343434, 4c4c4c, e90062, ab0042, 75005f, 4e005f, 00449e, 002676, 7f7f7f, 0c0c0c, 151515, 333333, 9b0041, 72002c, 4e003f, 34003f, 002d69, 00194f',\n columns: 10\n },\n monochrome: {\n colors: '000000, 1a1a1a, 333333, 4d4d4d, 666666, 808080, 999999, b3b3b3, cccccc, e6e6e6, f2f2f2, ffffff',\n columns: 12\n },\n accessible: {\n colors: 'black, grey, darkred, red, darkorange, gold, green, blue, darkblue, purple, white, darkgrey, saddlebrown, pink, orange, yellow, lightgreen, lightskyblue, lightblue, mediumpurple',\n columns: 10\n }\n};\n\nconst DEFAULT_PRESET = 'office';\nconst DEFAULT_ACCESSIBLE_PRESET = 'accessible';\nlet serial = 0;\n/**\n * Represents the [Kendo UI ColorPicker component for Angular]({% slug overview_colorpicker %}).\n * Designed to replace the `` HTML5 tag which is not widely supported in browsers.\n */\nclass ColorPickerComponent {\n constructor(popupService, localizationService) {\n this.popupService = popupService;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focusableId = `k-colorpicker-${serial++}`;\n /**\n * Sets what view the ColorPicker will render in the popup.\n */\n this.view = 'gradient';\n /**\n * Sets the read-only state of the ColorPicker.\n */\n this.readonly = false;\n /**\n * Sets the disabled state of the ColorPicker.\n */\n this.disabled = false;\n /**\n * Specifies the output format of the ColorPicker.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * If the `gradient` view is used with the `opacity` option set to true, this setting will be ignored and `rgba` will be used instead.\n *\n * The supported values are:\n * * `rgba` (default)\n * * `hex`\n * * [`name`](https://www.w3.org/wiki/CSS/Properties/color/keywords)\n */\n this.format = 'rgba';\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time ColorPicker is focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the ColorPicker is blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * The [`ActiveColorClickEvent`]({% slug api_inputs_activecolorclickevent %}) event provides the option to prevent the popup opening.\n */\n this.activeColorClick = new EventEmitter();\n this._tabindex = 0;\n this._popupSettings = { animate: true };\n this._paletteSettings = {};\n this._gradientSettings = { opacity: true, clearButton: false };\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the ColorPicker.\n */\n set popupSettings(value) {\n this._popupSettings = Object.assign(this._popupSettings, value);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Configures the palette that is displayed in the ColorPicker popup.\n */\n set paletteSettings(value) {\n this._paletteSettings = Object.assign(this._paletteSettings, value);\n }\n get paletteSettings() {\n return this._paletteSettings;\n }\n /**\n * Configures the gradient that is displayed in the ColorPicker popup.\n */\n set gradientSettings(value) {\n this._gradientSettings = Object.assign(this._gradientSettings, value);\n }\n get gradientSettings() {\n return this._gradientSettings;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Indicates whether the ColorPicker popup is open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * @hidden\n */\n get iconStyles() {\n if (this.iconClass) {\n return this.iconClass;\n }\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n }\n ngOnInit() {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET : DEFAULT_ACCESSIBLE_PRESET;\n const settingsPalette = this._paletteSettings.palette;\n const presetColumns = typeof settingsPalette === 'string' && PALETTEPRESETS[settingsPalette] ?\n PALETTEPRESETS[settingsPalette].columns :\n undefined;\n this._paletteSettings = {\n palette: settingsPalette || defaultPreset,\n tileSize: this._paletteSettings.tileSize || 24,\n columns: this._paletteSettings.columns || presetColumns || 10\n };\n }\n ngOnChanges(changes) {\n if (changes.format && changes.format.currentValue === 'name') {\n this.view = 'palette';\n }\n if (this.view === 'gradient' && this.gradientSettings.opacity) {\n this.format = 'rgba';\n this.value = parseColor$1(this.value, this.format);\n }\n }\n ngOnDestroy() {\n this.closePopup();\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n handleWrapperClick() {\n this.toggleWithEvents(!this.isOpen);\n this.focus();\n }\n /**\n * @hidden\n */\n handleActiveColorClick() {\n this.focus();\n const event = new ActiveColorClickEvent(this.value);\n this.activeColorClick.emit(event);\n if (!event.isOpenPrevented() || this.isOpen) {\n this.handleWrapperClick();\n }\n }\n /**\n * Focuses the wrapper of the ColorPicker.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n this.wrapper.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleWrapperFocus() {\n if (isPresent(this.palette)) {\n this.palette.nativeElement.focus();\n }\n if (this.isFocused) {\n return;\n }\n this.isFocused = true;\n this.onFocus.emit();\n }\n /**\n * Blurs the ColorPicker.\n */\n blur() {\n this.wrapper.nativeElement.blur();\n }\n /**\n * @hidden\n */\n handleWrapperBlur() {\n if (this.isOpen) {\n return;\n }\n this.isFocused = false;\n this.onBlur.emit();\n this.notifyNgTouched();\n }\n /**\n * Clears the color value of the ColorPicker.\n */\n reset() {\n if (!isPresent(this.value)) {\n return;\n }\n this._value = undefined;\n this.notifyNgChanged(undefined);\n }\n /**\n * Toggles the popup of the ColorPicker.\n * Does not trigger the `open` and `close` events of the component.\n *\n * @param open An optional parameter. Specifies whether the popup will be opened or closed.\n */\n toggle(open) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.closePopup();\n open = isPresent(open) ? open : !this.isOpen;\n if (open) {\n this.openPopup();\n }\n }\n /**\n * @hidden\n */\n handleValueChange(color, closePopup) {\n const parsedColor = parseColor$1(color, this.format);\n const valueChange = parsedColor !== this.value;\n if (closePopup) {\n this.toggleWithEvents(false);\n this.focus();\n }\n if (valueChange) {\n this.value = parsedColor;\n this.valueChange.emit(parsedColor);\n this.notifyNgChanged(parsedColor);\n }\n }\n /**\n * @hidden\n */\n handlePopupBlur(event) {\n const focusInPopupElement = this.popupRef.popupElement.contains(event.relatedTarget);\n const wrapperClicked = event.relatedTarget === this.wrapper.nativeElement;\n if (!this.isFocused || wrapperClicked || focusInPopupElement) {\n return;\n }\n this.isFocused = false;\n this.onBlur.emit();\n this.notifyNgTouched();\n this.toggleWithEvents(false);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n handleWrapperKeyDown(event) {\n if (event.keyCode === Keys.ArrowDown || event.keyCode === Keys.Enter) {\n event.preventDefault();\n this.toggleWithEvents(true);\n }\n }\n /**\n * @hidden\n */\n handlePopupKeyDown(keyCode) {\n if (keyCode === Keys.Tab || keyCode === Keys.Escape) {\n this.toggleWithEvents(false);\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n toggleWithEvents(open) {\n const sameState = this.isOpen === open;\n if (this.disabled || this.readonly || sameState) {\n return;\n }\n const eventArgs = new PreventableEvent();\n open ? this.open.emit(eventArgs) : this.close.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.toggle(open);\n }\n }\n openPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.popupSettings.appendTo,\n popupAlign: popupPosition,\n anchorAlign: anchorPosition,\n popupClass: 'k-colorpicker-popup',\n content: this.popupTemplate,\n positionMode: 'absolute'\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => {\n this.toggleWithEvents(false);\n if (!this.isOpen) {\n this.wrapper.nativeElement.focus({\n preventScroll: true\n });\n }\n });\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n this.palette = null;\n }\n}\nColorPickerComponent.ɵfac = function ColorPickerComponent_Factory(t) { return new (t || ColorPickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorPickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColorPickerComponent, selectors: [[\"kendo-colorpicker\"]], viewQuery: function ColorPickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c45, true, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c46, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c21, true);\n ɵngcc0.ɵɵviewQuery(_c47, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.palette = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n } }, hostVars: 5, hostBindings: function ColorPickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-colorpicker\", ctx.hostClasses);\n } }, inputs: { focusableId: \"focusableId\", view: \"view\", readonly: \"readonly\", disabled: \"disabled\", format: \"format\", value: \"value\", popupSettings: \"popupSettings\", paletteSettings: \"paletteSettings\", gradientSettings: \"gradientSettings\", tabindex: \"tabindex\", icon: \"icon\", iconClass: \"iconClass\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\", activeColorClick: \"activeColorClick\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent)\n },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 9, consts: [[\"role\", \"listbox\", 3, \"ngClass\", \"id\", \"focus\", \"blur\", \"mousedown\", \"keydown\"], [\"wrapper\", \"\"], [\"class\", \"k-selected-color\", 3, \"background-color\", \"click\", 4, \"ngIf\"], [\"class\", \"k-tool-icon\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"k-select\", 3, \"click\"], [1, \"k-icon\", \"k-i-arrow-s\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [1, \"k-selected-color\", 3, \"click\"], [\"class\", \"k-icon k-i-line\", 4, \"ngIf\"], [1, \"k-icon\", \"k-i-line\"], [1, \"k-tool-icon\", 3, \"ngClass\", \"click\"], [1, \"k-selected-color\"], [\"kendoFocusOnDomReady\", \"\", 3, \"value\", \"format\", \"opacity\", \"clearButton\", \"focusout\", \"valueChange\", \"keydown\", 4, \"ngIf\"], [\"kendoFocusOnDomReady\", \"\", 3, \"palette\", \"columns\", \"tileSize\", \"format\", \"value\", \"blur\", \"cellSelection\", \"mousedown\", \"keydown\", 4, \"ngIf\"], [\"kendoFocusOnDomReady\", \"\", 3, \"value\", \"format\", \"opacity\", \"clearButton\", \"focusout\", \"valueChange\", \"keydown\"], [\"kendoFocusOnDomReady\", \"\", 3, \"palette\", \"columns\", \"tileSize\", \"format\", \"value\", \"blur\", \"cellSelection\", \"mousedown\", \"keydown\"], [\"palette\", \"\"]], template: function ColorPickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0, 1);\n ɵngcc0.ɵɵlistener(\"focus\", function ColorPickerComponent_Template_span_focus_0_listener() { return ctx.handleWrapperFocus(); })(\"blur\", function ColorPickerComponent_Template_span_blur_0_listener() { return ctx.handleWrapperBlur(); })(\"mousedown\", function ColorPickerComponent_Template_span_mousedown_0_listener($event) { return $event.preventDefault(); })(\"keydown\", function ColorPickerComponent_Template_span_keydown_0_listener($event) { return ctx.handleWrapperKeyDown($event); });\n ɵngcc0.ɵɵtemplate(2, ColorPickerComponent_span_2_Template, 2, 3, \"span\", 2);\n ɵngcc0.ɵɵtemplate(3, ColorPickerComponent_span_3_Template, 2, 3, \"span\", 3);\n ɵngcc0.ɵɵelementStart(4, \"span\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_Template_span_click_4_listener() { return ctx.handleWrapperClick(); });\n ɵngcc0.ɵɵelement(5, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ColorPickerComponent_ng_template_6_Template, 2, 2, \"ng-template\", null, 6, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(8, null, 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(6, _c48, ctx.disabled, ctx.isFocused))(\"id\", ctx.focusableId);\n ɵngcc0.ɵɵattribute(\"aria-expanded\", ctx.isOpen)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.iconStyles);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.iconStyles);\n } }, directives: function () { return [ɵngcc3.NgClass, ɵngcc3.NgIf, ColorGradientComponent, FocusOnDomReadyDirective, ColorPaletteComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColorPickerComponent.ctorParameters = () => [\n { type: PopupService },\n { type: LocalizationService }\n];\nColorPickerComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-colorpicker',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n focusableId: [{ type: Input }],\n view: [{ type: Input }],\n readonly: [{ type: Input }],\n disabled: [{ type: Input }],\n format: [{ type: Input }],\n value: [{ type: Input }],\n popupSettings: [{ type: Input }],\n paletteSettings: [{ type: Input }],\n gradientSettings: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n tabindex: [{ type: Input }],\n valueChange: [{ type: Output }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n activeColorClick: [{ type: Output }],\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate',] }],\n palette: [{ type: ViewChild, args: ['palette', { read: ElementRef },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorpicker',\n providers: [{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent)\n }, LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }],\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc5.PopupService }, { type: ɵngcc1.LocalizationService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-colorpicker']\n }], focusableId: [{\n type: Input\n }], view: [{\n type: Input\n }], readonly: [{\n type: Input\n }], disabled: [{\n type: Input\n }], format: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], activeColorClick: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], paletteSettings: [{\n type: Input\n }], gradientSettings: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], palette: [{\n type: ViewChild,\n args: ['palette', { read: ElementRef }]\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ColorPaletteService {\n constructor() {\n this.colorRows = [];\n }\n setColorMatrix(palette, columns) {\n this.colorRows = [];\n if (!(isPresent(palette) && palette.length)) {\n return;\n }\n columns = columns || palette.length;\n for (let start = 0; start < palette.length; start += columns) {\n const row = palette.slice(start, columns + start);\n this.colorRows.push(row);\n }\n }\n getCellCoordsFor(color) {\n if (!isPresent(color)) {\n return;\n }\n for (let row = 0; row < this.colorRows.length; row++) {\n for (let col = 0; col < this.colorRows[row].length; col++) {\n if (this.colorRows[row][col] === color) {\n return { row, col };\n }\n }\n }\n }\n getColorAt(cellCoords) {\n if (!(isPresent(cellCoords) && isPresent(this.colorRows[cellCoords.row]))) {\n return;\n }\n return this.colorRows[cellCoords.row][cellCoords.col];\n }\n getNextCell(current, horizontalStep, verticalStep) {\n if (!(isPresent(current) && isPresent(current.row) && isPresent(current.col))) {\n return { row: 0, col: 0 };\n }\n const row = this.clampIndex(current.row + verticalStep, this.colorRows.length - 1);\n const col = this.clampIndex(current.col + horizontalStep, this.colorRows[row].length - 1);\n return { row, col };\n }\n clampIndex(index, max) {\n const minArrayIndex = 0;\n if (index < minArrayIndex) {\n return minArrayIndex;\n }\n if (index > max) {\n return max;\n }\n return index;\n }\n}\nColorPaletteService.ɵfac = function ColorPaletteService_Factory(t) { return new (t || ColorPaletteService)(); };\nColorPaletteService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColorPaletteService, factory: ColorPaletteService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPaletteService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst DEFAULT_TILE_SIZE = 24;\nconst DEFAULT_COLUMNS_COUNT = 10;\nconst DEFAULT_PRESET$1 = 'office';\nconst DEFAULT_ACCESSIBLE_PRESET$1 = 'accessible';\nlet serial$1 = 0;\n/**\n * The ColorPalette component provides a set of predefined palette presets and enables you to implement a custom color palette.\n * The ColorPalette is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nclass ColorPaletteComponent {\n constructor(service, localizationService) {\n this.service = service;\n /**\n * @hidden\n */\n this.id = `k-colorpalette-${serial$1++}`;\n /**\n * Specifies the output format of the ColorPaletteComponent.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `hex`\n * * `rgba`\n * * `name`\n */\n this.format = 'hex';\n /**\n * Specifies the size of a color cell.\n *\n * The possible values are:\n * * (Default) `tileSize = 24`\n * * `{ width: number, height: number }`\n */\n this.tileSize = { width: DEFAULT_TILE_SIZE, height: DEFAULT_TILE_SIZE };\n /**\n * Fires each time the color selection is changed.\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user selects a cell with the mouse or presses `Enter`.\n *\n * @hidden\n */\n this.cellSelection = new EventEmitter();\n /**\n * @hidden\n */\n this.hostClasses = true;\n this._tabindex = 0;\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * @hidden\n */\n get paletteId() {\n return this.id;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the number of columns that will be displayed.\n * Defaults to `10`.\n */\n set columns(value) {\n const minColumnsCount = 1;\n this._columns = value > minColumnsCount ? value : minColumnsCount;\n }\n get columns() {\n return this._columns;\n }\n /**\n * The color palette that will be displayed.\n *\n * The supported values are:\n * * The name of the predefined palette preset (for example, `office`, `basic`, and `apex`).\n * * A string with comma-separated colors.\n * * A string array.\n */\n set palette(value) {\n if (!isPresent(value)) {\n value = DEFAULT_PRESET$1;\n }\n if (typeof value === 'string' && isPresent(PALETTEPRESETS[value])) {\n this.columns = this.columns || PALETTEPRESETS[value].columns;\n value = PALETTEPRESETS[value].colors;\n }\n const colors = (typeof value === 'string') ? value.split(',') : value;\n this._palette = colors.map(color => parseColor$1(color, this.format, false));\n }\n get palette() {\n return this._palette;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * @hidden\n */\n get tileLayout() {\n if (typeof this.tileSize !== 'number') {\n return this.tileSize;\n }\n return { width: this.tileSize, height: this.tileSize };\n }\n /**\n * @hidden\n */\n get colorRows() {\n return this.service.colorRows;\n }\n /**\n * @hidden\n */\n get hostTabindex() { return this.tabindex; }\n /**\n * @hidden\n */\n get disabledClass() { return this.disabled; }\n ngOnInit() {\n if (this.colorRows.length === 0) {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET$1 : DEFAULT_ACCESSIBLE_PRESET$1;\n this.palette = this.palette || defaultPreset;\n this.setRows();\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n if (changes.palette || changes.columns) {\n this.setRows();\n }\n if (changes.palette || changes.value || changes.columns) {\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n }\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const isRTL = this.direction === 'rtl';\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.handleCellNavigation(0, 1);\n break;\n case Keys.ArrowUp:\n this.handleCellNavigation(0, -1);\n break;\n case Keys.ArrowRight:\n this.handleCellNavigation(isRTL ? -1 : 1, 0);\n break;\n case Keys.ArrowLeft:\n this.handleCellNavigation(isRTL ? 1 : -1, 0);\n break;\n case Keys.Enter:\n this.handleEnter();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleHostBlur() {\n this.notifyNgTouched();\n }\n /**\n * @hidden\n */\n handleCellSelection(value, focusedCell) {\n if (this.readonly) {\n return;\n }\n this.focusedCell = focusedCell;\n const parsedColor = parseColor$1(value, this.format, false);\n this.cellSelection.emit(parsedColor);\n if (this.value !== parsedColor) {\n this.value = parsedColor;\n this.valueChange.emit(parsedColor);\n this.notifyNgChanged(parsedColor);\n }\n if (this.selection !== parsedColor) {\n this.selection = parsedColor;\n this.selectionChange.emit(parsedColor);\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n /**\n * Clears the color value of the ColorPalette.\n */\n reset() {\n this.focusedCell = null;\n if (isPresent(this.value)) {\n this._value = undefined;\n this.notifyNgChanged(undefined);\n }\n }\n setRows() {\n if (!isPresent(this.palette)) {\n return;\n }\n this.columns = this.columns || DEFAULT_COLUMNS_COUNT;\n this.service.setColorMatrix(this.palette, this.columns);\n }\n handleCellNavigation(horizontalStep, verticalStep) {\n if (this.readonly) {\n return;\n }\n this.focusedCell = this.service.getNextCell(this.focusedCell, horizontalStep, verticalStep);\n const selection = this.service.getColorAt(this.focusedCell);\n if (this.selection !== selection) {\n this.selection = selection;\n this.selectionChange.emit(selection);\n }\n }\n handleEnter() {\n if (!isPresent(this.focusedCell)) {\n return;\n }\n const selectedColor = this.service.getColorAt(this.focusedCell);\n this.handleCellSelection(selectedColor, this.focusedCell);\n }\n}\nColorPaletteComponent.ɵfac = function ColorPaletteComponent_Factory(t) { return new (t || ColorPaletteComponent)(ɵngcc0.ɵɵdirectiveInject(ColorPaletteService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorPaletteComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColorPaletteComponent, selectors: [[\"kendo-colorpalette\"]], hostVars: 9, hostBindings: function ColorPaletteComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function ColorPaletteComponent_keydown_HostBindingHandler($event) { return ctx.handleKeydown($event); })(\"blur\", function ColorPaletteComponent_blur_HostBindingHandler() { return ctx.handleHostBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"id\", ctx.paletteId)(\"tabindex\", ctx.hostTabindex);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-colorpalette\", ctx.hostClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { id: \"id\", format: \"format\", tileSize: \"tileSize\", value: \"value\", columns: \"columns\", palette: \"palette\", tabindex: \"tabindex\", disabled: \"disabled\", readonly: \"readonly\" }, outputs: { selectionChange: \"selectionChange\", valueChange: \"valueChange\", cellSelection: \"cellSelection\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent) // tslint:disable-line:no-forward-ref\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent)\n },\n ColorPaletteService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 1, consts: [[\"role\", \"grid\"], [\"role\", \"presentation\", 1, \"k-palette\", \"k-reset\"], [\"role\", \"row\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"row\"], [\"class\", \"k-item\", 3, \"k-state-selected\", \"ngStyle\", \"click\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-item\", 3, \"ngStyle\", \"click\"]], template: function ColorPaletteComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"table\", 1);\n ɵngcc0.ɵɵelementStart(2, \"tbody\");\n ɵngcc0.ɵɵtemplate(3, ColorPaletteComponent_tr_3_Template, 2, 1, \"tr\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.colorRows);\n } }, directives: [ɵngcc3.NgForOf, ɵngcc3.NgStyle], encapsulation: 2 });\n/** @nocollapse */\nColorPaletteComponent.ctorParameters = () => [\n { type: ColorPaletteService },\n { type: LocalizationService }\n];\nColorPaletteComponent.propDecorators = {\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n paletteId: [{ type: HostBinding, args: ['attr.id',] }],\n id: [{ type: Input }],\n format: [{ type: Input }],\n value: [{ type: Input }],\n columns: [{ type: Input }],\n palette: [{ type: Input }],\n tabindex: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n tileSize: [{ type: Input }],\n selectionChange: [{ type: Output }],\n valueChange: [{ type: Output }],\n cellSelection: [{ type: Output }],\n hostTabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-colorpalette',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n handleKeydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n handleHostBlur: [{ type: HostListener, args: ['blur',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPaletteComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorpalette',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent) // tslint:disable-line:no-forward-ref\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent)\n },\n ColorPaletteService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ],\n template: `\n
    \n
    \n {{headerText}}\n \n {{dataAccessor(data, name)}}\n
    \n \n \n \n \n \n
    \n
    \n \n `\n }]\n }], function () { return [{ type: ColorPaletteService }, { type: ɵngcc1.LocalizationService }]; }, { id: [{\n type: Input\n }], format: [{\n type: Input\n }], tileSize: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], cellSelection: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-colorpalette']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], paletteId: [{\n type: HostBinding,\n args: ['attr.id']\n }], value: [{\n type: Input\n }], columns: [{\n type: Input\n }], palette: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], \n /**\n * @hidden\n */\n handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n handleHostBlur: [{\n type: HostListener,\n args: ['blur']\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }] }); })();\n\nconst DEFAULT_OUTPUT_FORMAT = 'rgba';\nconst DEFAULT_BACKGROUND_COLOR = 'rgba(255, 0, 0, 1)';\nlet serial$2 = 0;\n/**\n * The ColorGradient component enables smooth color transitions and provides options for selecting specific colors over the drag handle.\n * The ColorGradient is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nclass ColorGradientComponent {\n constructor(host, ngZone, renderer, cdr, localizationService) {\n this.host = host;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.id = `k-colorgradient-${serial$2++}`;\n /**\n * Defines whether the alpha slider will be displayed.\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorGradient.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorGradient.\n */\n this.readonly = false;\n /**\n * Specifies whether the ColorGradient should display a 'Clear color' button.\n */\n this.clearButton = false;\n /**\n * Fires each time the user selects a new color.\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.backgroundColor = DEFAULT_BACKGROUND_COLOR;\n /**\n * @hidden\n *\n * Represents the currently selected `hue`, `saturation`, `value`, and `alpha` values.\n * The values are initially set in `ngOnInit` or in `ngOnChanges` and are\n * updated on moving the drag handle or the sliders.\n */\n this.hsva = {};\n /**\n * Specifies the output format of the ColorGradientComponent.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `rgba`\n * * `hex`\n */\n this.format = DEFAULT_OUTPUT_FORMAT;\n this._tabindex = 0;\n this.listeners = [];\n this.notifyNgChanged = () => { };\n this.notifyNgTouched = () => { };\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get disabledClass() {\n return this.disabled;\n }\n get hostTabindex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n get gradientId() {\n return this.id;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Indicates whether the ColorGradient or any of its content is focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n return this.host.nativeElement === document.activeElement || this.host.nativeElement.contains(document.activeElement);\n }\n /**\n * @hidden\n */\n get alphaSliderValue() {\n // setting the initial value to undefined to force the slider to recalculate the height of the slider track on the next cdr run\n if (!(isPresent(this.hsva) && isPresent(this.hsva.a))) {\n return;\n }\n return this.hsva.a * 100;\n }\n get gradientRect() {\n return this.gradientWrapper.nativeElement.getBoundingClientRect();\n }\n ngAfterViewInit() {\n this.updateUI();\n this.cdr.detectChanges();\n this.addEventListeners();\n }\n ngOnChanges(changes) {\n if (isChanged('value', changes) && !this.isFocused) {\n this.updateUI();\n }\n }\n ngOnDestroy() {\n this.listeners.forEach(removeListener => removeListener());\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * Focuses the component.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n reset() {\n this.handleValueChange(undefined);\n this.updateUI();\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (this.disabled || this.readonly || !isPresent(args.originalEvent)) {\n return;\n }\n this.focus();\n args.originalEvent.preventDefault();\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.addClass(this.gradientWrapper.nativeElement, 'k-dragging');\n this.changePosition(args);\n }\n /**\n * @hidden\n */\n onHandleRelease() {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.removeClass(this.gradientWrapper.nativeElement, 'k-dragging');\n }\n /**\n * @hidden\n */\n changePosition(position) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.ngZone.run(() => this.moveDragHandle(position));\n }\n /**\n * @hidden\n */\n handleHueSliderChange(hue) {\n this.handleValueChange(getColorFromHSV(this.hsva));\n this.backgroundColor = getColorFromHue(hue);\n this.setAlphaSliderBackground(this.backgroundColor);\n }\n /**\n * @hidden\n */\n handleAlphaSliderChange(alpha) {\n this.hsva.a = alpha / 100;\n this.handleValueChange(getColorFromHSV(this.hsva));\n }\n /**\n * @hidden\n */\n handleInputsValueChange(color) {\n const parsed = parseColor$1(color, this.format);\n if (this.value !== parsed) {\n this.handleValueChange(parsed);\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n if (isPresent(this.gradientWrapper)) {\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n moveDragHandle(position) {\n const deltaX = position.clientX - this.gradientRect.left;\n const deltaY = position.clientY - this.gradientRect.top;\n const top = fitIntoBounds(deltaY, 0, this.gradientRect.height);\n const left = fitIntoBounds(deltaX, 0, this.gradientRect.width);\n this.setDragHandleElementPosition(top, left);\n this.hsva.s = left / this.gradientRect.width;\n this.hsva.v = 1 - top / this.gradientRect.height;\n this.handleValueChange(getColorFromHSV(this.hsva));\n this.setAlphaSliderBackground(getColorFromHSV(Object.assign({}, this.hsva, { a: 1 })));\n }\n updateUI() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.hsva = this.value ? getHSV(this.value) : { h: 0, s: 0, v: 1, a: 1 };\n const top = (1 - this.hsva.v) * this.gradientRect.height;\n const left = this.hsva.s * this.gradientRect.width;\n this.setDragHandleElementPosition(top, left);\n this.backgroundColor = getColorFromHue(this.hsva.h);\n this.setAlphaSliderBackground(this.backgroundColor);\n }\n handleValueChange(color) {\n if (this.value === color) {\n return;\n }\n this.value = color;\n this.valueChange.emit(color);\n this.notifyNgChanged(color);\n }\n setDragHandleElementPosition(top, left) {\n const dragHandle = this.dragHandle.nativeElement;\n this.renderer.setStyle(dragHandle, 'top', `${top}px`);\n this.renderer.setStyle(dragHandle, 'left', `${left}px`);\n }\n setAlphaSliderBackground(backgroundColor) {\n if (!isPresent(this.alphaSlider)) {\n return;\n }\n const sliderTrack = this.alphaSlider.track.nativeElement;\n this.renderer.setStyle(sliderTrack, 'background', `linear-gradient(to top, transparent, ${backgroundColor})`);\n }\n addEventListeners() {\n this.ngZone.runOutsideAngular(() => {\n const focusOutListener = this.renderer.listen(this.host.nativeElement, 'focusout', (event) => {\n if (!containsFocus(this.host.nativeElement, event.relatedTarget) && isUntouched(this.host)) {\n this.ngZone.run(() => this.notifyNgTouched());\n }\n });\n this.listeners.push(focusOutListener);\n });\n }\n}\nColorGradientComponent.ɵfac = function ColorGradientComponent_Factory(t) { return new (t || ColorGradientComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorGradientComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColorGradientComponent, selectors: [[\"kendo-colorgradient\"]], viewQuery: function ColorGradientComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c50, true);\n ɵngcc0.ɵɵviewQuery(_c51, true);\n ɵngcc0.ɵɵviewQuery(_c52, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.alphaSlider = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.gradientWrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dragHandle = _t.first);\n } }, hostVars: 9, hostBindings: function ColorGradientComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"tabindex\", ctx.hostTabindex)(\"id\", ctx.gradientId);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-flatcolorpicker\", ctx.hostClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { id: \"id\", opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\", clearButton: \"clearButton\", format: \"format\", value: \"value\", tabindex: \"tabindex\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent)\n },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 21, consts: [[1, \"k-hbox\", \"k-hsv-wrap\"], [1, \"k-hsv-rectangle\"], [\"kendoDraggable\", \"\", 1, \"k-hsv-gradient\", 3, \"click\", \"kendoPress\", \"kendoDrag\", \"kendoRelease\"], [\"gradientWrapper\", \"\"], [1, \"k-draghandle\"], [\"dragHandle\", \"\"], [\"class\", \"k-clear-color k-button k-bare k-button-icon\", 3, \"click\", 4, \"ngIf\"], [1, \"k-hue-slider\", 3, \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\"], [\"class\", \"k-alpha-slider\", 3, \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"opacity\", \"value\", \"disabled\", \"readonly\", \"valueChange\"], [1, \"k-clear-color\", \"k-button\", \"k-bare\", \"k-button-icon\", 3, \"click\"], [1, \"k-icon\", \"k-i-reset-color\"], [1, \"k-alpha-slider\", 3, \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\"], [\"alphaSlider\", \"\"]], template: function ColorGradientComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2, 3);\n ɵngcc0.ɵɵlistener(\"click\", function ColorGradientComponent_Template_div_click_2_listener($event) { return ctx.changePosition($event); })(\"kendoPress\", function ColorGradientComponent_Template_div_kendoPress_2_listener($event) { return ctx.handleDragPress($event); })(\"kendoDrag\", function ColorGradientComponent_Template_div_kendoDrag_2_listener($event) { return ctx.onHandleDrag($event); })(\"kendoRelease\", function ColorGradientComponent_Template_div_kendoRelease_2_listener() { return ctx.onHandleRelease(); });\n ɵngcc0.ɵɵelement(4, \"div\", 4, 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\");\n ɵngcc0.ɵɵtemplate(7, ColorGradientComponent_span_7_Template, 2, 0, \"span\", 6);\n ɵngcc0.ɵɵelementStart(8, \"kendo-slider\", 7);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorGradientComponent_Template_kendo_slider_valueChange_8_listener($event) { return ctx.hsva.h = $event; })(\"valueChange\", function ColorGradientComponent_Template_kendo_slider_valueChange_8_listener($event) { return ctx.handleHueSliderChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, ColorGradientComponent_kendo_slider_9_Template, 2, 10, \"kendo-slider\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"kendo-colorinput\", 9);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorGradientComponent_Template_kendo_colorinput_valueChange_10_listener($event) { return ctx.handleInputsValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx.backgroundColor);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵclassMapInterpolate1(\"k-hbox k-sliders-wrap \", ctx.clearButton ? \"k-sliders-wrap-clearable\" : \"\", \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.clearButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"showButtons\", false)(\"tickPlacement\", \"none\")(\"vertical\", true)(\"min\", 0)(\"max\", 360)(\"smallStep\", 5)(\"largeStep\", 10)(\"value\", ctx.hsva.h);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.opacity && ctx.format === \"rgba\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"opacity\", ctx.opacity)(\"value\", ctx.value)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly);\n } }, directives: function () { return [ɵngcc2.DraggableDirective, ɵngcc3.NgIf, SliderComponent, ColorInputComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColorGradientComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: LocalizationService }\n];\nColorGradientComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-flatcolorpicker',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n hostTabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n gradientId: [{ type: HostBinding, args: ['attr.id',] }],\n id: [{ type: Input }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n opacity: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n clearButton: [{ type: Input }],\n value: [{ type: Input }],\n tabindex: [{ type: Input }],\n valueChange: [{ type: Output }],\n format: [{ type: Input }],\n alphaSlider: [{ type: ViewChild, args: ['alphaSlider',] }],\n gradientWrapper: [{ type: ViewChild, args: ['gradientWrapper',] }],\n dragHandle: [{ type: ViewChild, args: ['dragHandle',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorGradientComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorgradient',\n providers: [{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent)\n }, LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }],\n template: `\n
    \n
    \n \n \n
    \n
    \n \n
    \n \n \n \n \n \n \n \n
    \n \n \n \n`\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-flatcolorpicker']\n }], id: [{\n type: Input\n }], opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], format: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], gradientId: [{\n type: HostBinding,\n args: ['attr.id']\n }], value: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], alphaSlider: [{\n type: ViewChild,\n args: ['alphaSlider']\n }], gradientWrapper: [{\n type: ViewChild,\n args: ['gradientWrapper']\n }], dragHandle: [{\n type: ViewChild,\n args: ['dragHandle']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ColorInputComponent {\n constructor(host) {\n this.host = host;\n /**\n * Sets whether the alpha slider will be shown.\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorInput.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorInput.\n */\n this.readonly = false;\n /**\n * Emits a parsed rgba string color.\n */\n this.valueChange = new EventEmitter();\n this.colorInputClass = true;\n /**\n * The rgba inputs values.\n */\n this.rgba = {};\n }\n /**\n * Indicates whether any of the inputs are focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n const activeElement = document.activeElement;\n return this.host.nativeElement.contains(activeElement);\n }\n /**\n * Indicates whether any of the rgba inputs have value.\n */\n get rgbaInputValid() {\n return Object.keys(this.rgba).every(key => isPresent(this.rgba[key]));\n }\n ngOnChanges(changes) {\n if (isPresent(changes.value) && !this.isFocused) {\n this.hex = parseColor$1(this.value, 'hex');\n this.rgba = getRGBA(this.value);\n this.rgba.a = parseColor$1(this.value, 'rgba') ? this.rgba.a : 1;\n }\n }\n handleRgbaValueChange() {\n const color = getColorFromRGBA(this.rgba);\n if (!this.rgbaInputValid || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(this.value);\n this.hex = parseColor$1(color, 'hex');\n this.valueChange.emit(color);\n }\n handleHexValueChange(hex) {\n this.hex = hex;\n const color = parseColor$1(hex, 'rgba');\n if (!isPresent(color) || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(color);\n this.valueChange.emit(color);\n }\n handleRgbaInputBlur() {\n if (!this.rgbaInputValid) {\n this.rgba = getRGBA(this.value);\n }\n }\n handleHexInputBlur() {\n this.hex = parseColor$1(this.value, 'hex');\n }\n}\nColorInputComponent.ɵfac = function ColorInputComponent_Factory(t) { return new (t || ColorInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nColorInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColorInputComponent, selectors: [[\"kendo-colorinput\"]], hostVars: 2, hostBindings: function ColorInputComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-colorinputs\", ctx.colorInputClass);\n } }, inputs: { opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 17, vars: 32, consts: [[1, \"k-hbox\", \"k-gradient-values\"], [\"placeholder\", \"no color\", 1, \"k-textbox\", \"k-hex-value\", 3, \"disabled\", \"readonly\", \"value\", \"blur\", \"input\"], [\"hexInput\", \"\"], [\"placeholder\", \"R\", 3, \"disabled\", \"readonly\", \"min\", \"max\", \"value\", \"autoCorrect\", \"spinners\", \"format\", \"decimals\", \"valueChange\", \"blur\"], [\"placeholder\", \"G\", 3, \"disabled\", \"readonly\", \"min\", \"max\", \"value\", \"autoCorrect\", \"spinners\", \"format\", \"decimals\", \"valueChange\", \"blur\"], [\"placeholder\", \"B\", 3, \"disabled\", \"readonly\", \"min\", \"max\", \"value\", \"autoCorrect\", \"spinners\", \"format\", \"decimals\", \"valueChange\", \"blur\"], [\"placeholder\", \"A\", 3, \"disabled\", \"readonly\", \"min\", \"max\", \"value\", \"autoCorrect\", \"spinners\", \"step\", \"format\", \"decimals\", \"valueChange\", \"blur\", 4, \"ngIf\"], [1, \"k-hex-value\"], [4, \"ngIf\"], [\"placeholder\", \"A\", 3, \"disabled\", \"readonly\", \"min\", \"max\", \"value\", \"autoCorrect\", \"spinners\", \"step\", \"format\", \"decimals\", \"valueChange\", \"blur\"]], template: function ColorInputComponent_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"input\", 1, 2);\n ɵngcc0.ɵɵlistener(\"blur\", function ColorInputComponent_Template_input_blur_1_listener() { return ctx.handleHexInputBlur(); })(\"input\", function ColorInputComponent_Template_input_input_1_listener() { ɵngcc0.ɵɵrestoreView(_r7); const _r0 = ɵngcc0.ɵɵreference(2); return ctx.handleHexValueChange(_r0.value); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"kendo-numerictextbox\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_3_listener($event) { return ctx.rgba.r = $event; })(\"blur\", function ColorInputComponent_Template_kendo_numerictextbox_blur_3_listener() { return ctx.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_3_listener() { return ctx.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-numerictextbox\", 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_4_listener($event) { return ctx.rgba.g = $event; })(\"blur\", function ColorInputComponent_Template_kendo_numerictextbox_blur_4_listener() { return ctx.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_4_listener() { return ctx.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"kendo-numerictextbox\", 5);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_5_listener($event) { return ctx.rgba.b = $event; })(\"blur\", function ColorInputComponent_Template_kendo_numerictextbox_blur_5_listener() { return ctx.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_Template_kendo_numerictextbox_valueChange_5_listener() { return ctx.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ColorInputComponent_kendo_numerictextbox_6_Template, 1, 10, \"kendo-numerictextbox\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 0);\n ɵngcc0.ɵɵelementStart(8, \"div\", 7);\n ɵngcc0.ɵɵtext(9, \"hex\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"div\");\n ɵngcc0.ɵɵtext(11, \"r\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"div\");\n ɵngcc0.ɵɵtext(13, \"g\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(14, \"div\");\n ɵngcc0.ɵɵtext(15, \"b\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(16, ColorInputComponent_div_16_Template, 2, 0, \"div\", 8);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"value\", ctx.hex || \"\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"min\", 0)(\"max\", 255)(\"value\", ctx.rgba.r)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"min\", 0)(\"max\", 255)(\"value\", ctx.rgba.g)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"min\", 0)(\"max\", 255)(\"value\", ctx.rgba.b)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.opacity);\n ɵngcc0.ɵɵadvance(10);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.opacity);\n } }, directives: [NumericTextBoxComponent, ɵngcc3.NgIf], encapsulation: 2 });\n/** @nocollapse */\nColorInputComponent.ctorParameters = () => [\n { type: ElementRef }\n];\nColorInputComponent.propDecorators = {\n value: [{ type: Input }],\n opacity: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n valueChange: [{ type: Output }],\n colorInputClass: [{ type: HostBinding, args: ['class.k-colorinputs',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorinput',\n template: `\n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    hex
    \n
    r
    \n
    g
    \n
    b
    \n
    a
    \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], colorInputClass: [{\n type: HostBinding,\n args: ['class.k-colorinputs']\n }], value: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FocusOnDomReadyDirective {\n constructor(host, ngZone) {\n this.host = host;\n this.ngZone = ngZone;\n }\n ngAfterContentInit() {\n this.focusOnNextTick();\n }\n focusOnNextTick() {\n this.ngZone.runOutsideAngular(() => setTimeout(() => this.host.nativeElement.focus()));\n }\n}\nFocusOnDomReadyDirective.ɵfac = function FocusOnDomReadyDirective_Factory(t) { return new (t || FocusOnDomReadyDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nFocusOnDomReadyDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FocusOnDomReadyDirective, selectors: [[\"\", \"kendoFocusOnDomReady\", \"\"]] });\n/** @nocollapse */\nFocusOnDomReadyDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusOnDomReadyDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFocusOnDomReady]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, null); })();\n\nconst PUBLIC_DIRECTIVES = [\n ColorPickerComponent,\n ColorPaletteComponent,\n ColorGradientComponent\n];\nconst INTERNAL_DIRECTIVES = [\n ColorInputComponent,\n FocusOnDomReadyDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the ColorPicker.\n */\nclass ColorPickerModule {\n}\nColorPickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ColorPickerModule });\nColorPickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ColorPickerModule_Factory(t) { return new (t || ColorPickerModule)(); }, imports: [[\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColorPickerModule, { declarations: function () { return [ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent, ColorInputComponent, FocusOnDomReadyDirective]; }, imports: function () { return [SliderModule, NumericTextBoxModule, CommonModule,\n PopupModule,\n DraggableModule]; }, exports: function () { return [ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColorPickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n PUBLIC_DIRECTIVES,\n INTERNAL_DIRECTIVES\n ],\n exports: [PUBLIC_DIRECTIVES],\n imports: [\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]\n }]\n }], null, null); })();\n\n/**\n * Represents the directive that renders the [Kendo UI CheckBox]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"checkbox\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass CheckBoxDirective {\n constructor() {\n this.kendoClass = true;\n }\n}\nCheckBoxDirective.ɵfac = function CheckBoxDirective_Factory(t) { return new (t || CheckBoxDirective)(); };\nCheckBoxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CheckBoxDirective, selectors: [[\"input\", \"kendoCheckBox\", \"\"]], hostVars: 2, hostBindings: function CheckBoxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-checkbox\", ctx.kendoClass);\n } } });\nCheckBoxDirective.propDecorators = {\n kendoClass: [{ type: HostBinding, args: ['class.k-checkbox',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CheckBoxDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoCheckBox]'\n }]\n }], function () { return []; }, { kendoClass: [{\n type: HostBinding,\n args: ['class.k-checkbox']\n }] }); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the CheckBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the CheckBox module\n * import { CheckBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CheckBoxModule], // import CheckBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CheckBoxModule {\n}\nCheckBoxModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CheckBoxModule });\nCheckBoxModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CheckBoxModule_Factory(t) { return new (t || CheckBoxModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CheckBoxModule, { declarations: function () { return [CheckBoxDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [CheckBoxDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CheckBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [CheckBoxDirective],\n exports: [CheckBoxDirective],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the directive that renders the [Kendo UI RadioButton]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"radio\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nclass RadioButtonDirective {\n constructor() {\n this.kendoClass = true;\n }\n}\nRadioButtonDirective.ɵfac = function RadioButtonDirective_Factory(t) { return new (t || RadioButtonDirective)(); };\nRadioButtonDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RadioButtonDirective, selectors: [[\"input\", \"kendoRadioButton\", \"\"]], hostVars: 2, hostBindings: function RadioButtonDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-radio\", ctx.kendoClass);\n } } });\nRadioButtonDirective.propDecorators = {\n kendoClass: [{ type: HostBinding, args: ['class.k-radio',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RadioButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoRadioButton]'\n }]\n }], function () { return []; }, { kendoClass: [{\n type: HostBinding,\n args: ['class.k-radio']\n }] }); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RadioButton directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the RadioButton module\n * import { RadioButtonModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, RadioButtonModule], // import RadioButton module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass RadioButtonModule {\n}\nRadioButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: RadioButtonModule });\nRadioButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function RadioButtonModule_Factory(t) { return new (t || RadioButtonModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RadioButtonModule, { declarations: function () { return [RadioButtonDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [RadioButtonDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RadioButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [RadioButtonDirective],\n exports: [RadioButtonDirective],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\nlet serial$3 = 0;\n/**\n * Represents an error message that will be shown underneath\n * a Kendo control or native HTML form-bound component after a validation.\n */\nclass ErrorComponent {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the alignment of the Error message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-error-${serial$3++}`;\n this.roleAttribute = 'alert';\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n}\nErrorComponent.ɵfac = function ErrorComponent_Factory(t) { return new (t || ErrorComponent)(); };\nErrorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ErrorComponent, selectors: [[\"kendo-formerror\"]], hostVars: 8, hostBindings: function ErrorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleAttribute)(\"id\", ctx.idAttribute);\n ɵngcc0.ɵɵclassProp(\"k-form-error\", ctx.hostClass)(\"k-text-start\", ctx.startClass)(\"k-text-end\", ctx.endClass);\n } }, inputs: { align: \"align\" }, ngContentSelectors: _c27, decls: 1, vars: 0, template: function ErrorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nErrorComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-form-error',] }],\n align: [{ type: Input }],\n roleAttribute: [{ type: HostBinding, args: ['attr.role',] }],\n startClass: [{ type: HostBinding, args: ['class.k-text-start',] }],\n endClass: [{ type: HostBinding, args: ['class.k-text-end',] }],\n idAttribute: [{ type: HostBinding, args: ['attr.id',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ErrorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formerror',\n template: `\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-error']\n }], align: [{\n type: Input\n }], roleAttribute: [{\n type: HostBinding,\n args: ['attr.role']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] }); })();\n\nlet serial$4 = 0;\n/**\n * Represents a hint message that will be shown underneath a form-bound component.\n */\nclass HintComponent {\n constructor() {\n /**\n * Specifies the alignment of the Hint message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-hint-${serial$4++}`;\n this.hostClass = true;\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n}\nHintComponent.ɵfac = function HintComponent_Factory(t) { return new (t || HintComponent)(); };\nHintComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HintComponent, selectors: [[\"kendo-formhint\"]], hostVars: 7, hostBindings: function HintComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.idAttribute);\n ɵngcc0.ɵɵclassProp(\"k-form-hint\", ctx.hostClass)(\"k-text-start\", ctx.startClass)(\"k-text-end\", ctx.endClass);\n } }, inputs: { align: \"align\" }, ngContentSelectors: _c27, decls: 1, vars: 0, template: function HintComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nHintComponent.propDecorators = {\n align: [{ type: Input }],\n hostClass: [{ type: HostBinding, args: ['class.k-form-hint',] }],\n startClass: [{ type: HostBinding, args: ['class.k-text-start',] }],\n endClass: [{ type: HostBinding, args: ['class.k-text-end',] }],\n idAttribute: [{ type: HostBinding, args: ['attr.id',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HintComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formhint',\n template: `\n \n `\n }]\n }], function () { return []; }, { align: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-form-hint']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] }); })();\n\n/**\n * Specifies a container for form-bound controls (Kendo controls or native HTML controls).\n * Applies styling and behavior rules.\n */\nclass FormFieldComponent {\n constructor(renderer, localizationService) {\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.hostClass = true;\n /**\n *\n * Specifies when the Hint messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying hints when the form-bound component state is\n * `valid` or `untouched` and `pristine`.\n * * `always`—Allows full control over the visibility of the hints.\n *\n */\n this.showHints = 'initial';\n /**\n * Specifies the layout orientation of the form field.\n *\n * * The possible values are:\n *\n * * (Default) `vertical`\n * * `horizontal`\n */\n this.orientation = 'vertical';\n /**\n * Specifies when the Error messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying errors when the form-bound component state is\n * `invalid` and `touched` or `dirty`.\n * * `always`—Allows full control over the visibility of the errors.\n *\n */\n this.showErrors = 'initial';\n this.subscriptions = new Subscription();\n this.rtl = false;\n this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n }));\n }\n get errorClass() {\n if (!this.control) {\n return false;\n }\n return this.control.invalid && (this.control.touched || this.control.dirty);\n }\n get disabledClass() {\n if (!this.control) {\n return false;\n }\n // radiobutton group\n if (this.isRadioControl(this.control)) {\n return false;\n }\n return this.disabledControl() ||\n this.disabledElement() ||\n this.disabledKendoInput();\n }\n set formControls(formControls) {\n this.validateFormControl(formControls);\n this.control = formControls.first;\n }\n /**\n * @hidden\n */\n get horizontal() {\n return this.orientation === 'horizontal';\n }\n /**\n * @hidden\n */\n get hasHints() {\n return this.showHints === 'always' ? true : this.showHintsInitial();\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrors === 'always' ? true : this.showErrorsInitial();\n }\n ngAfterViewInit() {\n this.setDescription();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n disabledKendoInput() {\n return this.kendoInput && this.kendoInput.disabled;\n }\n disabledControl() {\n return this.control.disabled;\n }\n disabledElement() {\n const elements = this.controlElementRefs.toArray();\n return elements.every(e => e.nativeElement.hasAttribute('disabled'));\n }\n validateFormControl(formControls) {\n if (isDevMode() && formControls.length !== 1 && !this.isControlGroup(formControls)) {\n throw new Error('The `kendo-formfield` component should contain ' +\n 'only one control of type NgControl with a formControlName(https://angular.io/api/forms/FormControlName)' +\n 'or an ngModel(https://angular.io/api/forms/NgModel) binding.');\n }\n }\n isControlGroup(formControls) {\n if (!formControls.length) {\n return false;\n }\n const name = formControls.first.name;\n return formControls.toArray().every(c => c.name === name && (this.isRadioControl(c)));\n }\n isRadioControl(control) {\n return control.valueAccessor instanceof RadioControlValueAccessor;\n }\n updateDescription() {\n const controls = this.findControlElements();\n if (!controls) {\n return;\n }\n controls.forEach((control) => {\n const ariaIds = this.generateDescriptionIds(control);\n this.renderer.setAttribute(control, 'aria-describedby', ariaIds);\n });\n }\n findControlElements() {\n if (!this.controlElementRefs) {\n return;\n }\n // if the control is KendoInput and has focusableId - dropdowns, dateinputs\n if (this.kendoInput && this.kendoInput.focusableId && isDocumentAvailable()) {\n return [document.getElementById(this.kendoInput.focusableId)];\n }\n return this.controlElementRefs.map(el => el.nativeElement);\n }\n generateDescriptionIds(control) {\n const ids = new Set();\n if (control.hasAttribute('aria-describedby')) {\n const attributes = control.getAttribute('aria-describedby').split(' ');\n attributes.forEach((attr) => {\n if (attr.includes('kendo-hint-') || attr.includes('kendo-error-')) {\n return;\n }\n ids.add(attr);\n });\n }\n this.hintChildren.forEach((hint) => {\n ids.add(hint.id);\n });\n this.errorChildren.forEach((error) => {\n ids.add(error.id);\n });\n return Array.from(ids).join(' ');\n }\n showHintsInitial() {\n if (!this.control) {\n return true;\n }\n const { valid, untouched, pristine } = this.control;\n return valid || (untouched && pristine);\n }\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n setDescription() {\n this.updateDescription();\n this.subscriptions.add(this.errorChildren.changes.subscribe(() => this.updateDescription()));\n this.subscriptions.add(this.hintChildren.changes.subscribe(() => this.updateDescription()));\n }\n}\nFormFieldComponent.ɵfac = function FormFieldComponent_Factory(t) { return new (t || FormFieldComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFormFieldComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FormFieldComponent, selectors: [[\"kendo-formfield\"]], contentQueries: function FormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, KendoInput, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, NgControl, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, NgControl, true, ElementRef);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, ErrorComponent, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, HintComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControls = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.controlElementRefs = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.errorChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.hintChildren = _t);\n } }, hostVars: 7, hostBindings: function FormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-form-field\", ctx.hostClass)(\"k-form-field-error\", ctx.errorClass)(\"k-form-field-disabled\", ctx.disabledClass);\n } }, inputs: { showHints: \"showHints\", orientation: \"orientation\", showErrors: \"showErrors\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ])], ngContentSelectors: _c54, decls: 5, vars: 4, consts: [[4, \"ngIf\"]], template: function FormFieldComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c53);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\");\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, FormFieldComponent_ng_content_3_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵtemplate(4, FormFieldComponent_ng_content_4_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-form-field-wrap\", ctx.horizontal);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasHints);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasErrors);\n } }, directives: [ɵngcc3.NgIf], encapsulation: 2 });\n/** @nocollapse */\nFormFieldComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: LocalizationService }\n];\nFormFieldComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-form-field',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n errorClass: [{ type: HostBinding, args: ['class.k-form-field-error',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-form-field-disabled',] }],\n formControls: [{ type: ContentChildren, args: [NgControl, { descendants: true, static: true },] }],\n controlElementRefs: [{ type: ContentChildren, args: [NgControl, { read: ElementRef, descendants: true, static: true },] }],\n kendoInput: [{ type: ContentChild, args: [KendoInput, { static: true },] }],\n errorChildren: [{ type: ContentChildren, args: [ErrorComponent, { descendants: true, static: true },] }],\n hintChildren: [{ type: ContentChildren, args: [HintComponent, { descendants: true, static: true },] }],\n showHints: [{ type: Input }],\n orientation: [{ type: Input }],\n showErrors: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FormFieldComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formfield',\n template: `\n \n
    \n \n \n \n
    \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-field']\n }], showHints: [{\n type: Input\n }], orientation: [{\n type: Input\n }], showErrors: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], errorClass: [{\n type: HostBinding,\n args: ['class.k-form-field-error']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-form-field-disabled']\n }], formControls: [{\n type: ContentChildren,\n args: [NgControl, { descendants: true, static: true }]\n }], controlElementRefs: [{\n type: ContentChildren,\n args: [NgControl, { read: ElementRef, descendants: true, static: true }]\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: true }]\n }], errorChildren: [{\n type: ContentChildren,\n args: [ErrorComponent, { descendants: true, static: true }]\n }], hintChildren: [{\n type: ContentChildren,\n args: [HintComponent, { descendants: true, static: true }]\n }] }); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the FormField, Error and Hint components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the FormField module\n * import { FormFieldModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FormFieldModule], // import FormField module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass FormFieldModule {\n}\nFormFieldModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FormFieldModule });\nFormFieldModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FormFieldModule_Factory(t) { return new (t || FormFieldModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FormFieldModule, { declarations: function () { return [HintComponent, ErrorComponent, FormFieldComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [HintComponent, ErrorComponent, FormFieldComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FormFieldModule, [{\n type: NgModule,\n args: [{\n declarations: [HintComponent, ErrorComponent, FormFieldComponent],\n exports: [HintComponent, ErrorComponent, FormFieldComponent],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { InputsModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, InputsModule], // import Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass InputsModule {\n}\nInputsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: InputsModule });\nInputsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function InputsModule_Factory(t) { return new (t || InputsModule)(); }, imports: [[CommonModule], TextBoxModule, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, ColorPickerModule, CheckBoxModule, RadioButtonModule, FormFieldModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(InputsModule, { imports: function () { return [CommonModule]; }, exports: function () { return [TextBoxModule, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, ColorPickerModule, CheckBoxModule, RadioButtonModule, FormFieldModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(InputsModule, [{\n type: NgModule,\n args: [{\n exports: [TextBoxModule, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, ColorPickerModule, CheckBoxModule, RadioButtonModule, FormFieldModule],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CheckBoxModule, ColorInputComponent, FocusOnDomReadyDirective, ColorPaletteService, MaskingService, NumericTextBoxMessages, RadioButtonModule, RangeSliderCustomMessagesComponent, RangeSliderMessages, SliderCustomMessagesComponent, SliderMessages, SliderBase, SlidersCommonModule, SwitchCustomMessagesComponent, Messages, TextBoxCustomMessagesComponent, LocalizedTextBoxMessagesDirective, TextBoxMessages, TextBoxPrefixTemplateDirective, TextBoxSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxComponent, SliderComponent, RangeSliderComponent, LabelTemplateDirective, SwitchComponent, TextBoxContainerComponent, TextBoxDirective, TextAreaDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, MaskedTextBoxComponent, InputsModule, SliderTicksComponent, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, TextBoxModule, ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent, ColorPickerModule, ActiveColorClickEvent, CheckBoxDirective, RadioButtonDirective, HintComponent, ErrorComponent, FormFieldComponent, FormFieldModule, LocalizedNumericTextBoxMessagesDirective, LocalizedSliderMessagesDirective, LocalizedRangeSliderMessagesDirective, LocalizedSwitchMessagesDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NElBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29WQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VPQTBGRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRPQW1GRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsySUF5Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O2lEQWFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dEQVNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O29CQVNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dLQXdFRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7b01BQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTsrR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3VLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUZBNkNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzBJQXdCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFnQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzhNQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTsrRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OytKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFnQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2tOQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7eUdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztvS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBZ0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs4SUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO21GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7K0pBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQWVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFjRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzhKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OEpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tNQStERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztvSEFNRTtBQUNGO0FBQ0E7QUFDQTs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7c0pBQUM7QUFDRDtBQUNBO0FBQ0E7aUdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztnS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQTRCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5S0E2RUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJFQTJDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSkFvRkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lGQXdGRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O29HQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBZ0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBS0U7QUFDRjtBQUNBO0FBQ0E7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUtFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OzZCQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7NkJBUUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dEQW9CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzBCQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29weXJpZ2h0IMKpIDIwMjAgUHJvZ3Jlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIExpY2Vuc2VkIHVuZGVyIGNvbW1lcmNpYWwgbGljZW5zZS4gU2VlIExJQ0VOU0UubWQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgaXNEZXZNb2RlLCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBPcHRpb25hbCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDb250ZW50Q2hpbGQsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0b3IsIFJlbmRlcmVyMiwgTmdab25lLCBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBIb3N0TGlzdGVuZXIsIFZpZXdDaGlsZHJlbiwgTmdNb2R1bGUsIFZpZXdDb250YWluZXJSZWYsIENvbnRlbnRDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgUmFkaW9Db250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIGZpbHRlciwgY29uY2F0TWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgc2tpcCwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSwgTDEwTl9QUkVGSVgsIFJUTCwgQ29tcG9uZW50TWVzc2FnZXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1sMTBuJztcbmltcG9ydCB7IEtleXMsIGd1aWQsIGhhc09ic2VydmVycywgYW55Q2hhbmdlZCwgaXNEb2N1bWVudEF2YWlsYWJsZSwgS2VuZG9JbnB1dCwgaXNDaGFuZ2VkLCBEcmFnZ2FibGVNb2R1bGUsIEV2ZW50c01vZHVsZSwgUmVzaXplU2Vuc29yTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IGJyb3dzZXIsIG1vYmlsZU9TIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWNvbW1vbic7XG5pbXBvcnQgeyBJbnRsU2VydmljZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWludGwnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBvcHVwU2VydmljZSwgUG9wdXBNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1wb3B1cCc7XG5pbXBvcnQgeyBDb2xvciwgcGFyc2VDb2xvciwgbmFtZWRDb2xvcnMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZHJhd2luZyc7XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIENoZWNrcyBpZiB0aGUgdmFsdWUgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLiBGYWxzeSB2YWx1ZXMgbGlrZSAnJywgMCwgZmFsc2UsIE5hTiwgZXRjLiBhcmUgcmVnYXJkZWQgYXMgcHJlc2VudC5cbiAqL1xuY29uc3QgaXNQcmVzZW50ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGFyZVNhbWUgPSAodmFsdWUxLCB2YWx1ZTIpID0+IHZhbHVlMSA9PT0gdmFsdWUyIHx8ICh2YWx1ZTEgPT09IG51bGwgJiYgdmFsdWUyID09PSB1bmRlZmluZWQpIHx8ICh2YWx1ZTEgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZTIgPT09IG51bGwpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJlcXVpcmVzWm9uZU9uQmx1ciA9IChuZ0NvbnRyb2wpID0+IG5nQ29udHJvbCAmJlxuICAgICghbmdDb250cm9sLnRvdWNoZWQgfHwgKG5nQ29udHJvbC5jb250cm9sICYmIG5nQ29udHJvbC5jb250cm9sLnVwZGF0ZU9uID09PSAnYmx1cicpKTtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIEZpdHMgdGhlIGNvbnRlbmRlciBudW1iZXIgaW50byB0aGUgc3BlY2lmaWVkIGJvdW5kcy4gSWYgdGhlIG51bWJlciBpcyBOYU4gb3IgbnVsbCwgdGhlIG1pbiBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gY29udGVuZGVyIFJlcHJlc2VudHMgdGhlIG51bWJlciB5b3Ugd2FudCB0byBmaXQgaW50byBzcGVjaWZpZWQgYm91bmRzLlxuICogQHBhcmFtIG1pbiBUaGUgaW5jbHVzaXZlIGxvd2VyIGJvdW5kIG51bWJlci5cbiAqIEBwYXJhbSBtYXggVGhlIGluY2x1c2l2ZSB1cHBlciBib3VuZCBudW1iZXIuXG4gKi9cbmNvbnN0IGZpdEludG9Cb3VuZHMgPSAoY29udGVuZGVyLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICghaXNQcmVzZW50KGNvbnRlbmRlcikgfHwgaXNOYU4oY29udGVuZGVyKSkge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVuZGVyIDw9IG1pbiA/IG1pbiA6IGNvbnRlbmRlciA+PSBtYXggPyBtYXggOiBjb250ZW5kZXI7XG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTUFYX1BSRUNJU0lPTiA9IDIwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGxpbWl0UHJlY2lzaW9uID0gKHByZWNpc2lvbikgPT4gTWF0aC5taW4ocHJlY2lzaW9uLCBNQVhfUFJFQ0lTSU9OKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmcmFjdGlvbkxlbmd0aCA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAoU3RyaW5nKHZhbHVlKS5zcGxpdCgnLicpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbn07XG5jb25zdCBtYXhGcmFjdGlvbkxlbmd0aCA9ICh2YWx1ZTEsIHZhbHVlMikgPT4ge1xuICAgIHJldHVybiBNYXRoLm1heChmcmFjdGlvbkxlbmd0aCh2YWx1ZTEpLCBmcmFjdGlvbkxlbmd0aCh2YWx1ZTIpKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9GaXhlZFByZWNpc2lvbiA9ICh2YWx1ZSwgcHJlY2lzaW9uKSA9PiB7XG4gICAgY29uc3QgbWF4UHJlY2lzaW9uID0gbGltaXRQcmVjaXNpb24ocHJlY2lzaW9uKTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKG1heFByZWNpc2lvbikpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBhZGQgPSAodmFsdWUxLCB2YWx1ZTIpID0+IHtcbiAgICBjb25zdCBtYXhQcmVjaXNpb24gPSBtYXhGcmFjdGlvbkxlbmd0aCh2YWx1ZTEsIHZhbHVlMik7XG4gICAgcmV0dXJuIHRvRml4ZWRQcmVjaXNpb24odmFsdWUxICsgdmFsdWUyLCBtYXhQcmVjaXNpb24pO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzdWJ0cmFjdCA9ICh2YWx1ZTEsIHZhbHVlMikgPT4ge1xuICAgIHJldHVybiBhZGQodmFsdWUxLCAtdmFsdWUyKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbXVsdGlwbHkgPSAodmFsdWUxLCB2YWx1ZTIpID0+IHtcbiAgICBjb25zdCBtYXhQcmVjaXNpb24gPSBmcmFjdGlvbkxlbmd0aCh2YWx1ZTEpICsgZnJhY3Rpb25MZW5ndGgodmFsdWUyKTtcbiAgICByZXR1cm4gdG9GaXhlZFByZWNpc2lvbih2YWx1ZTEgKiB2YWx1ZTIsIG1heFByZWNpc2lvbik7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRpdmlkZSA9IChkaXZpZGVuZCwgZGl2aXNvcikgPT4ge1xuICAgIGlmIChkaXZpc29yID09PSAwKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIGNvbnN0IHBvd2VyID0gbWF4RnJhY3Rpb25MZW5ndGgoZGl2aWRlbmQsIGRpdmlzb3IpO1xuICAgIGNvbnN0IGNvcnJlY3Rpb25WYWx1ZSA9IE1hdGgucG93KDEwLCBwb3dlcik7XG4gICAgcmV0dXJuICgoY29ycmVjdGlvblZhbHVlICogZGl2aWRlbmQpIC8gKGNvcnJlY3Rpb25WYWx1ZSAqIGRpdmlzb3IpKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcmVtYWluZGVyID0gKGRpdmlkZW5kLCBkaXZpc29yKSA9PiB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHN1YnRyYWN0KGRpdmlkZW5kLCBtdWx0aXBseShkaXZpc29yLCBNYXRoLmZsb29yKGRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcikpKSkpO1xufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZUZpeGVkVHJhY2tTaXplID0gKHsgbWF4LCBtaW4sIHNtYWxsU3RlcCwgZml4ZWRUaWNrV2lkdGggfSkgPT4gKChtYXggLSBtaW4pIC8gc21hbGxTdGVwKSAqIGZpeGVkVGlja1dpZHRoO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZVRyYWNrU2l6ZSA9ICh3cmFwcGVyV2lkdGgsIG9mZnNldCwgc2hvd0J1dHRvbnMgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgQlVUVE9OU19DT1VOVCA9IDI7XG4gICAgY29uc3QgdHJhY2tPZmZzZXQgPSBzaG93QnV0dG9ucyA/IHBhcnNlRmxvYXQob2Zmc2V0KSAqIEJVVFRPTlNfQ09VTlQgOiAwO1xuICAgIGNvbnN0IHRyYWNrV2lkdGggPSB3cmFwcGVyV2lkdGggLSB0cmFja09mZnNldDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih0cmFja1dpZHRoKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2FsY3VsYXRlVGlja3NDb3VudCA9IChtaW4gPSAwLCBtYXggPSAwLCBzbWFsbFN0ZXAgPSAxKSA9PiB7XG4gICAgaWYgKHNtYWxsU3RlcCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudDogc21hbGxTdGVwIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB9XG4gICAgY29uc3QgYWRqdXN0ZWRSYW5nZSA9IE1hdGguYWJzKHN1YnRyYWN0KG1heCwgbWluKSk7XG4gICAgY29uc3QgYWRqdXN0ZWRSYXRpbyA9IE1hdGguZmxvb3IoZGl2aWRlKGFkanVzdGVkUmFuZ2UsIHNtYWxsU3RlcCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZChhZGp1c3RlZFJhdGlvLCAxKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjYWxjdWxhdGVWYWx1ZUZyb21UaWNrID0gKGluZGV4LCB7IG1heCwgbWluLCBzbWFsbFN0ZXAsIHJldmVyc2UsIHZlcnRpY2FsIH0pID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGFkZChtaW4sIG11bHRpcGx5KGluZGV4LCBzbWFsbFN0ZXApKTtcbiAgICByZXR1cm4gdmVydGljYWwgfHwgcmV2ZXJzZSA/IE1hdGguYWJzKHN1YnRyYWN0KHZhbHVlLCBtYXgpKSA6IHZhbHVlO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjYWxjdWxhdGVIYW5kbGVQb3NpdGlvbiA9ICh7IGhhbmRsZVdpZHRoLCB0cmFja1dpZHRoLCBtaW4sIG1heCwgcmV2ZXJzZSwgdmFsdWUgfSkgPT4ge1xuICAgIGNvbnN0IGhhbGZIYW5kbGVXaWR0aCA9IE1hdGguZmxvb3IoaGFuZGxlV2lkdGggLyAyKTtcbiAgICBjb25zdCBzdGVwID0gdHJhY2tXaWR0aCAvIE1hdGguYWJzKG1heCAtIG1pbik7XG4gICAgbGV0IHBvcyA9IGlzUHJlc2VudCh2YWx1ZSkgPyBzdGVwICogKHZhbHVlIC0gbWluKSA6IG1pbjtcbiAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICBwb3MgPSB0cmFja1dpZHRoIC0gcG9zO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihwb3MgLSBoYWxmSGFuZGxlV2lkdGgpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkZWNyZWFzZVZhbHVlVG9TdGVwID0gKHZhbHVlLCB7IG1heCwgbWluLCBzbWFsbFN0ZXAsIGxhcmdlU3RlcCB9LCBsYXJnZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IGxhcmdlICYmIGxhcmdlU3RlcCA/IG11bHRpcGx5KHNtYWxsU3RlcCwgbGFyZ2VTdGVwKSA6IHNtYWxsU3RlcDtcbiAgICBjb25zdCBzdGVwVmFsdWUgPSBzdWJ0cmFjdCh2YWx1ZSwgbWluKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHN0ZXBSZW1haW5kZXIgPSByZW1haW5kZXIoc3RlcFZhbHVlLCBzdGVwKTtcbiAgICBpZiAoc3RlcFJlbWFpbmRlciA9PT0gMCkge1xuICAgICAgICByZXN1bHQgPSBzdWJ0cmFjdChzdGVwVmFsdWUsIHN0ZXApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gc3VidHJhY3Qoc3RlcFZhbHVlLCBzdGVwUmVtYWluZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbWl0VmFsdWUoYWRkKHJlc3VsdCwgbWluKSwgbWluLCBtYXgpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpbmNyZWFzZVZhbHVlVG9TdGVwID0gKHZhbHVlLCB7IG1heCwgbWluLCBzbWFsbFN0ZXAsIGxhcmdlU3RlcCB9LCBsYXJnZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IGxhcmdlICYmIGxhcmdlU3RlcCA/IG11bHRpcGx5KHNtYWxsU3RlcCwgbGFyZ2VTdGVwKSA6IHNtYWxsU3RlcDtcbiAgICBjb25zdCBzdGVwVmFsdWUgPSBzdWJ0cmFjdCh2YWx1ZSwgbWluKTtcbiAgICBjb25zdCBzdGVwUmVtYWluZGVyID0gcmVtYWluZGVyKHN0ZXBWYWx1ZSwgc3RlcCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYWRkKHN1YnRyYWN0KHN0ZXBWYWx1ZSwgc3RlcFJlbWFpbmRlciksIHN0ZXApO1xuICAgIHJldHVybiBsaW1pdFZhbHVlKGFkZChyZXN1bHQsIG1pbiksIG1pbiwgbWF4KTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNTdGFydEhhbmRsZSA9IChkcmFnSGFuZGxlKSA9PiBkcmFnSGFuZGxlLmlkLmluZGV4T2YoJ2stc3RhcnQtaGFuZGxlJykgPiAtMTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzbmFwVmFsdWUgPSAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IHNtYWxsU3RlcCwgbWluLCBtYXggfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbGltaXRlZCA9IGxpbWl0VmFsdWUodmFsdWUsIG1pbiwgbWF4KTtcbiAgICBpZiAodmFsdWUgIT09IGxpbWl0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGxpbWl0ZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxlZnQgPSBkZWNyZWFzZVZhbHVlVG9TdGVwKHZhbHVlLCBvcHRpb25zKTtcbiAgICBjb25zdCByaWdodCA9IGluY3JlYXNlVmFsdWVUb1N0ZXAodmFsdWUsIG9wdGlvbnMpO1xuICAgIGlmICgodmFsdWUgLSBtaW4pICUgc21hbGxTdGVwID09PSAwKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHJpZ2h0IC0gdmFsdWUgPD0gKHJpZ2h0IC0gbGVmdCkgLyAyKSB7XG4gICAgICAgIHJldHVybiByaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRyaW1WYWx1ZSA9IChtYXgsIG1pbiwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdHJpbVZhbHVlUmFuZ2UgPSAobWF4LCBtaW4sIHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlID8gW3RyaW1WYWx1ZShtYXgsIG1pbiwgdmFsdWVbMF0pLCB0cmltVmFsdWUobWF4LCBtaW4sIHZhbHVlWzFdKV0gOiBbbWluLCBtaW5dO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpZGVudGl0eSA9ICh2YWx1ZSkgPT4gdmFsdWU7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNTYW1lUmFuZ2UgPSAodmFsdWUxLCB2YWx1ZTIpID0+IGFyZVNhbWUodmFsdWUxWzBdLCB2YWx1ZTJbMF0pICYmIGFyZVNhbWUodmFsdWUxWzFdLCB2YWx1ZTJbMV0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGVsZW1lbnRPZmZzZXQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGJveCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGJveC5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkgLSAoZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnQgfHwgMCksXG4gICAgICAgIHRvcDogYm94LnRvcCArICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkgLSAoZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcCB8fCAwKVxuICAgIH07XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGxpbWl0VmFsdWUgPSAodmFsdWUsIG1pbiwgbWF4KSA9PiB7XG4gICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHZhbHVlLCBtYXgpLCBtaW4pO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBldmVudFZhbHVlID0gKGV2ZW50QXJncywgc2NhbGVFbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBtaW4sIG1heCwgdmVydGljYWwsIHJ0bCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB0cmFja09mZnNldCA9IGVsZW1lbnRPZmZzZXQoc2NhbGVFbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXQgPSB2ZXJ0aWNhbCA/IGV2ZW50QXJncy5wYWdlWSAtIHRyYWNrT2Zmc2V0LnRvcCA6IGV2ZW50QXJncy5wYWdlWCAtIHRyYWNrT2Zmc2V0LmxlZnQ7XG4gICAgY29uc3Qgc2NhbGUgPSAobWF4IC0gbWluKSAvICh2ZXJ0aWNhbCA/IHNjYWxlRWxlbWVudC5jbGllbnRIZWlnaHQgOiBzY2FsZUVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgIGNvbnN0IG9mZnNldFZhbHVlID0gb2Zmc2V0ICogc2NhbGU7XG4gICAgbGV0IHZhbHVlID0gcnRsIHx8IHZlcnRpY2FsID8gbWF4IC0gb2Zmc2V0VmFsdWUgOiBtaW4gKyBvZmZzZXRWYWx1ZTtcbiAgICBjb25zdCBzdGVwRnJhY3Rpb25MZW5ndGggPSBmcmFjdGlvbkxlbmd0aChvcHRpb25zLnNtYWxsU3RlcCk7XG4gICAgdmFsdWUgPSB0b0ZpeGVkUHJlY2lzaW9uKHZhbHVlLCBzdGVwRnJhY3Rpb25MZW5ndGggKyAxKTtcbiAgICByZXR1cm4gc25hcFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNCdXR0b24gPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKCdrLWJ1dHRvbi1pbmNyZWFzZScpID49IDAgfHwgZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZignay1idXR0b24tZGVjcmVhc2UnKSA+PSAwO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpbmNyZW1lbnQgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBpbmNyZWFzZVZhbHVlVG9TdGVwKG9wdGlvbnMudmFsdWUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkZWNyZW1lbnQgPSAob3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBkZWNyZWFzZVZhbHVlVG9TdGVwKG9wdGlvbnMudmFsdWUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpbmNyZW1lbnRMYXJnZSA9IChvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGluY3JlYXNlVmFsdWVUb1N0ZXAob3B0aW9ucy52YWx1ZSwgb3B0aW9ucywgdHJ1ZSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRlY3JlbWVudExhcmdlID0gKG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZGVjcmVhc2VWYWx1ZVRvU3RlcChvcHRpb25zLnZhbHVlLCBvcHRpb25zLCB0cnVlKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdmFsaWRhdGVWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUgJiYgdmFsdWUgJiYgdmFsdWVbMF0gPiB2YWx1ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tSYW5nZVNsaWRlcl0gVGhlIHN0YXJ0IHZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBlbmQgdmFsdWUuJyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNsaWRlck1vZGVsQmFzZSB7XG4gICAgY29uc3RydWN0b3IocHJvcHMsIHdyYXBwZXIsIHRyYWNrLCByZW5kZXJlcikge1xuICAgICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IHdyYXBwZXI7XG4gICAgICAgIHRoaXMudHJhY2sgPSB0cmFjaztcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IHdyYXBwZXI7XG4gICAgICAgIHRoaXMudHJhY2sgPSB0cmFjaztcbiAgICAgICAgdGhpcy50aWNrU2l6ZXMgPSB0aGlzLmdldFRpY2tTaXplcygpO1xuICAgIH1cbiAgICByZXNpemVUcmFjaygpIHtcbiAgICAgICAgY29uc3Qgb3JpZW50YXRpb24gPSB0aGlzLnByb3BzLnZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCB0cmFja1dpZHRoID0gdGhpcy50cmFja1dpZHRoKCk7XG4gICAgICAgIHRoaXMudHJhY2suc3R5bGVbb3JpZW50YXRpb25dID0gYCR7dHJhY2tXaWR0aH1weGA7XG4gICAgfVxuICAgIHJlc2l6ZVRpY2tzKHRpY2tzQ29udGFpbmVyLCB0aWNrcykge1xuICAgICAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLnByb3BzLnZlcnRpY2FsID8gXCJoZWlnaHRcIiA6IFwid2lkdGhcIjtcbiAgICAgICAgWy4uLnRpY2tzXS5tYXAoKHRpY2ssIGluZGV4KSA9PiB0aWNrLnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLnRpY2tTaXplc1tpbmRleF19cHhgKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0UGFkZGluZyh0aWNrc0NvbnRhaW5lcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzaXplV3JhcHBlcigpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5wcm9wcy52ZXJ0aWNhbCA/IFwiaGVpZ2h0XCIgOiBcIndpZHRoXCI7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJTaXplID0gdGhpcy5lbGVtZW50U2l6ZSh0aGlzLndyYXBwZXIpO1xuICAgICAgICBjb25zdCB0cmFja1dpZHRoID0gY2FsY3VsYXRlVHJhY2tTaXplKHdyYXBwZXJTaXplLCB0aGlzLmVsZW1lbnRPZmZzZXQodGhpcy50cmFjaykpO1xuICAgICAgICBjb25zdCBmaXhlZFRyYWNrV2lkdGggPSBjYWxjdWxhdGVGaXhlZFRyYWNrU2l6ZSh0aGlzLnByb3BzKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlclBhcmVudEVsID0gdGhpcy53cmFwcGVyLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmICh0cmFja1dpZHRoID4gZml4ZWRUcmFja1dpZHRoKSB7XG4gICAgICAgICAgICB3cmFwcGVyUGFyZW50RWwuc3R5bGVbZGltZW5zaW9uXSA9IGAke3dyYXBwZXJTaXplIC0gKHRyYWNrV2lkdGggLSBmaXhlZFRyYWNrV2lkdGgpfXB4YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXJQYXJlbnRFbC5zdHlsZVtkaW1lbnNpb25dID0gYCR7d3JhcHBlclNpemUgKyAoZml4ZWRUcmFja1dpZHRoIC0gdHJhY2tXaWR0aCl9cHhgO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRyYWNrV2lkdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmZpeGVkVGlja1dpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlRml4ZWRUcmFja1NpemUodGhpcy5wcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVRyYWNrU2l6ZSh0aGlzLmVsZW1lbnRTaXplKHRoaXMud3JhcHBlciksIHRoaXMuZWxlbWVudE9mZnNldCh0aGlzLnRyYWNrKSwgdGhpcy5wcm9wcy5idXR0b25zKTtcbiAgICB9XG4gICAgZ2V0VGlja1NpemVzKCkge1xuICAgICAgICBjb25zdCB7IG1pbiwgbWF4LCBzbWFsbFN0ZXAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gY2FsY3VsYXRlVGlja3NDb3VudChtaW4sIG1heCwgc21hbGxTdGVwKTtcbiAgICAgICAgY29uc3QgdHJhY2tTaXplID0gdGhpcy50cmFja1dpZHRoKCk7XG4gICAgICAgIGNvbnN0IGRpc3RTdGVwID0gdHJhY2tTaXplIC8gc3VidHJhY3QobWF4LCBtaW4pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IHVzZWRTcGFjZSA9IDA7XG4gICAgICAgIGxldCBlbmRQb2ludCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaSA9PT0gY291bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgZW5kUG9pbnQgKz0gKHNtYWxsU3RlcCAvIDIpICogZGlzdFN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmRQb2ludCArPSBzbWFsbFN0ZXAgKiBkaXN0U3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBzdW0gb2YgdGhlIHRpY2sgc2l6ZXMgZG9lcyBub3QgZXhjZWVkIHRoZSB0cmFjayB3aWR0aFxuICAgICAgICAgICAgZW5kUG9pbnQgPSArZW5kUG9pbnQudG9GaXhlZCgyKSAtIDAuMDE7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gTWF0aC5yb3VuZChlbmRQb2ludCAtIHVzZWRTcGFjZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChzaXplKTtcbiAgICAgICAgICAgIHVzZWRTcGFjZSArPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VkU3BhY2UgPj0gdHJhY2tTaXplKSB7XG4gICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIC09IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYWRqdXN0UGFkZGluZyh0aWNrc0NvbnRhaW5lcikge1xuICAgICAgICBjb25zdCB0b3RhbFRpY2tTaXplID0gdGhpcy50aWNrU2l6ZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XG4gICAgICAgIGNvbnN0IHRyYWNrV2lkdGggPSB0aGlzLnRyYWNrV2lkdGgoKTtcbiAgICAgICAgY29uc3QgcmVtaW5kZXIgPSB0cmFja1dpZHRoIC0gdG90YWxUaWNrU2l6ZTtcbiAgICAgICAgaWYgKHJlbWluZGVyICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcmVtaW5kZXIgKyB0aGlzLmVsZW1lbnRPZmZzZXQodGhpcy50cmFjayk7XG4gICAgICAgICAgICB0aWNrc0NvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7cGFkZGluZ31weGA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudE9mZnNldChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgdmVydGljYWwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZlcnRpY2FsID8gc3R5bGUuYm90dG9tIDogc3R5bGUubGVmdCwgMTApO1xuICAgIH1cbiAgICBlbGVtZW50U2l6ZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgdmVydGljYWwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiB2ZXJ0aWNhbCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDogZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTbGlkZXJNb2RlbCBleHRlbmRzIFNsaWRlck1vZGVsQmFzZSB7XG4gICAgcG9zaXRpb25IYW5kbGUoZHJhZ0hhbmRsZSkge1xuICAgICAgICBjb25zdCB7IG1heCwgbWluLCByZXZlcnNlLCB2ZXJ0aWNhbCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB2ZXJ0aWNhbCA/ICdib3R0b20nIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCB0cmFja1dpZHRoID0gdGhpcy50cmFja1dpZHRoKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJpbVZhbHVlKG1heCwgbWluLCB0aGlzLnByb3BzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb3NpdGlvbiA9IGNhbGN1bGF0ZUhhbmRsZVBvc2l0aW9uKHtcbiAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgIG1heCxcbiAgICAgICAgICAgIHJldmVyc2UsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRyYWNrV2lkdGgsXG4gICAgICAgICAgICBoYW5kbGVXaWR0aDogZHJhZ0hhbmRsZS5vZmZzZXRXaWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcmFnSGFuZGxlLCBwb3NpdGlvbiwgYCR7dGhpcy5oYW5kbGVQb3NpdGlvbn1weGApO1xuICAgIH1cbiAgICBwb3NpdGlvblNlbGVjdGlvbihkcmFnSGFuZGxlLCBzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgeyByZXZlcnNlLCB2ZXJ0aWNhbCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gdmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGhhbmRsZVdpZHRoID0gTWF0aC5mbG9vcihkcmFnSGFuZGxlLm9mZnNldFdpZHRoIC8gMik7XG4gICAgICAgIGxldCBzaXplID0gdGhpcy5oYW5kbGVQb3NpdGlvbiArIGhhbmRsZVdpZHRoO1xuICAgICAgICBpZiAocmV2ZXJzZSkge1xuICAgICAgICAgICAgc2l6ZSA9IHRoaXMudHJhY2tXaWR0aCgpIC0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNlbGVjdGlvbiwgZGltZW5zaW9uLCBgJHtzaXplfXB4YCk7XG4gICAgfVxufVxuXG5jb25zdCBVTlRPVUNIRUQgPSAnbmctdW50b3VjaGVkJztcbmNvbnN0IHRvQ2xhc3NMaXN0ID0gKGNsYXNzTmFtZXMpID0+IFN0cmluZyhjbGFzc05hbWVzKS50cmltKCkuc3BsaXQoJyAnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNDbGFzcyA9IChlbGVtZW50LCBjbGFzc05hbWUpID0+IEJvb2xlYW4odG9DbGFzc0xpc3QoZWxlbWVudC5jbGFzc05hbWUpLmZpbmQoKG5hbWUpID0+IG5hbWUgPT09IGNsYXNzTmFtZSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGludm9rZUVsZW1lbnRNZXRob2QoZWxlbWVudCwgbmFtZSwgLi4uYXJncykge1xuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5uYXRpdmVFbGVtZW50W25hbWVdLmFwcGx5KGVsZW1lbnQubmF0aXZlRWxlbWVudCwgYXJncyk7XG4gICAgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzVW50b3VjaGVkID0gKGVsZW1lbnQpID0+IGVsZW1lbnQgJiYgZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIGhhc0NsYXNzKGVsZW1lbnQubmF0aXZlRWxlbWVudCwgVU5UT1VDSEVEKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb250YWluc0ZvY3VzID0gKGhvc3RFbGVtZW50LCBjb250ZW5kZXIpID0+IGhvc3RFbGVtZW50ICYmIGNvbnRlbmRlciAmJiAoaG9zdEVsZW1lbnQgPT09IGNvbnRlbmRlciB8fCBob3N0RWxlbWVudC5jb250YWlucyhjb250ZW5kZXIpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9zZXN0ID0gKG5vZGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmICFwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHRlbXBsYXRlIGZvciB0aGUgbGFiZWxzIG9mIHRoZSBTbGlkZXIuXG4gKiBUbyBkZWZpbmUgdGhlIGxhYmVscyB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb1NsaWRlckxhYmVsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGVcbiAqIHRoZSBgPGtlbmRvLXNsaWRlcj5gIHRhZy4gVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgcGFzc2VkIHRvIHRoZSBgbGFiZWxgIHZhbHVlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1zbGlkZXIgW2xhcmdlU3RlcF09XCIyXCI+XG4gKiAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvU2xpZGVyTGFiZWxUZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICogICAgICAgICAgICAgPGI+e3t2YWx1ZX19PC9iPlxuICogICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgIDwva2VuZG8tc2xpZGVyPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkxhYmVsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1NsaWRlckxhYmVsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5MYWJlbFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTbGlkZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb25TZXJ2aWNlLCBpbmplY3RvciwgcmVuZGVyZXIsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIGhvc3RFbGVtZW50KSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZSA9IGxvY2FsaXphdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICB0aGlzLmhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSB0aXRsZSBvZiB0aGUgdGlja3MgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB0aWNrc19zbGlkZXIgJX0jdG9jLXRpdGxlcykpLiBUaGUgZGVmYXVsdCB0aXRsZVxuICAgICAgICAgKiBmb3IgZWFjaCB0aWNrIGlzIGl0cyBTbGlkZXIgdmFsdWUuIElmIHlvdSB1c2UgYSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIGZ1bmN0aW9uIGFjY2VwdHMgYW4gYXJndW1lbnRcbiAgICAgICAgICogdGhhdCBob2xkcyB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBhbmQgcmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBuZXcgdGl0bGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpdGxlID0gaWRlbnRpdHk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZW5vdGVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGljayBtYXJrcyBpbiB0aGUgU2xpZGVyIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgdGlja3Nfc2xpZGVyICV9I3RvYy1wbGFjZW1lbnQpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgICAgICogKiBgYmVmb3JlYCZtZGFzaDtUaGUgdGljayBtYXJrcyBhcmUgbG9jYXRlZCB0byB0aGUgdG9wIHNpZGUgb2YgdGhlIGhvcml6b250YWwgdHJhY2sgb3IgdG8gdGhlIGxlZnQgc2lkZSBvZiBhIHZlcnRpY2FsIHRyYWNrLlxuICAgICAgICAgKiAqIGBhZnRlcmAmbWRhc2g7VGhlIHRpY2sgbWFya3MgYXJlIGxvY2F0ZWQgdG8gdGhlIGJvdHRvbSBzaWRlIG9mIHRoZSBob3Jpem9udGFsIHRyYWNrIG9yIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSB2ZXJ0aWNhbCB0cmFjay5cbiAgICAgICAgICogKiBgYm90aGAmbWRhc2g7IChEZWZhdWx0KSBUaGUgdGljayBtYXJrcyBhcmUgbG9jYXRlZCBvbiBib3RoIHNpZGVzIG9mIHRoZSB0cmFjay5cbiAgICAgICAgICogKiBgbm9uZWAmbWRhc2g7VGhlIHRpY2sgbWFya3MgYXJlIG5vdCB2aXNpYmxlLiBUaGUgYWN0dWFsIGVsZW1lbnRzIGFyZSBub3QgYWRkZWQgdG8gdGhlIERPTSB0cmVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aWNrUGxhY2VtZW50ID0gJ2JvdGgnO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgYHZlcnRpY2FsYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIFNsaWRlciBjaGFuZ2VzIGZyb20gaG9yaXpvbnRhbCB0byB2ZXJ0aWNhbFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIG9yaWVudGF0aW9uX3NsaWRlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIFNsaWRlciAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHByZWRlZmluZWRzdGVwc19zbGlkZXIgJX0jdG9jLXNtYWxsLXN0ZXBzKSkuXG4gICAgICAgICAqIFRoZSBhdHRyaWJ1dGUgYWNjZXB0cyBib3RoIGludGVnZXJzIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5taW4gPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIFNsaWRlciAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHByZWRlZmluZWRzdGVwc19zbGlkZXIgJX0jdG9jLXNtYWxsLXN0ZXBzKSkuXG4gICAgICAgICAqIFRoZSBhdHRyaWJ1dGUgYWNjZXB0cyBib3RoIGludGVnZXJzIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXggPSAxMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBzdGVwIHZhbHVlIG9mIHRoZSBTbGlkZXIgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwcmVkZWZpbmVkc3RlcHNfc2xpZGVyICV9I3RvYy1zbWFsbC1zdGVwcykpLlxuICAgICAgICAgKiBBY2NlcHRzIHBvc2l0aXZlIHZhbHVlcyBvbmx5LiBDYW4gYmUgYW4gaW50ZWdlciBvciBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc21hbGxTdGVwID0gMTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGF0IGV2ZXJ5IG48c3VwPnRoPC9zdXA+IHRpY2sgd2lsbCBiZSBsYXJnZSBhbmQgd2lsbCBoYXZlIGEgbGFiZWxcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwcmVkZWZpbmVkc3RlcHNfc2xpZGVyICV9I3RvYy1sYXJnZS1zdGVwcykpLlxuICAgICAgICAgKiBBY2NlcHRzIHBvc2l0aXZlIGludGVnZXIgdmFsdWVzIG9ubHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhcmdlU3RlcCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFNsaWRlciBpcyBkaXNhYmxlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkc3RhdGVfc2xpZGVyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFNsaWRlciBpcyBpbiBpdHMgcmVhZC1vbmx5IHN0YXRlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfc2xpZGVyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgU2xpZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgZm9jdXNlcyB0aGUgY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBjb21wb25lbnQgaXMgYmx1cnJlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnNsaWRlckNsYXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53aWRnZXRDbGFzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWZFbmFibGVkID0gKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb25TZXJ2aWNlLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIGdldCBob3Jpem9udGFsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy52ZXJ0aWNhbDtcbiAgICB9XG4gICAgZ2V0IHZlcnRpY2FsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgc3RhdHVzIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcyB0byBvciBmcm9tIGBkaXNhYmxlZGAuXG4gICAgICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSwgaXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXBwcm9wcmlhdGUgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZFxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5zaXplQ29tcG9uZW50KCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgXCJ0YWJpbmRleFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBGbG9hdGluZ0xhYmVsIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHJldmVyc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UucnRsICYmICF0aGlzLnZlcnRpY2FsO1xuICAgIH1cbiAgICBnZXQga2V5QmluZGluZygpIHtcbiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IHRoaXMucmV2ZXJzZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtLZXlzLkFycm93TGVmdF06IHJldmVyc2UgPyBpbmNyZW1lbnQgOiBkZWNyZW1lbnQsXG4gICAgICAgICAgICBbS2V5cy5BcnJvd1JpZ2h0XTogcmV2ZXJzZSA/IGRlY3JlbWVudCA6IGluY3JlbWVudCxcbiAgICAgICAgICAgIFtLZXlzLkFycm93RG93bl06IGRlY3JlbWVudCxcbiAgICAgICAgICAgIFtLZXlzLkFycm93VXBdOiBpbmNyZW1lbnQsXG4gICAgICAgICAgICBbS2V5cy5QYWdlVXBdOiBpbmNyZW1lbnRMYXJnZSxcbiAgICAgICAgICAgIFtLZXlzLlBhZ2VEb3duXTogZGVjcmVtZW50TGFyZ2UsXG4gICAgICAgICAgICBbS2V5cy5Ib21lXTogKHsgbWluIH0pID0+IG1pbixcbiAgICAgICAgICAgIFtLZXlzLkVuZF06ICh7IG1heCB9KSA9PiBtYXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVzZXRTdHlsZXMoZWxlbWVudHMpIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnd2lkdGgnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ2xlZnQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnaGVpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdib3R0b20nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3BhZGRpbmctdG9wJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblNsaWRlckJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpY2tQbGFjZW1lbnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZlcnRpY2FsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc21hbGxTdGVwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYXJnZVN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpeGVkVGlja1dpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgaG9yaXpvbnRhbENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXNsaWRlci1ob3Jpem9udGFsJyxdIH1dLFxuICAgIHZlcnRpY2FsQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2xpZGVyLXZlcnRpY2FsJyxdIH1dLFxuICAgIHNsaWRlckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXNsaWRlcicsXSB9XSxcbiAgICB3aWRnZXRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfV0sXG4gICAgZGlzYWJsZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XSxcbiAgICB3cmFwcGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnd3JhcCcsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB0cmFjazogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3RyYWNrJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHNsaWRlclNlbGVjdGlvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3NsaWRlclNlbGVjdGlvbicsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB0aWNrc0NvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3RpY2tzJywgeyByZWFkOiBFbGVtZW50UmVmIH0sXSB9XSxcbiAgICB0aWNrczogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3RpY2tzJyxdIH1dLFxuICAgIGxhYmVsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0xhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XVxufTtcblxuY29uc3QgRk9DVVNFRCA9ICdrLXN0YXRlLWZvY3VzZWQnO1xuY29uc3QgUFJFU1NFRCA9ICdrLXByZXNzZWQnO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgU2xpZGVyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19zbGlkZXIgJX0pLlxuICovXG5jbGFzcyBTbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBTbGlkZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGluamVjdG9yLCByZW5kZXJlciwgbmdab25lLCBjaGFuZ2VEZXRlY3RvciwgaG9zdEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uLCBpbmplY3RvciwgcmVuZGVyZXIsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIGhvc3RFbGVtZW50KTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICB0aGlzLmhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgaWYgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHBsYXllZCBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAgICAgICAqIFJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLCBubyBhbmltYXRpb24gd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIHRoZSBpbml0aWFsIHJlbmRlcmluZy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW5kZXJzIHRoZSBhcnJvdyBzaWRlIGJ1dHRvbnMgb2YgdGhlIFNsaWRlciAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNpZGVidXR0b25zX3NsaWRlciAlfSN0b2MtaGlkZGVuLXN0YXRlKSkuXG4gICAgICAgICAqIFdoZW4gYHNob3dCdXR0b25zYCBpcyBzZXQgdG8gYGZhbHNlYCwgdGhlIGJ1dHRvbnMgYXJlIG5vdCBkaXNwbGF5ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dCdXR0b25zID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBTbGlkZXIgd2hlbiBpdCBpcyBpbml0aWFsbHkgZGlzcGxheWVkLlxuICAgICAgICAgKiBUaGUgY29tcG9uZW50IGNhbiB1c2UgZWl0aGVyIE5nTW9kZWwgb3IgdGhlIGB2YWx1ZWAgYmluZGluZyBidXQgbm90IGJvdGggb2YgdGhlbSBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25Gb2N1cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uQmx1cikgfHwgcmVxdWlyZXNab25lT25CbHVyKHRoaXMuY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uV3JhcENsaWNrID0gKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGFyZ3MudGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQgJiYgIShpc0J1dHRvbih0YXJnZXQpIHx8IGlzQnV0dG9uKHRhcmdldC5wYXJlbnROb2RlKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50VmFsdWUoYXJncywgdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LCB0aGlzLmdldFByb3BzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbktleURvd24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbWF4LCBtaW4gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5rZXlCaW5kaW5nW2Uua2V5Q29kZV07XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkIHx8ICFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoYW5kbGVyKG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSh0cmltVmFsdWUobWF4LCBtaW4sIHZhbHVlKSk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmdDaGFuZ2UgPSAoXykgPT4geyB9O1xuICAgICAgICB0aGlzLm5nVG91Y2hlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5kZWNyZWFzZVZhbHVlID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZShkZWNyZWFzZVZhbHVlVG9TdGVwKHRoaXMudmFsdWUsIHRoaXMuZ2V0UHJvcHMoKSkpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluY3JlYXNlVmFsdWUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKGluY3JlYXNlVmFsdWVUb1N0ZXAodGhpcy52YWx1ZSwgdGhpcy5nZXRQcm9wcygpKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgdGFiSW5kZXgodGFiSW5kZXgpIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IHRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBTbGlkZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwic2xpZGVyLmZvY3VzKClcIj5Gb2N1czwvYnV0dG9uPlxuICAgICAqICA8a2VuZG8tc2xpZGVyICNzbGlkZXI+PC9rZW5kby1zbGlkZXI+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpbnZva2VFbGVtZW50TWV0aG9kKHRoaXMud3JhcHBlciwgJ2ZvY3VzJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBTbGlkZXIuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLndyYXBwZXIsICdibHVyJyk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGFueUNoYW5nZWQoWyd2YWx1ZScsICdmaXhlZFRpY2tXaWR0aCcsICd0aWNrUGxhY2VtZW50J10sIGNoYW5nZXMsIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplQ29tcG9uZW50KGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93QnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUludGVydmFsKHRoaXMuaW5jcmVhc2VCdXR0b24ubmF0aXZlRWxlbWVudCwgKCkgPT4gdGhpcy5pbmNyZWFzZVZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUludGVydmFsKHRoaXMuZGVjcmVhc2VCdXR0b24ubmF0aXZlRWxlbWVudCwgKCkgPT4gdGhpcy5kZWNyZWFzZVZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudChmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLnRpY2tzKSB7XG4gICAgICAgICAgICB0aGlzLnRpY2tzLnRpY2tFbGVtZW50c1xuICAgICAgICAgICAgICAgIC5jaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNpemVDb21wb25lbnQoZmFsc2UpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaW5jcmVtZW50TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50VGl0bGUgfHwgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldCgnaW5jcmVtZW50Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGVjcmVtZW50TWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjcmVtZW50VGl0bGUgfHwgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldCgnZGVjcmVtZW50Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZHJhZ0hhbmRsZU1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdIYW5kbGVUaXRsZSB8fCB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KCdkcmFnSGFuZGxlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVEcmFnUHJlc3MoYXJncykge1xuICAgICAgICBpZiAoYXJncy5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICBhcmdzLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnay1zbGlkZXItdHJhbnNpdGlvbnMnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uSGFuZGxlRHJhZyhhcmdzKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKGV2ZW50VmFsdWUoYXJncywgdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LCB0aGlzLmdldFByb3BzKCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uSGFuZGxlUmVsZWFzZSgpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlOyAvL25lZWRlZCBmb3IgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnay1zbGlkZXItdHJhbnNpdGlvbnMnKTtcbiAgICB9XG4gICAgLy9uZ01vZGVsIGJpbmRpbmdcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudCh0aGlzLmFuaW1hdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm5nQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm5nVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2hhbmdlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFhcmVTYW1lKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVDb21wb25lbnQodGhpcy5hbmltYXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzaXplQ29tcG9uZW50KGFuaW1hdGUpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRyYWNrID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25FbCA9IHRoaXMuc2xpZGVyU2VsZWN0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRyYWdIYW5kbGVFbCA9IHRoaXMuZHJhZ2hhbmRsZS5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3MgPyB0aGlzLnRpY2tzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgICAgICBpZiAoIWFuaW1hdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnay1zbGlkZXItdHJhbnNpdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0U3R5bGVzKFt0cmFjaywgc2VsZWN0aW9uRWwsIGRyYWdIYW5kbGVFbCwgdGlja3MsIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudF0pO1xuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoKTtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgU2xpZGVyTW9kZWwocHJvcHMsIHdyYXBwZXIsIHRyYWNrLCB0aGlzLnJlbmRlcmVyKTtcbiAgICAgICAgbW9kZWwucmVzaXplVHJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMudGlja3MpIHsgLy9mb3IgY2FzZSB3aGVuIHRpY2tQbGFjZW1lbnQ6IG5vbmVcbiAgICAgICAgICAgIG1vZGVsLnJlc2l6ZVRpY2tzKHRoaXMudGlja3NDb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy50aWNrcy50aWNrRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZWwucG9zaXRpb25IYW5kbGUoZHJhZ0hhbmRsZUVsKTtcbiAgICAgICAgbW9kZWwucG9zaXRpb25TZWxlY3Rpb24oZHJhZ0hhbmRsZUVsLCBzZWxlY3Rpb25FbCk7XG4gICAgICAgIGlmICghYW5pbWF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdrLXNsaWRlci10cmFuc2l0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpeGVkVGlja1dpZHRoKSB7XG4gICAgICAgICAgICBtb2RlbC5yZXNpemVXcmFwcGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGZvY3VzZWQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkICE9PSB2YWx1ZSAmJiB0aGlzLmhvc3RFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCBGT0NVU0VEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgRk9DVVNFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBkcmFnZ2luZyh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0RyYWdnZWQgIT09IHZhbHVlICYmIHRoaXMuc2xpZGVyU2VsZWN0aW9uICYmIHRoaXMuZHJhZ2hhbmRsZSkge1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVyU2VsZWN0aW9uID0gdGhpcy5zbGlkZXJTZWxlY3Rpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdoYW5kbGUgPSB0aGlzLmRyYWdoYW5kbGUubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Moc2xpZGVyU2VsZWN0aW9uLCBQUkVTU0VEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRyYWdoYW5kbGUsIFBSRVNTRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhzbGlkZXJTZWxlY3Rpb24sIFBSRVNTRUQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZHJhZ2hhbmRsZSwgUFJFU1NFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldFZhbHVlQ2hhbmdlSW50ZXJ2YWwoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW91c2Vkb3duID0gZnJvbUV2ZW50KGVsZW1lbnQsICdtb3VzZWRvd24nKTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNldXAgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ21vdXNldXAnKTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gZnJvbUV2ZW50KGVsZW1lbnQsICdtb3VzZW91dCcpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbW91c2Vkb3duLnBpcGUoZmlsdGVyKChlKSA9PiBlLmJ1dHRvbiA9PT0gMCAmJiAhdGhpcy5pc0Rpc2FibGVkKSwgY29uY2F0TWFwKCgpID0+IGludGVydmFsKDE1MCkucGlwZShzdGFydFdpdGgoLTEpLCB0YWtlVW50aWwobWVyZ2UobW91c2V1cCwgbW91c2VvdXQpKSkpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1dHRvbnM6IHRoaXMuc2hvd0J1dHRvbnMsXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIGZpeGVkVGlja1dpZHRoOiB0aGlzLmZpeGVkVGlja1dpZHRoLFxuICAgICAgICAgICAgbGFyZ2VTdGVwOiB0aGlzLmxhcmdlU3RlcCxcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHksXG4gICAgICAgICAgICByZXZlcnNlOiB0aGlzLnJldmVyc2UsXG4gICAgICAgICAgICBydGw6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5ydGwsXG4gICAgICAgICAgICBzbWFsbFN0ZXA6IHRoaXMuc21hbGxTdGVwLFxuICAgICAgICAgICAgdmFsdWU6IHRyaW1WYWx1ZSh0aGlzLm1heCwgdGhpcy5taW4sIHRoaXMudmFsdWUpLFxuICAgICAgICAgICAgdmVydGljYWw6IHRoaXMudmVydGljYWxcbiAgICAgICAgfTtcbiAgICB9XG59XG5TbGlkZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvU2xpZGVyJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5zbGlkZXInIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbXVsdGk6IHRydWUsIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGlkZXJDb21wb25lbnQpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogS2VuZG9JbnB1dCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXNsaWRlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb1NsaWRlckxvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLWluY3JlbWVudD1cImtlbmRvLnNsaWRlci5pbmNyZW1lbnR8VGhlIHRpdGxlIG9mIHRoZSAqKkluY3JlYXNlKiogYnV0dG9uIG9mIHRoZSBTbGlkZXIuXCJcbiAgICAgICAgICAgIGluY3JlbWVudD1cImluY3JlbWVudFwiXG4gICAgICAgICAgICBpMThuLWRlY3JlbWVudD1cImtlbmRvLnNsaWRlci5kZWNyZW1lbnR8VGhlIHRpdGxlIG9mIHRoZSAqKkRlY3JlYXNlKiogYnV0dG9uIG9mIHRoZSBTbGlkZXIuXCJcbiAgICAgICAgICAgIGRlY3JlbWVudD1cImRlY3JlbWVudFwiXG4gICAgICAgICAgICBpMThuLWRyYWdIYW5kbGU9XCJrZW5kby5zbGlkZXIuZHJhZ0hhbmRsZXxUaGUgdGl0bGUgb2YgdGhlIGRyYWcgaGFuZGxlIG9mIHRoZSBTbGlkZXIuXCJcbiAgICAgICAgICAgIGRyYWdIYW5kbGU9XCJEcmFnXCJcbiAgICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1zbGlkZXItd3JhcFwiICN3cmFwXG4gICAgICAgICAgICBbaWRdPVwiZm9jdXNhYmxlSWRcIlxuICAgICAgICAgICAgW2NsYXNzLmstc2xpZGVyLWJ1dHRvbnNdPVwic2hvd0J1dHRvbnNcIlxuICAgICAgICAgICAgW2NsYXNzLmstc2xpZGVyLXRvcGxlZnRdPVwidGlja1BsYWNlbWVudCA9PT0gJ2JlZm9yZSdcIlxuICAgICAgICAgICAgW2NsYXNzLmstc2xpZGVyLWJvdHRvbXJpZ2h0XT1cInRpY2tQbGFjZW1lbnQgPT09ICdhZnRlcidcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0YWJJbmRleFwiXG4gICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7IGZvY3VzOiBoYW5kbGVGb2N1cywgYmx1cjogaGFuZGxlQmx1ciwgY2xpY2s6IG9uV3JhcENsaWNrLCBrZXlkb3duOiBvbktleURvd24gfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICNkZWNyZWFzZUJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0J1dHRvbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay1idXR0b24tZGVjcmVhc2VcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJkZWNyZW1lbnRNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRlY3JlbWVudE1lc3NhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstaS1hcnJvdy13XT1cIiF2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWktYXJyb3ctc109XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93QnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgI2luY3JlYXNlQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLWJ1dHRvbi1pbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImluY3JlbWVudE1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaW5jcmVtZW50TWVzc2FnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1pLWFycm93LWVdPVwiIXZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstaS1hcnJvdy1uXT1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPHVsIGtlbmRvU2xpZGVyVGlja3NcbiAgICAgICAgICAgICAgICAjdGlja3NcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRpY2tQbGFjZW1lbnQgIT09ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgW3RpY2tUaXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW3ZlcnRpY2FsXT1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzbWFsbFN0ZXBcIlxuICAgICAgICAgICAgICAgIFtsYXJnZVN0ZXBdPVwibGFyZ2VTdGVwXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFtsYWJlbFRlbXBsYXRlXT1cImxhYmVsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDxkaXYgI3RyYWNrIGNsYXNzPVwiay1zbGlkZXItdHJhY2tcIj5cbiAgICAgICAgICAgIDxkaXYgI3NsaWRlclNlbGVjdGlvbiBjbGFzcz1cImstc2xpZGVyLXNlbGVjdGlvblwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGEgI2RyYWdoYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5ID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwidmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvdWNoLWFjdGlvbl09XCJpc0Rpc2FibGVkID8gJycgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZHJhZ2hhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJkcmFnSGFuZGxlTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgIChrZW5kb1ByZXNzKT1cImlmRW5hYmxlZChoYW5kbGVEcmFnUHJlc3MsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9EcmFnKT1cImlmRW5hYmxlZChvbkhhbmRsZURyYWcsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9SZWxlYXNlKT1cImlmRW5hYmxlZChvbkhhbmRsZVJlbGVhc2UsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxrZW5kby1yZXNpemUtc2Vuc29yIChyZXNpemUpPVwic2l6ZUNvbXBvbmVudChmYWxzZSlcIj48L2tlbmRvLXJlc2l6ZS1zZW5zb3I+XG4gICAgICAgIDwvZGl2PlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNsaWRlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfVxuXTtcblNsaWRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZ0hhbmRsZVRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNyZW1lbnRUaXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYW5pbWF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGVjcmVtZW50VGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dCdXR0b25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRyYWdoYW5kbGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydkcmFnaGFuZGxlJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGRlY3JlYXNlQnV0dG9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnZGVjcmVhc2VCdXR0b24nLF0gfV0sXG4gICAgaW5jcmVhc2VCdXR0b246IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydpbmNyZWFzZUJ1dHRvbicsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJhbmdlU2xpZGVyTW9kZWwgZXh0ZW5kcyBTbGlkZXJNb2RlbEJhc2Uge1xuICAgIHBvc2l0aW9uSGFuZGxlKGRyYWdIYW5kbGUpIHtcbiAgICAgICAgaWYgKCFkcmFnSGFuZGxlLmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBtYXgsIG1pbiwgcmV2ZXJzZSwgdmVydGljYWwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdmVydGljYWwgPyAnYm90dG9tJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgdHJhY2tXaWR0aCA9IHRoaXMudHJhY2tXaWR0aCgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzU3RhcnRIYW5kbGUoZHJhZ0hhbmRsZSkgPyB0cmltVmFsdWVSYW5nZShtYXgsIG1pbiwgdGhpcy5wcm9wcy52YWx1ZSlbMF1cbiAgICAgICAgICAgIDogdHJpbVZhbHVlUmFuZ2UobWF4LCBtaW4sIHRoaXMucHJvcHMudmFsdWUpWzFdO1xuICAgICAgICBpZiAoaXNTdGFydEhhbmRsZShkcmFnSGFuZGxlKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhhbmRsZVBvc2l0aW9uID0gY2FsY3VsYXRlSGFuZGxlUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgIG1pbixcbiAgICAgICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICAgICAgcmV2ZXJzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0cmFja1dpZHRoLFxuICAgICAgICAgICAgICAgIGhhbmRsZVdpZHRoOiBkcmFnSGFuZGxlLm9mZnNldFdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ0hhbmRsZSwgcG9zaXRpb24sIGAke3RoaXMuc3RhcnRIYW5kbGVQb3NpdGlvbn1weGApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmRIYW5kbGVQb3NpdGlvbiA9IGNhbGN1bGF0ZUhhbmRsZVBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHJldmVyc2UsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdHJhY2tXaWR0aCxcbiAgICAgICAgICAgICAgICBoYW5kbGVXaWR0aDogZHJhZ0hhbmRsZS5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRyYWdIYW5kbGUsIHBvc2l0aW9uLCBgJHt0aGlzLmVuZEhhbmRsZVBvc2l0aW9ufXB4YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zaXRpb25TZWxlY3Rpb24oZHJhZ0hhbmRsZSwgc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHsgcmV2ZXJzZSwgdmVydGljYWwgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IHZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHZlcnRpY2FsID8gJ2JvdHRvbScgOiByZXZlcnNlID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgaGFuZGxlV2lkdGggPSBNYXRoLmZsb29yKGRyYWdIYW5kbGUub2Zmc2V0V2lkdGggLyAyKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IE1hdGguYWJzKHRoaXMuZW5kSGFuZGxlUG9zaXRpb24gLSB0aGlzLnN0YXJ0SGFuZGxlUG9zaXRpb24pO1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uUG9zaXRpb24gPSB2ZXJ0aWNhbCA/IGRyYWdIYW5kbGUuc3R5bGUuYm90dG9tIDogZHJhZ0hhbmRsZS5zdHlsZS5sZWZ0O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNlbGVjdGlvbiwgZGltZW5zaW9uLCBgJHtzaXplfXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2VsZWN0aW9uLCBwb3NpdGlvbiwgcmV2ZXJzZSA/IHRoaXMudHJhY2tXaWR0aCgpIC0gcGFyc2VGbG9hdChjdXJyZW50U2VsZWN0aW9uUG9zaXRpb24pIC0gaGFuZGxlV2lkdGggKyAncHgnXG4gICAgICAgICAgICA6IHBhcnNlRmxvYXQoY3VycmVudFNlbGVjdGlvblBvc2l0aW9uKSArIGhhbmRsZVdpZHRoICsgJ3B4Jyk7XG4gICAgfVxufVxuXG5jb25zdCBQUkVTU0VEJDEgPSAnay1wcmVzc2VkJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFJhbmdlU2xpZGVyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19yYW5nZXNsaWRlciAlfSkuXG4gKi9cbmNsYXNzIFJhbmdlU2xpZGVyQ29tcG9uZW50IGV4dGVuZHMgU2xpZGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBpbmplY3RvciwgcmVuZGVyZXIsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIGhvc3RFbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGxvY2FsaXphdGlvbiwgaW5qZWN0b3IsIHJlbmRlcmVyLCBuZ1pvbmUsIGNoYW5nZURldGVjdG9yLCBob3N0RWxlbWVudCk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbGVtZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFydEhhbmRsZUlkID0gYGstc3RhcnQtaGFuZGxlLSR7Z3VpZCgpfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVuZEhhbmRsZUlkID0gYGstZW5kLWhhbmRsZS0ke2d1aWQoKX1gO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2FibGVJZCA9IHRoaXMuc3RhcnRIYW5kbGVJZDtcbiAgICAgICAgdGhpcy5oYW5kbGVaSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmFjdGl2ZUhhbmRsZSA9ICdzdGFydEhhbmRsZSc7XG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbldyYXBDbGljayA9IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IFt0aGlzLm1pbiwgdGhpcy5taW5dO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrVmFsdWUgPSBldmVudFZhbHVlKGFyZ3MsIHRoaXMudHJhY2submF0aXZlRWxlbWVudCwgdGhpcy5nZXRQcm9wcygpKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3UmFuZ2VWYWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3RhcnRWYWx1ZSwgZW5kVmFsdWVdID0gbmV3UmFuZ2VWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrVmFsdWUgPD0gc3RhcnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZVZhbHVlID0gW3RyYWNrVmFsdWUsIGVuZFZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVIYW5kbGUgPSAnc3RhcnRIYW5kbGUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGFydFZhbHVlIDwgdHJhY2tWYWx1ZSAmJiB0cmFja1ZhbHVlIDwgZW5kVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrVmFsdWUgPCAoc3RhcnRWYWx1ZSArIGVuZFZhbHVlKSAvIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JhbmdlVmFsdWUgPSBbdHJhY2tWYWx1ZSwgZW5kVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVIYW5kbGUgPSAnc3RhcnRIYW5kbGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmFuZ2VWYWx1ZSA9IFtzdGFydFZhbHVlLCB0cmFja1ZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSGFuZGxlID0gJ2VuZEhhbmRsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhY2tWYWx1ZSA+PSBlbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZVZhbHVlID0gW3N0YXJ0VmFsdWUsIHRyYWNrVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUhhbmRsZSA9ICdlbmRIYW5kbGUnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVIYW5kbGUgPSB0aGlzLmFjdGl2ZUhhbmRsZSA9PT0gJ3N0YXJ0SGFuZGxlJyA/IHRoaXMuZHJhZ2hhbmRsZVN0YXJ0IDogdGhpcy5kcmFnaGFuZGxlRW5kO1xuICAgICAgICAgICAgICAgIGludm9rZUVsZW1lbnRNZXRob2QoYWN0aXZlSGFuZGxlLCAnZm9jdXMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKG5ld1JhbmdlVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbktleURvd24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUgfHwgW3RoaXMubWluLCB0aGlzLm1pbl07XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRQcm9wcygpO1xuICAgICAgICAgICAgY29uc3QgeyBtYXgsIG1pbiB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmtleUJpbmRpbmdbZS5rZXlDb2RlXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQgfHwgIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUudGFyZ2V0LCAnekluZGV4JywgKyt0aGlzLmhhbmRsZVpJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydEhhbmRsZUlzQWN0aXZlID0gaXNTdGFydEhhbmRsZShlLnRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhhbmRsZXIoT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgeyB2YWx1ZTogc3RhcnRIYW5kbGVJc0FjdGl2ZSA/IHRoaXMudmFsdWVbMF0gOiB0aGlzLnZhbHVlWzFdIH0pKTtcbiAgICAgICAgICAgIGlmIChzdGFydEhhbmRsZUlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gdGhpcy52YWx1ZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlWzFdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy52YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlWzBdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdHJpbVZhbHVlKG1heCwgbWluLCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHN0YXJ0SGFuZGxlSXNBY3RpdmUgPyBbdHJpbW1lZFZhbHVlLCB0aGlzLnZhbHVlWzFdXVxuICAgICAgICAgICAgICAgIDogW3RoaXMudmFsdWVbMF0sIHRyaW1tZWRWYWx1ZV07XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uZ0NoYW5nZSA9IChfKSA9PiB7IH07XG4gICAgICAgIHRoaXMubmdUb3VjaGVkID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLmhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgUmFuZ2VTbGlkZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgPGRpdj5cbiAgICAgKiAgICAgICAgIDxidXR0b24gY2xhc3M9XCJrLWJ1dHRvblwiIChjbGljayk9XCJzbGlkZXIuZm9jdXMoKVwiPkZvY3VzPC9idXR0b24+XG4gICAgICogICAgIDwvZGl2PlxuICAgICAqICAgICA8a2VuZG8tcmFuZ2VzbGlkZXIgI3NsaWRlcj48L2tlbmRvLXJhbmdlc2xpZGVyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmRyYWdoYW5kbGVTdGFydCwgJ2ZvY3VzJyk7XG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgUmFuZ2VTbGlkZXIuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYWN0aXZlSGFuZGxlID0gdGhpcy5hY3RpdmVIYW5kbGUgPT09ICdzdGFydEhhbmRsZScgPyB0aGlzLmRyYWdoYW5kbGVTdGFydCA6IHRoaXMuZHJhZ2hhbmRsZUVuZDtcbiAgICAgICAgaW52b2tlRWxlbWVudE1ldGhvZChhY3RpdmVIYW5kbGUsICdibHVyJyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFt0aGlzLm1pbiwgdGhpcy5tYXhdO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGFueUNoYW5nZWQoWyd2YWx1ZScsICdmaXhlZFRpY2tXaWR0aCcsICd0aWNrUGxhY2VtZW50J10sIGNoYW5nZXMsIHRydWUpKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSAmJiBjaGFuZ2VzLnZhbHVlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUoY2hhbmdlcy52YWx1ZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudCgpO1xuICAgICAgICBpZiAodGhpcy50aWNrcykge1xuICAgICAgICAgICAgdGhpcy50aWNrcy50aWNrRWxlbWVudHNcbiAgICAgICAgICAgICAgICAuY2hhbmdlc1xuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaXplQ29tcG9uZW50KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXR0YWNoRWxlbWVudEV2ZW50SGFuZGxlcnMoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdGV4dEZvcihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldChrZXkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHZhbHVlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyBgJHt0aGlzLnZhbHVlWzBdfSAtICR7dGhpcy52YWx1ZVsxXX1gIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVEcmFnUHJlc3MoYXJncykge1xuICAgICAgICBpZiAoYXJncy5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICBhcmdzLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQgPSBhcmdzLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICAgICAgICB0aGlzLmRyYWdnZWRIYW5kbGUgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFyZ2V0LCAnekluZGV4JywgKyt0aGlzLmhhbmRsZVpJbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkhhbmRsZURyYWcoYXJncykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCBbdGhpcy5taW4sIHRoaXMubWluXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXJncy5vcmlnaW5hbEV2ZW50LnRhcmdldDtcbiAgICAgICAgY29uc3QgbGFzdENvb3JkcyA9IHRoaXMuZHJhZ2dlZEhhbmRsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5sYXN0SGFuZGxlUG9zaXRpb24gPSB7IHg6IGxhc3RDb29yZHMubGVmdCwgeTogbGFzdENvb3Jkcy50b3AgfTtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHsgdmFsdWU6IHRydWUsIHRhcmdldCB9O1xuICAgICAgICBjb25zdCBsZWZ0ID0gYXJncy5wYWdlWCA8IHRoaXMubGFzdEhhbmRsZVBvc2l0aW9uLng7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gYXJncy5wYWdlWCA+IHRoaXMubGFzdEhhbmRsZVBvc2l0aW9uLng7XG4gICAgICAgIGNvbnN0IHVwID0gYXJncy5wYWdlWSA+IHRoaXMubGFzdEhhbmRsZVBvc2l0aW9uLnk7XG4gICAgICAgIGNvbnN0IG1vdmVTdGFydEhhbmRsZSA9ICgpID0+IHRoaXMuY2hhbmdlVmFsdWUoW2V2ZW50VmFsdWUoYXJncywgdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LCB0aGlzLmdldFByb3BzKCkpLCB0aGlzLnZhbHVlWzFdXSk7XG4gICAgICAgIGNvbnN0IG1vdmVFbmRIYW5kbGUgPSAoKSA9PiB0aGlzLmNoYW5nZVZhbHVlKFt0aGlzLnZhbHVlWzBdLCBldmVudFZhbHVlKGFyZ3MsIHRoaXMudHJhY2submF0aXZlRWxlbWVudCwgdGhpcy5nZXRQcm9wcygpKV0pO1xuICAgICAgICBjb25zdCBtb3ZlQm90aEhhbmRsZXMgPSAoKSA9PiB0aGlzLmNoYW5nZVZhbHVlKFtldmVudFZhbHVlKGFyZ3MsIHRoaXMudHJhY2submF0aXZlRWxlbWVudCwgdGhpcy5nZXRQcm9wcygpKSwgZXZlbnRWYWx1ZShhcmdzLCB0aGlzLnRyYWNrLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZ2V0UHJvcHMoKSldKTtcbiAgICAgICAgY29uc3QgYWN0aXZlU3RhcnRIYW5kbGUgPSBpc1N0YXJ0SGFuZGxlKHRoaXMuZHJhZ2dlZEhhbmRsZSk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gdGhpcy52ZXJ0aWNhbDtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9ICF2ZXJ0aWNhbDtcbiAgICAgICAgY29uc3QgZm9yd2FyZCA9ICh2ZXJ0aWNhbCAmJiB1cCkgfHwgKHRoaXMucmV2ZXJzZSA/IGhvcml6b250YWwgJiYgcmlnaHQgOiBob3Jpem9udGFsICYmIGxlZnQpO1xuICAgICAgICAvLyBjb25zdCBmb3J3YXJkID0gKHRoaXMucmV2ZXJzZSA/ICghdGhpcy52ZXJ0aWNhbCAmJiAhbGVmdCkgOiAoIXRoaXMudmVydGljYWwgJiYgbGVmdCkpIHx8ICh0aGlzLnZlcnRpY2FsICYmIHVwKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVbMF0gPT09IHRoaXMudmFsdWVbMV0pIHtcbiAgICAgICAgICAgIGlmIChmb3J3YXJkKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlU3RhcnRIYW5kbGUgPyBtb3ZlU3RhcnRIYW5kbGUoKSA6IG1vdmVCb3RoSGFuZGxlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlU3RhcnRIYW5kbGUgPyBtb3ZlQm90aEhhbmRsZXMoKSA6IG1vdmVFbmRIYW5kbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFjdGl2ZVN0YXJ0SGFuZGxlID8gbW92ZVN0YXJ0SGFuZGxlKCkgOiBtb3ZlRW5kSGFuZGxlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uSGFuZGxlUmVsZWFzZShhcmdzKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB7IHZhbHVlOiBmYWxzZSwgdGFyZ2V0OiBhcmdzLm9yaWdpbmFsRXZlbnQudGFyZ2V0IH07IC8vbmVlZGVkIGZvciBhbmltYXRpb25cbiAgICAgICAgdGhpcy5kcmFnZ2VkSGFuZGxlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvL25nTW9kZWwgYmluZGluZ1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHZhbGlkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm5nQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm5nVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2hhbmdlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8ICFpc1NhbWVSYW5nZSh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMubmdDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZUNvbXBvbmVudCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNpemVDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0cmFjayA9IHRoaXMudHJhY2submF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uRWwgPSB0aGlzLnNsaWRlclNlbGVjdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBkcmFnSGFuZGxlU3RhcnRFbCA9IHRoaXMuZHJhZ2hhbmRsZVN0YXJ0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRyYWdIYW5kbGVFbmRFbCA9IHRoaXMuZHJhZ2hhbmRsZUVuZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMudGlja3MgPyB0aGlzLnRpY2tzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgICAgICB0aGlzLnJlc2V0U3R5bGVzKFt0cmFjaywgc2VsZWN0aW9uRWwsIGRyYWdIYW5kbGVTdGFydEVsLCBkcmFnSGFuZGxlRW5kRWwsIHRpY2tzLCB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnRdKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IFJhbmdlU2xpZGVyTW9kZWwocHJvcHMsIHdyYXBwZXIsIHRyYWNrLCB0aGlzLnJlbmRlcmVyKTtcbiAgICAgICAgbW9kZWwucmVzaXplVHJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMudGlja3MpIHsgLy9mb3IgY2FzZSB3aGVuIHRpY2tQbGFjZW1lbnQ6IG5vbmVcbiAgICAgICAgICAgIG1vZGVsLnJlc2l6ZVRpY2tzKHRoaXMudGlja3NDb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy50aWNrcy50aWNrRWxlbWVudHMubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgbW9kZWwucG9zaXRpb25IYW5kbGUoZHJhZ0hhbmRsZVN0YXJ0RWwpO1xuICAgICAgICBtb2RlbC5wb3NpdGlvbkhhbmRsZShkcmFnSGFuZGxlRW5kRWwpO1xuICAgICAgICBtb2RlbC5wb3NpdGlvblNlbGVjdGlvbihkcmFnSGFuZGxlU3RhcnRFbCwgc2VsZWN0aW9uRWwpO1xuICAgICAgICBpZiAodGhpcy5maXhlZFRpY2tXaWR0aCkge1xuICAgICAgICAgICAgbW9kZWwucmVzaXplV3JhcHBlcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaXNEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgYnkgdGhlIEZsb2F0aW5nTGFiZWwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21wb25lbnQgaXMgZW1wdHkuXG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQgZm9jdXNlZCh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQgIT09IHZhbHVlICYmIHRoaXMuaG9zdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGRyYWdnaW5nKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2VkICE9PSBkYXRhLnZhbHVlICYmIHRoaXMuc2xpZGVyU2VsZWN0aW9uICYmIHRoaXMuZHJhZ2hhbmRsZVN0YXJ0ICYmIHRoaXMuZHJhZ2hhbmRsZUVuZCkge1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVyU2VsZWN0aW9uID0gdGhpcy5zbGlkZXJTZWxlY3Rpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdoYW5kbGUgPSBkYXRhLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhzbGlkZXJTZWxlY3Rpb24sIFBSRVNTRUQkMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkcmFnaGFuZGxlLCBQUkVTU0VEJDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhzbGlkZXJTZWxlY3Rpb24sIFBSRVNTRUQkMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkcmFnaGFuZGxlLCBQUkVTU0VEJDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0RyYWdnZWQgPSBkYXRhLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFByb3BzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICBmaXhlZFRpY2tXaWR0aDogdGhpcy5maXhlZFRpY2tXaWR0aCxcbiAgICAgICAgICAgIGxhcmdlU3RlcDogdGhpcy5sYXJnZVN0ZXAsXG4gICAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5LFxuICAgICAgICAgICAgcmV2ZXJzZTogdGhpcy5yZXZlcnNlLFxuICAgICAgICAgICAgcnRsOiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UucnRsLFxuICAgICAgICAgICAgc21hbGxTdGVwOiB0aGlzLnNtYWxsU3RlcCxcbiAgICAgICAgICAgIHZhbHVlOiB0cmltVmFsdWVSYW5nZSh0aGlzLm1heCwgdGhpcy5taW4sIHRoaXMudmFsdWUpLFxuICAgICAgICAgICAgdmVydGljYWw6IHRoaXMudmVydGljYWwsXG4gICAgICAgICAgICBidXR0b25zOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBhdHRhY2hFbGVtZW50RXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCB0YWJiaW5nID0gZmFsc2U7XG4gICAgICAgIGxldCBjdXJzb3JJbnNpZGVXcmFwcGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGZvY3VzSW4gYW5kIGZvY3VzT3V0IGFyZSByZWxhdGl2ZSB0byB0aGUgaG9zdCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnZm9jdXNpbicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXNDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnZm9jdXNvdXQnLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGFiYmluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5yZWxhdGVkVGFyZ2V0ICE9PSB0aGlzLmRyYWdoYW5kbGVTdGFydC5uYXRpdmVFbGVtZW50ICYmIGFyZ3MucmVsYXRlZFRhcmdldCAhPT0gdGhpcy5kcmFnaGFuZGxlRW5kLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhYmJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3Vyc29ySW5zaWRlV3JhcHBlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJzb3JJbnNpZGVXcmFwcGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5yZW5kZXJlci5saXN0ZW4oaG9zdEVsZW1lbnQsICdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnNvckluc2lkZVdyYXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5yZW5kZXJlci5saXN0ZW4oaG9zdEVsZW1lbnQsICdrZXlkb3duJywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLlRhYikge1xuICAgICAgICAgICAgICAgICAgICB0YWJiaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblJhbmdlU2xpZGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1JhbmdlU2xpZGVyJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5yYW5nZXNsaWRlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBtdWx0aTogdHJ1ZSwgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhbmdlU2xpZGVyQ29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtlbmRvSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhbmdlU2xpZGVyQ29tcG9uZW50KSB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXJhbmdlc2xpZGVyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvU2xpZGVyTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tZHJhZ0hhbmRsZVN0YXJ0PVwia2VuZG8ucmFuZ2VzbGlkZXIuZHJhZ0hhbmRsZVN0YXJ0fFRoZSB0aXRsZSBvZiB0aGUgKipTdGFydCoqIGRyYWcgaGFuZGxlIG9mIHRoZSBTbGlkZXIuXCJcbiAgICAgICAgICAgIGRyYWdIYW5kbGVTdGFydD1cIkRyYWdcIlxuICAgICAgICAgICAgaTE4bi1kcmFnSGFuZGxlRW5kPVwia2VuZG8ucmFuZ2VzbGlkZXIuZHJhZ0hhbmRsZUVuZHxUaGUgdGl0bGUgb2YgdGhlICoqRW5kKiogZHJhZyBoYW5kbGUgb2YgdGhlIFNsaWRlci5cIlxuICAgICAgICAgICAgZHJhZ0hhbmRsZUVuZD1cIkRyYWdcIlxuICAgICAgICA+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstc2xpZGVyLXdyYXBcIiAjd3JhcFxuICAgICAgICAgICAgW2NsYXNzLmstc2xpZGVyLXRvcGxlZnRdPVwidGlja1BsYWNlbWVudCA9PT0gJ2JlZm9yZSdcIlxuICAgICAgICAgICAgW2NsYXNzLmstc2xpZGVyLWJvdHRvbXJpZ2h0XT1cInRpY2tQbGFjZW1lbnQgPT09ICdhZnRlcidcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwieyBjbGljazogb25XcmFwQ2xpY2ssIGtleWRvd246IG9uS2V5RG93biB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBrZW5kb1NsaWRlclRpY2tzXG4gICAgICAgICAgICAgICAgI3RpY2tzXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0aWNrUGxhY2VtZW50ICE9PSAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIFt0aWNrVGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic21hbGxTdGVwXCJcbiAgICAgICAgICAgICAgICBbbGFyZ2VTdGVwXT1cImxhcmdlU3RlcFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUZW1wbGF0ZV09XCJsYWJlbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiAjdHJhY2sgY2xhc3M9XCJrLXNsaWRlci10cmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgI3NsaWRlclNlbGVjdGlvbiBjbGFzcz1cImstc2xpZGVyLXNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxhICNkcmFnaGFuZGxlU3RhcnRcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJzdGFydEhhbmRsZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlID8gdmFsdWVbMF0gOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZXRleHRdPVwidmFsdWVUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5ID8gdHJ1ZSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwidmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvdWNoLWFjdGlvbl09XCJpc0Rpc2FibGVkID8gJycgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZHJhZ2hhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0Rm9yKCdkcmFnSGFuZGxlU3RhcnQnKVwiXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgIChrZW5kb1ByZXNzKT1cImlmRW5hYmxlZChoYW5kbGVEcmFnUHJlc3MgLCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9EcmFnKT1cImlmRW5hYmxlZChvbkhhbmRsZURyYWcgLCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9SZWxlYXNlKT1cImlmRW5hYmxlZChvbkhhbmRsZVJlbGVhc2UsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgPGEgI2RyYWdoYW5kbGVFbmRcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJlbmRIYW5kbGVJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gdW5kZWZpbmVkIDogdGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ2YWx1ZSA/IHZhbHVlWzFdIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWV0ZXh0XT1cInZhbHVlVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkb25seSA/IHRydWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cInZlcnRpY2FsID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3VjaC1hY3Rpb25dPVwiaXNEaXNhYmxlZCA/ICcnIDogJ25vbmUnXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWRyYWdoYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcignZHJhZ0hhbmRsZUVuZCcpXCJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVcbiAgICAgICAgICAgICAgICAgICAgKGtlbmRvUHJlc3MpPVwiaWZFbmFibGVkKGhhbmRsZURyYWdQcmVzcyAsJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZW5kb0RyYWcpPVwiaWZFbmFibGVkKG9uSGFuZGxlRHJhZyAsJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZW5kb1JlbGVhc2UpPVwiaWZFbmFibGVkKG9uSGFuZGxlUmVsZWFzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8a2VuZG8tcmVzaXplLXNlbnNvciAocmVzaXplKT1cInNpemVDb21wb25lbnQoKVwiPjwva2VuZG8tcmVzaXplLXNlbnNvcj5cbiAgICAgICAgPC9kaXY+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUmFuZ2VTbGlkZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5SYW5nZVNsaWRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZ2hhbmRsZVN0YXJ0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnZHJhZ2hhbmRsZVN0YXJ0JywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGRyYWdoYW5kbGVFbmQ6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydkcmFnaGFuZGxlRW5kJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dXG59O1xuXG5jb25zdCBGT0NVU0VEJDEgPSAnay1zdGF0ZS1mb2N1c2VkJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFN3aXRjaCBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfc3dpdGNoICV9KS5cbiAqL1xuY2xhc3MgU3dpdGNoQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlciwgaG9zdEVsZW1lbnQsIGxvY2FsaXphdGlvblNlcnZpY2UsIGluamVjdG9yLCBjaGFuZ2VEZXRlY3Rvciwgbmdab25lKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbGVtZW50O1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaCB3aGVuIGl0IGlzIGluaXRpYWxseSBkaXNwbGF5ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgU3dpdGNoIGlzIGRpc2FibGVkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfc3dpdGNoICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFN3aXRjaCBpcyBpbiBpdHMgcmVhZC1vbmx5IHN0YXRlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfc3dpdGNoICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgU3dpdGNoLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgZm9jdXNlcyB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGVsZW1lbnQgZ2V0cyBibHVycmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMubmdDaGFuZ2UgPSAoXykgPT4geyB9O1xuICAgICAgICB0aGlzLm5nVG91Y2hlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uRm9jdXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkJsdXIpIHx8IHJlcXVpcmVzWm9uZU9uQmx1cih0aGlzLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGxvY2FsaXphdGlvblNlcnZpY2UucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgdGhpcy5rZXlEb3duSGFuZGxlciA9IHRoaXMua2V5RG93bkhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbGlja0hhbmRsZXIgPSB0aGlzLmNsaWNrSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgZ2V0IGllQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBicm93c2VyICYmIGJyb3dzZXIubXNpZTtcbiAgICB9XG4gICAgZ2V0IGFyaWFEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgYXJpYVJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkb25seTtcbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN3aXRjaE9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWQ7XG4gICAgfVxuICAgIGdldCBzd2l0Y2hPZmZDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNoZWNrZWQ7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBvbkxhYmVsTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25MYWJlbCB8fCB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KCdvbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG9mZkxhYmVsTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2ZmTGFiZWwgfHwgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldCgnb2ZmJyk7XG4gICAgfVxuICAgIGdldCBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmhvc3RFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUod3JhcHBlciwgXCJ0YWJpbmRleFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uU2VydmljZVxuICAgICAgICAgICAgLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHNraXAoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIFN3aXRjaC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHMtbm8tcnVuXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJzd2l0Y2guZm9jdXMoKVwiPkZvY3VzPC9idXR0b24+XG4gICAgICogIDxrZW5kby1zd2l0Y2ggI3N3aXRjaD48L2tlbmRvLXN3aXRjaD5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFN3aXRjaC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBzdGF0dXMgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzIHRvIG9yIGZyb20gYGRpc2FibGVkYC5cbiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlLCBpdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhcHByb3ByaWF0ZSBET00gZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlID09PSBudWxsID8gZmFsc2UgOiB2YWx1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5uZ0NoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5uZ1RvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleURvd25IYW5kbGVyKGUpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkICYmIChrZXlDb2RlID09PSBLZXlzLlNwYWNlIHx8IGtleUNvZGUgPT09IEtleXMuRW50ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhbHVlKCF0aGlzLmNoZWNrZWQpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjbGlja0hhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYWx1ZSghdGhpcy5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBieSB0aGUgVGV4dEJveENvbnRhaW5lciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbXBvbmVudCBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNoYW5nZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMubmdDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBmb2N1c2VkKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCAhPT0gdmFsdWUgJiYgdGhpcy5ob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgRk9DVVNFRCQxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgRk9DVVNFRCQxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5Td2l0Y2hDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvU3dpdGNoJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5zd2l0Y2gnIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTd2l0Y2hDb21wb25lbnQpIC8qIHRzbGludDpkaXNhYmxlLWxpbmUgKi9cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogS2VuZG9JbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN3aXRjaENvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zd2l0Y2gnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9Td2l0Y2hMb2NhbGl6ZWRNZXNzYWdlc1xuICAgICAgICAgICAgaTE4bi1vbj1cImtlbmRvLnN3aXRjaC5vbnxUaGUgKipPbioqIGxhYmVsIG9mIHRoZSBTd2l0Y2guXCJcbiAgICAgICAgICAgIG9uPVwiT05cIlxuICAgICAgICAgICAgaTE4bi1vZmY9XCJrZW5kby5zd2l0Y2gub2ZmfFRoZSAqKk9mZioqIGxhYmVsIG9mIHRoZSBTd2l0Y2guXCJcbiAgICAgICAgICAgIG9mZj1cIk9GRlwiXG4gICAgICAgID5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgI3dyYXBwZXJcbiAgICAgICAgICAgIGNsYXNzPVwiay1zd2l0Y2gtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtpZF09XCJmb2N1c2FibGVJZFwiXG4gICAgICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIihkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHRhYkluZGV4KVwiXG4gICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7IGNsaWNrOiBjbGlja0hhbmRsZXIsIGtleWRvd246IGtleURvd25IYW5kbGVyLCBmb2N1czogaGFuZGxlRm9jdXMsIGJsdXI6IGhhbmRsZUJsdXIgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1zd2l0Y2gtbGFiZWwtb25cIiBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCIgPnt7b25MYWJlbE1lc3NhZ2V9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1zd2l0Y2gtbGFiZWwtb2ZmXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPnt7b2ZmTGFiZWxNZXNzYWdlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstc3dpdGNoLWhhbmRsZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN3aXRjaENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogSW5qZWN0b3IgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblN3aXRjaENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb25MYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb2ZmTGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNoZWNrZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZWFkb25seTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHdyYXBwZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWyd3cmFwcGVyJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgaWVDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1pZScsXSB9XSxcbiAgICBhcmlhRGlzYWJsZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1kaXNhYmxlZCcsXSB9XSxcbiAgICBhcmlhUmVhZG9ubHk6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1yZWFkb25seScsXSB9XSxcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN3aXRjaCcsXSB9XSxcbiAgICBzd2l0Y2hPbkNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN3aXRjaC1vbicsXSB9XSxcbiAgICBzd2l0Y2hPZmZDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zd2l0Y2gtb2ZmJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFRleHRBcmVhIGRpcmVjdGl2ZSBmb3IgdGhlIElucHV0cyBjb21wb25lbnRzIGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X3RleHRhcmVhICV9KS5cbiAqIFByb3ZpZGVzIGZsb2F0aW5nIGxhYmVscyB0byBgdGV4dGFyZWFgIGVsZW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIDx0ZXh0YXJlYSBrZW5kb1RleHRBcmVhPjwvdGV4dGFyZWE+XG4gKiBgYGBcbiAqL1xuY2xhc3MgVGV4dEFyZWFEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHJlbmRlcmVyLCBlbGVtZW50LCB6b25lLCBjaGFuZ2VEZXRlY3RvciwgaW5qZWN0b3IsIHJ0bCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLmVsZW1lbnRDbGFzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuYXV0b2ZpbGxDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHRleHRhcmVhIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBgdGV4dGFyZWFgIGVsZW1lbnQgd2lsbCByZXNpemUgaXRzIGhlaWdodCBhdXRvbWF0aWNhbGx5XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfdGV4dGFyZWEgJX0jdG9jLWF1dG8tcmVzaXppbmcpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXV0b1NpemUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvRmlsbFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvRmlsbEVuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5uZ0NoYW5nZSA9IChfKSA9PiB7IH07XG4gICAgICAgIHRoaXMubmdUb3VjaGVkID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkO1xuICAgIH1cbiAgICBzZXQgaWQoaWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdpZCcsIGlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5uZ0NoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5uZ1RvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRQcm9wZXJ0eSgnZGlzYWJsZWQnLCBpc0Rpc2FibGVkKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gW1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdmb2N1cycsIHRoaXMuaGFuZGxlRm9jdXMuYmluZCh0aGlzKSksXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2JsdXInLCB0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKSksXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2FuaW1hdGlvbnN0YXJ0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuYW5pbWF0aW9uTmFtZSA9PT0gJ2F1dG9GaWxsU3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9GaWxsU3RhcnQuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuYW5pbWF0aW9uTmFtZSA9PT0gJ2F1dG9GaWxsRW5kJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvRmlsbEVuZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkgJiYgdGhpcy5hdXRvU2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKChkZWJvdW5jZVRpbWUoNTApKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2l6ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5wdXRTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZWxlbWVudCwgJ2lucHV0JylcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuaGFuZGxlSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5hdXRvU2l6ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxIZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdyZXNpemUnLCAnbm9uZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnb3ZlcmZsb3cteScsICdhdXRvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAncmVzaXplJywgJ2JvdGgnKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3RoaXMuaW5pdGlhbEhlaWdodH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50VmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHNldCBlbGVtZW50VmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50UHJvcGVydHkoJ3ZhbHVlJywgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpID8gJycgOiB2YWx1ZSk7XG4gICAgfVxuICAgIHNldEVsZW1lbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMuYXV0b1NpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ292ZXJmbG93LXknLCAnaGlkZGVuJyk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5pbml0aWFsSGVpZ2h0fXB4YDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiB0aGlzLmluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7c2Nyb2xsSGVpZ2h0fXB4YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVJbnB1dCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVsZW1lbnRWYWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sIHx8IGhhc09ic2VydmVycyh0aGlzLm9uVmFsdWVDaGFuZ2UpIHx8IGhhc09ic2VydmVycyh0aGlzLnZhbHVlQ2hhbmdlKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25Gb2N1cykpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuVGV4dEFyZWFEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRBcmVhRGlyZWN0aXZlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEtlbmRvSW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0QXJlYURpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICd0ZXh0YXJlYVtrZW5kb1RleHRBcmVhXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGV4dEFyZWFEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBCb29sZWFuLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW1JUTCxdIH1dIH1cbl07XG5UZXh0QXJlYURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBlbGVtZW50Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstdGV4dGFyZWEnLF0gfV0sXG4gICAgYXV0b2ZpbGxDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1hdXRvZmlsbCcsXSB9XSxcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgYXV0b1NpemU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZsb2F0aW5nTGFiZWxJbnB1dEFkYXB0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIGNvbnN0IGlzT2JzZXJ2YWJsZU9yRXZlbnRFbWl0dGVyID0gKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE9ic2VydmFibGUgfHwgZXZlbnQgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXI7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPckV2ZW50RW1pdHRlcihjb21wb25lbnQub25Gb2N1cykpIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cyA9IGNvbXBvbmVudC5vbkZvY3VzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPckV2ZW50RW1pdHRlcihjb21wb25lbnQuYXV0b0ZpbGxTdGFydCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpbGxTdGFydCA9IGNvbXBvbmVudC5hdXRvRmlsbFN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPckV2ZW50RW1pdHRlcihjb21wb25lbnQuYXV0b0ZpbGxFbmQpKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9GaWxsRW5kID0gY29tcG9uZW50LmF1dG9GaWxsRW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPckV2ZW50RW1pdHRlcihjb21wb25lbnQub25CbHVyKSkge1xuICAgICAgICAgICAgdGhpcy5vbkJsdXIgPSBjb21wb25lbnQub25CbHVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlID0gZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudC5vblZhbHVlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UgPSBjb21wb25lbnQub25WYWx1ZUNoYW5nZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZm9jdXNhYmxlSWQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50O1xuICAgICAgICBpZiAoJ2ZvY3VzYWJsZUlkJyBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQuZm9jdXNhYmxlSWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoJ2lkJyBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHNldCBmb2N1c2FibGVJZCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudDtcbiAgICAgICAgaWYgKCdmb2N1c2FibGVJZCcgaW4gY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuZm9jdXNhYmxlSWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgnaWQnIGluIGNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29tcG9uZW50LmlkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGlzRnVuY3Rpb24gPSAoeCkgPT4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRleHRCb3hDb250YWluZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCBjaGFuZ2VEZXRlY3RvclJlZiwgcnRsKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZiA9IGNoYW5nZURldGVjdG9yUmVmO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuYXV0b0ZpbGxTdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiaWRcIik7XG4gICAgfVxuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCB0ZXh0YXJlYUVsZW1lbnRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZXh0YXJlYTtcbiAgICB9XG4gICAgZ2V0IGZvY3VzZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9XG4gICAgZ2V0IGludmFsaWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sICYmICF0aGlzLmtlbmRvSW5wdXQpIHtcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBUZXh0Qm94Q29udGFpbmVyIHJlcXVpcmVzIGEgS2VuZG8gSW5wdXQgY29tcG9uZW50XCIgK1xuICAgICAgICAgICAgICAgICAgICBcIiBvciBhIGZvcm1zLWJvdW5kIGNvbXBvbmVudCB0byBmdW5jdGlvbiBwcm9wZXJseS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIGZvY3VzL2JsdXIvdmFsdWVDaGFuZ2UgaGFuZGxlcnNcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGbG9hdGluZ0xhYmVsSW5wdXRBZGFwdGVyKHRoaXMua2VuZG9JbnB1dCB8fCB0aGlzLmZvcm1Db250cm9sLnZhbHVlQWNjZXNzb3IsIHRoaXMuZm9ybUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBzZXRGb2N1cyA9IChpc0ZvY3VzZWQpID0+ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoY29udHJvbCwgJ29uRm9jdXMnLCBzZXRGb2N1cyh0cnVlKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGNvbnRyb2wsICdvbkJsdXInLCBzZXRGb2N1cyhmYWxzZSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShjb250cm9sLCAnYXV0b0ZpbGxTdGFydCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpbGxTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWVtcHR5Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShjb250cm9sLCAnYXV0b0ZpbGxFbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvRmlsbFN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9GaWxsU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGNvbnRyb2wsICdvblZhbHVlQ2hhbmdlJywgdXBkYXRlU3RhdGUpO1xuICAgICAgICAvLyBzZXQgbGFiZWwgaWQgZm9yIGZsb2F0aW5nIGxhYmVsXG4gICAgICAgIGlmICh0aGlzLmlkICYmIGNvbnRyb2wuZm9jdXNhYmxlSWQpIHtcbiAgICAgICAgICAgIC8vIGlucHV0IHdpbnNcbiAgICAgICAgICAgIHRoaXMuaWQgPSBjb250cm9sLmZvY3VzYWJsZUlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXNhYmxlSWQgPSB0aGlzLmlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wuZm9jdXNhYmxlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBjb250cm9sLmZvY3VzYWJsZUlkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBcIl9cIiArIGd1aWQoKTtcbiAgICAgICAgICAgIGNvbnRyb2wuZm9jdXNhYmxlSWQgPSBpZDtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgc3Vic2NyaWJlKGNvbnRyb2wsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICBpZiAoY29udHJvbFtldmVudE5hbWVdIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sW2V2ZW50TmFtZV0uc3Vic2NyaWJlKGhhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVtcHR5ID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgLy8gemVybyBpcyBub3QgYW4gZW1wdHkgdmFsdWUgKGUuZy4sIE51bWVyaWNUZXh0Qm94KVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVtcHR5IGFycmF5cyBhcmUgYW4gZW1wdHkgdmFsdWUgKGUuZy4sIE11bHRpU2VsZWN0KVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gZm9ybUNvbnRyb2wudmFsdWVBY2Nlc3NvcjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlQWNjZXNzb3IuaXNFbXB0eSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5ID0gdmFsdWVBY2Nlc3Nvci5pc0VtcHR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5ID0gZW1wdHkoZm9ybUNvbnRyb2wudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkID0gZm9ybUNvbnRyb2wuaW52YWxpZCAmJiAoZm9ybUNvbnRyb2wudG91Y2hlZCB8fCBmb3JtQ29udHJvbC5kaXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5ID0gaXNGdW5jdGlvbih0aGlzLmtlbmRvSW5wdXQuaXNFbXB0eSkgP1xuICAgICAgICAgICAgICAgIHRoaXMua2VuZG9JbnB1dC5pc0VtcHR5KCkgOiBlbXB0eSh0aGlzLmtlbmRvSW5wdXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1lbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2stc3RhdGUtZW1wdHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cblRleHRCb3hDb250YWluZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRleHRib3gtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cImZsb2F0aW5nTGFiZWxcIiBbZm9yXT1cImlkXCIgY2xhc3M9XCJrLWxhYmVsXCI+e3sgZmxvYXRpbmdMYWJlbCB9fTwvbGFiZWw+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UZXh0Qm94Q29udGFpbmVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtSVEwsXSB9XSB9XG5dO1xuVGV4dEJveENvbnRhaW5lckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10ZXh0Ym94LWNvbnRhaW5lcicsXSB9XSxcbiAgICB0ZXh0YXJlYUVsZW1lbnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10ZXh0YXJlYS13cmFwcGVyJyxdIH1dLFxuICAgIGZvY3VzZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1mb2N1c2VkJyxdIH1dLFxuICAgIGludmFsaWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1pbnZhbGlkJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgaWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZsb2F0aW5nTGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtlbmRvSW5wdXQ6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0tlbmRvSW5wdXQsXSB9XSxcbiAgICB0ZXh0YXJlYTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbVGV4dEFyZWFEaXJlY3RpdmUsXSB9XSxcbiAgICBmb3JtQ29udHJvbDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbTmdDb250cm9sLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFRleHRCb3ggZGlyZWN0aXZlXSh7JSBzbHVnIG92ZXJ2aWV3X3RleHRib3ggJX0pIGZvciB0aGUgSW5wdXRzIGNvbXBvbmVudHMgZm9yIEFuZ3VsYXIuXG4gKiBVc2VkIHRvIHN0eWxlIHRoZSB0ZXh0Ym94IG9mIGFueSBgaW5wdXRgIGVsZW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLW5vLXJ1blxuICogPGlucHV0IGtlbmRvVGV4dEJveCAvPlxuICogPGlucHV0IGtlbmRvVGV4dEJveCB0eXBlPVwiZW1haWxcIiAvPlxuICogPGlucHV0IGtlbmRvVGV4dEJveCB0eXBlPVwicGFzc3dvcmRcIiAvPlxuICogYGBgXG4gKi9cbmNsYXNzIFRleHRCb3hEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHJlbmRlcmVyLCBpbnB1dEVsZW1lbnQsIG5nWm9uZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50O1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF1dG9GaWxsU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF1dG9GaWxsRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAodGV4dCA9PT0gdW5kZWZpbmVkIHx8IHRleHQgPT09IG51bGwpID8gJycgOiB0ZXh0O1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgc2V0IGlkKGlkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdpZCcsIGlkKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gW1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXQsICdmb2N1cycsICgpID0+IHRoaXMub25Gb2N1cy5lbWl0KCkpLFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXQsICdibHVyJywgKCkgPT4gdGhpcy5vbkJsdXIuZW1pdCgpKVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbnB1dCwgJ2FuaW1hdGlvbnN0YXJ0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5hbmltYXRpb25OYW1lID09PSAnYXV0b0ZpbGxTdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvRmlsbFN0YXJ0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS5hbmltYXRpb25OYW1lID09PSAnYXV0b0ZpbGxFbmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0ZpbGxFbmQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gICAgfVxufVxuVGV4dEJveERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnaW5wdXRba2VuZG9UZXh0Qm94XScsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogS2VuZG9JbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRCb3hEaXJlY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRleHRCb3hEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuVGV4dEJveERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstdGV4dGJveCcsXSB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjcmVhdGVNYXhWYWxpZGF0b3IgPSAobWF4VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKGMpID0+IHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQobWF4VmFsdWUpIHx8ICFpc1ByZXNlbnQoYy52YWx1ZSkgfHwgYy52YWx1ZSA8PSBtYXhWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1heEVycm9yOiB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IG1heFZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjcmVhdGVNaW5WYWxpZGF0b3IgPSAobWluVmFsdWUpID0+IHtcbiAgICByZXR1cm4gKGMpID0+IHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQobWluVmFsdWUpIHx8ICFpc1ByZXNlbnQoYy52YWx1ZSkgfHwgYy52YWx1ZSA+PSBtaW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1pbkVycm9yOiB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IG1pblZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNSU5fRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvaW5wdXRzL2FwaS9OdW1lcmljVGV4dEJveENvbXBvbmVudC8jdG9jLW1pbic7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTUFYX0RPQ19MSU5LID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2lucHV0cy9hcGkvTnVtZXJpY1RleHRCb3hDb21wb25lbnQvI3RvYy1tYXgnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFBPSU5UID0gXCIuXCI7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgSU5JVElBTF9TUElOX0RFTEFZID0gNTAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFNQSU5fREVMQVkgPSA1MDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBFWFBPTkVOVF9SRUdFWCA9IC9bZUVdW1xcLStdPyhbMC05XSspLztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG51bWVyaWNSZWdleCA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBhdXRvQ29ycmVjdCwgZGVjaW1hbHMsIG1pbiB9ID0gb3B0aW9ucztcbiAgICBsZXQgc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3I7XG4gICAgaWYgKHNlcGFyYXRvciA9PT0gUE9JTlQpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gJ1xcXFwnICsgc2VwYXJhdG9yO1xuICAgIH1cbiAgICBjb25zdCBzaWduUGF0dGVybiA9IGF1dG9Db3JyZWN0ICYmIG1pbiAhPT0gbnVsbCAmJiBtaW4gPj0gMCA/ICcnIDogJy0/JztcbiAgICBsZXQgbnVtYmVyUGF0dGVybjtcbiAgICBpZiAoZGVjaW1hbHMgPT09IDApIHtcbiAgICAgICAgbnVtYmVyUGF0dGVybiA9ICdcXFxcZConO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbnVtYmVyUGF0dGVybiA9IGAoPzooPzpcXFxcZCsoJHtzZXBhcmF0b3J9XFxcXGQqKT8pfCg/OiR7c2VwYXJhdG9yfVxcXFxkKikpP2A7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtzaWduUGF0dGVybn0ke251bWJlclBhdHRlcm59JGApO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkZWNpbWFsUGFydCA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZSA+PSAwID8gTWF0aC5mbG9vcih2YWx1ZSkgOiBNYXRoLmNlaWwodmFsdWUpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub29wID0gKF8pID0+IHsgfTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1lbXB0eVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRlZmluZWQgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNOdW1iZXIgPSAodmFsdWUpID0+IHtcbiAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbDtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gcGFkKHZhbHVlLCBkaWdpdHMpIHtcbiAgICBjb25zdCBjb3VudCA9IGRpZ2l0cyAtIFN0cmluZyh2YWx1ZSkubGVuZ3RoO1xuICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBhZFN0cmluZyA9IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4oXCIwXCIpO1xuICAgICAgICByZXN1bHQgPSBwYXJzZUZsb2F0KHZhbHVlICsgcGFkU3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZXREZWx0YUZyb21Nb3VzZVdoZWVsID0gKGUpID0+IHtcbiAgICBsZXQgZGVsdGEgPSAwO1xuICAgIGlmIChlLndoZWVsRGVsdGEpIHtcbiAgICAgICAgZGVsdGEgPSBlLndoZWVsRGVsdGEgLyAxMjA7XG4gICAgICAgIGRlbHRhID0gZGVsdGEgPiAwID8gTWF0aC5jZWlsKGRlbHRhKSA6IE1hdGguZmxvb3IoZGVsdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChlLmRldGFpbCkge1xuICAgICAgICBkZWx0YSA9IE1hdGgucm91bmQoLWUuZGV0YWlsIC8gMyk7XG4gICAgfVxuICAgIHJldHVybiBkZWx0YTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2V0Q2FyZXRQb3NpdGlvbiA9IChlbGVtZW50KSA9PiBlbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGV4dHJhY3RTaWduaWZpY2FudE51bWVyaWNDaGFycyA9IChmb3JtYXR0ZWRTdHJpbmcsIHNlcGFyYXRvcikgPT4ge1xuICAgIGNvbnN0IHNpZ25pZmljYW50Q2hhcmFjdGVycyA9IGAke3NlcGFyYXRvcn0wMTIzNDU2Nzg5LWA7XG4gICAgcmV0dXJuIGZvcm1hdHRlZFN0cmluZy5zcGxpdCgnJykucmVkdWNlKChhY2MsIGN1cnIpID0+IHNpZ25pZmljYW50Q2hhcmFjdGVycy5pbmNsdWRlcyhjdXJyKSA/ICsrYWNjIDogYWNjLCAwKTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgQXJyb3dEaXJlY3Rpb247XG4oZnVuY3Rpb24gKEFycm93RGlyZWN0aW9uKSB7XG4gICAgQXJyb3dEaXJlY3Rpb25bQXJyb3dEaXJlY3Rpb25bXCJEb3duXCJdID0gLTFdID0gXCJEb3duXCI7XG4gICAgQXJyb3dEaXJlY3Rpb25bQXJyb3dEaXJlY3Rpb25bXCJOb25lXCJdID0gMF0gPSBcIk5vbmVcIjtcbiAgICBBcnJvd0RpcmVjdGlvbltBcnJvd0RpcmVjdGlvbltcIlVwXCJdID0gMV0gPSBcIlVwXCI7XG59KShBcnJvd0RpcmVjdGlvbiB8fCAoQXJyb3dEaXJlY3Rpb24gPSB7fSkpO1xuXG5jb25zdCBQQVJTQUJMRV9PUFRJT05TID0gWydtaW4nLCAnbWF4JywgJ3N0ZXAnLCAnZGVjaW1hbHMnXTtcbmNvbnN0IFBBUlNBQkxFX0RFRkFVTFRTID0ge1xuICAgIGRlY2ltYWxzOiBudWxsLFxuICAgIG1heDogbnVsbCxcbiAgICBtaW46IG51bGwsXG4gICAgc3RlcDogMVxufTtcbmNvbnN0IEZPQ1VTRUQkMiA9ICdrLXN0YXRlLWZvY3VzZWQnO1xuY29uc3QgRk9STUFUVEVEX1ZBTFVFID0gJ2stZm9ybWF0dGVkLXZhbHVlJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIE51bWVyaWNUZXh0Qm94IGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19udW1lcmljdGV4dGJveCAlfSkuXG4gKi9cbmNsYXNzIE51bWVyaWNUZXh0Qm94Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihpbnRsLCByZW5kZXJlciwgbG9jYWxpemF0aW9uU2VydmljZSwgaW5qZWN0b3IsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIGhvc3RFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlID0gbG9jYWxpemF0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICB0aGlzLmhvc3RFbGVtZW50ID0gaG9zdEVsZW1lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgTnVtZXJpY1RleHRCb3ggaXMgZGlzYWJsZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9udW1lcmljdGV4dGJveCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBOdW1lcmljVGV4dEJveCBpcyBpbiBpdHMgcmVhZC1vbmx5IHN0YXRlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfbnVtZXJpY3RleHRib3ggJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQgb2YgdGhlIE51bWVyaWNUZXh0Qm94LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aXRsZSA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHZhbHVlIHdpbGwgYmUgYXV0by1jb3JyZWN0ZWQgYmFzZWQgb24gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcHJlY2lzaW9uX251bWVyaWN0ZXh0Ym94ICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF1dG9Db3JyZWN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkZWNpbWFscyB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlciB3aGVuIHRoZSBpbnB1dCBpcyBmb2N1c2VkXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcHJlY2lzaW9uX251bWVyaWN0ZXh0Ym94ICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlY2ltYWxzID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCBpcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgdGhlIGNvbXBvbmVudCB2YWx1ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHByZWRlZmluZWRzdGVwc19udW1lcmljdGV4dGJveCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSAqKlVwKiogYW5kICoqRG93bioqIHNwaW4gYnV0dG9ucyB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc3BpbmJ1dHRvbnNfbnVtZXJpY3RleHRib3ggJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3Bpbm5lcnMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiBtaW5pbXVtIG9yIG1heGltdW0gdmFsaWRhdG9ycyBhcmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgdmFsaWRhdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRoZSA0LjIuMCBBbmd1bGFyIHZlcnNpb24gaW50cm9kdWNlcyB0aGUgYG1pbmAgYW5kIGBtYXhgIHZhbGlkYXRpb24gZGlyZWN0aXZlcy4gQXMgYSByZXN1bHQsIGV2ZW4gaWYgeW91IHNldCBgcmFuZ2VWYWxpZGF0aW9uYFxuICAgICAgICAgKiB0byBgZmFsc2VgLCB0aGUgYnVpbHQtaW4gQW5ndWxhciB2YWxpZGF0b3JzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHdob2xlIHZhbHVlIHdpbGwgYmUgc2VsZWN0ZWQgd2hlbiB0aGUgTnVtZXJpY1RleHRCb3ggaXMgY2xpY2tlZC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RPbkZvY3VzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIE51bWVyaWNUZXh0Qm94XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZm9ybWF0c19udW1lcmljdGV4dGJveCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X251bWVyaWN0ZXh0Ym94ICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgZm9jdXNlcyB0aGUgYGlucHV0YCBlbGVtZW50IChbc2VlIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfbnVtZXJpY3RleHRib3ggJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGVsZW1lbnQgZ2V0cyBibHVycmVkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfbnVtZXJpY3RleHRib3ggJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLkFycm93RGlyZWN0aW9uID0gQXJyb3dEaXJlY3Rpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFycm93RGlyZWN0aW9uID0gQXJyb3dEaXJlY3Rpb24uTm9uZTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMubWluVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IFwibjJcIjtcbiAgICAgICAgdGhpcy5pc1Bhc3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5nQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5uZ1RvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm5nVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jcmVhc2VQcmVzcyA9IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFycm93UHJlc3MoQXJyb3dEaXJlY3Rpb24uVXAsIGUpO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWNyZWFzZVByZXNzID0gKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXJyb3dQcmVzcyhBcnJvd0RpcmVjdGlvbi5Eb3duLCBlKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVsZWFzZUFycm93ID0gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3BpblRpbWVvdXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXJyb3dEaXJlY3Rpb24gIT09IEFycm93RGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFycm93RGlyZWN0aW9uID0gQXJyb3dEaXJlY3Rpb24uTm9uZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlUGFzdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzUGFzdGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMubnVtZXJpY0lucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgeyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kLCB2YWx1ZTogaW5wdXRWYWx1ZSB9ID0gaW5wdXQ7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmVzc2VkS2V5ID09PSBLZXlzLk51bXBhZERlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5yZXBsYWNlTnVtcGFkRG90VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGFzdGVkKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuZm9ybWF0SW5wdXRWYWx1ZSh0aGlzLmludGwucGFyc2VOdW1iZXIoaW5wdXRWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoaW5wdXRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb25TdGFydCAtIDEsIHNlbGVjdGlvbkVuZCAtIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5pbnRsLnBhcnNlTnVtYmVyKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5yZXN0cmljdERlY2ltYWxzKHBhcnNlZFZhbHVlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Db3JyZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGltaXRlZCA9IHRoaXMubGltaXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbWl0ZWQudmFsdWU7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBsaW1pdGVkLnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IGxpbWl0ZWQuc2VsZWN0aW9uRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlICE9PSB2YWx1ZSB8fCB0aGlzLmhhc1RyYWlsaW5nWmVyb3MoaW5wdXRWYWx1ZSkgfHwgIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBpbnB1dFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXN0ZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmlzUGFzdGVkID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZURyYWdFbnRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmICF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUodGhpcy52YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZU1vdXNlRG93biA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2VsZWN0QWxsID0gdGhpcy5zZWxlY3RPbkZvY3VzIHx8ICF0aGlzLm1vdXNlRG93bjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNlbGVjdEFsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDYXJldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uRm9jdXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vYmx1ciBpcyB0aHJvd24gYmVmb3JlIGlucHV0IHdoZW4gZHJhZ2dpbmcgdGhlIGlucHV0IHRleHQgaW4gSUVcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgIT09IHRoaXMuZWxlbWVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHN0ZXA7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSBLZXlzLkFycm93RG93bikge1xuICAgICAgICAgICAgICAgIHN0ZXAgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwKSB7XG4gICAgICAgICAgICAgICAgc3RlcCA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RlcCAmJiB0aGlzLnN0ZXApIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTdGVwKHN0ZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm51bWVyaWNJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZCxcbiAgICAgICAgICAgICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnByZXNzZWRLZXkgPSBlLmtleUNvZGU7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZVdoZWVsID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWQgJiYgIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IGdldERlbHRhRnJvbU1vdXNlV2hlZWwoZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTdGVwKGRlbHRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb25TZXJ2aWNlLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIGZvcm1hdCB3aGljaCBpcyB1c2VkIHdoZW4gdGhlIE51bWVyaWNUZXh0Qm94IGlzIG5vdCBmb2N1c2VkXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBmb3JtYXRzX251bWVyaWN0ZXh0Ym94ICV9KSkuXG4gICAgICogSWYgYGZvcm1hdGAgaXMgc2V0IHRvIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgZm9ybWF0IHdpbGwgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBnZXQgZm9ybWF0KCkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLl9mb3JtYXQ7XG4gICAgICAgIHJldHVybiBmb3JtYXQgIT09IG51bGwgJiYgZm9ybWF0ICE9PSB1bmRlZmluZWQgPyBmb3JtYXQgOiAnbjInO1xuICAgIH1cbiAgICBzZXQgZm9ybWF0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgZ2V0IHdpZGdldENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpKTtcbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgXCJ0YWJpbmRleFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoYW55Q2hhbmdlZChQQVJTQUJMRV9PUFRJT05TLCBjaGFuZ2VzLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyc2VPcHRpb25zKFBBUlNBQkxFX09QVElPTlMuZmlsdGVyKG9wdGlvbiA9PiBjaGFuZ2VzW29wdGlvbl0pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlcmlmeVNldHRpbmdzKCk7XG4gICAgICAgIGlmIChhbnlDaGFuZ2VkKFsnbWluJywgJ21heCcsICdyYW5nZVZhbGlkYXRpb24nXSwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLm1pblZhbGlkYXRlRm4gPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IGNyZWF0ZU1pblZhbGlkYXRvcih0aGlzLm1pbikgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBjcmVhdGVNYXhWYWxpZGF0b3IodGhpcy5tYXgpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubmdWYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW55Q2hhbmdlZChbJ2F1dG9Db3JyZWN0JywgJ2RlY2ltYWxzJywgJ21pbiddLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubnVtZXJpY1JlZ2V4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlDaGFuZ2VkKFsndmFsdWUnLCAnZm9ybWF0J10sIGNoYW5nZXMsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnJlc3RyaWN0TW9kZWxWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c2VkIHx8ICh0aGlzLmludGwucGFyc2VOdW1iZXIodGhpcy5lbGVtZW50VmFsdWUpICE9PSB0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3BpblRpbWVvdXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMubWF4VmFsaWRhdGVGbihjb250cm9sKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5uZ1ZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgbGV0IHJlc3RyaWN0ZWRWYWx1ZSA9IHRoaXMucmVzdHJpY3RNb2RlbFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHJlc3RyaWN0ZWRWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMubmdDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMubmdUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgc3RhdHVzIG9mIHRoZSBjb21wb25lbnQgY2hhbmdlcyB0byBvciBmcm9tIGBkaXNhYmxlZGAuXG4gICAgICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSwgaXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXBwcm9wcmlhdGUgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZFxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgTnVtZXJpY1RleHRCb3guXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibnVtZXJpY3RleHRib3guZm9jdXMoKVwiPkZvY3VzIE51bWVyaWNUZXh0Qm94PC9idXR0b24+XG4gICAgICogIDxrZW5kby1udW1lcmljdGV4dGJveCAjbnVtZXJpY3RleHRib3g+PC9rZW5kby1udW1lcmljdGV4dGJveD5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGludm9rZUVsZW1lbnRNZXRob2QodGhpcy5udW1lcmljSW5wdXQsICdmb2N1cycpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgTnVtZXJpY1RleHRCb3guXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLm51bWVyaWNJbnB1dCwgJ2JsdXInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTm90aWZpZXMgdGhlIGBOdW1lcmljVGV4dEJveENvbXBvbmVudGAgdGhhdCB0aGUgaW5wdXQgdmFsdWUgc2hvdWxkIGJlIGNoYW5nZWQuXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBpbnB1dCBhZnRlciBzZXR0aW5nIHRoZSBjb21wb25lbnQgcHJvcGVydGllcyBkaXJlY3RseS5cbiAgICAgKi9cbiAgICBub3RpZnlWYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaW5jcmVtZW50VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KCdpbmNyZW1lbnQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBkZWNyZW1lbnRUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5nZXQoJ2RlY3JlbWVudCcpO1xuICAgIH1cbiAgICBnZXQgZGVjaW1hbFNlcGFyYXRvcigpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyU3ltYm9scyA9IHRoaXMuaW50bC5udW1iZXJTeW1ib2xzKCk7XG4gICAgICAgIHJldHVybiBudW1iZXJTeW1ib2xzLmRlY2ltYWw7XG4gICAgfVxuICAgIGdldCBlbGVtZW50VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bWVyaWNJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZWxlbWVudFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5udW1lcmljSW5wdXQubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkO1xuICAgIH1cbiAgICBnZXQgaGFzRGVjaW1hbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxzICE9PSBudWxsICYmIHRoaXMuZGVjaW1hbHMgPj0gMDtcbiAgICB9XG4gICAgc2V0IGZvY3VzZWQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkICE9PSB2YWx1ZSAmJiB0aGlzLm51bWVyaWNXcmFwKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwID0gdGhpcy5udW1lcmljV3JhcC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm51bWVyaWNJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh3cmFwLCBGT0NVU0VEJDIpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoaW5wdXQsIEZPUk1BVFRFRF9WQUxVRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh3cmFwLCBGT0NVU0VEJDIpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaW5wdXQsIEZPUk1BVFRFRF9WQUxVRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpc0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5O1xuICAgIH1cbiAgICBhcnJvd1ByZXNzKGRpcmVjdGlvbiwgZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vYmlsZU9TKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFycm93RGlyZWN0aW9uICE9PSBkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXJyb3dEaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICAgICAgICB0aGlzLnNwaW4oZGlyZWN0aW9uLCBJTklUSUFMX1NQSU5fREVMQVkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFhcmVTYW1lKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVwbGFjZU51bXBhZERvdFZhbHVlKCkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5udW1lcmljSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gaW5wdXQ7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucHJldmlvdXNTZWxlY3Rpb247XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHRoaXMuZGVjaW1hbFNlcGFyYXRvciArIHZhbHVlLnN1YnN0cmluZyhlbmQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5udW1lcmljUmVnZXgpIHtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY1JlZ2V4ID0gbnVtZXJpY1JlZ2V4KHtcbiAgICAgICAgICAgICAgICBhdXRvQ29ycmVjdDogdGhpcy5hdXRvQ29ycmVjdCxcbiAgICAgICAgICAgICAgICBkZWNpbWFsczogdGhpcy5kZWNpbWFscyxcbiAgICAgICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjogdGhpcy5kZWNpbWFsU2VwYXJhdG9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5udW1lcmljUmVnZXgudGVzdCh2YWx1ZSk7XG4gICAgfVxuICAgIHNwaW4oc3RlcCwgdGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zcGluVGltZW91dCk7XG4gICAgICAgIHRoaXMuc3BpblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwaW4oc3RlcCwgU1BJTl9ERUxBWSk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgICB0aGlzLmFkZFN0ZXAoc3RlcCk7XG4gICAgfVxuICAgIGFkZFN0ZXAoc3RlcCkge1xuICAgICAgICBsZXQgdmFsdWUgPSBhZGQodGhpcy52YWx1ZSB8fCAwLCB0aGlzLnN0ZXAgKiBzdGVwKTtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmxpbWl0VmFsdWUodmFsdWUpO1xuICAgICAgICB2YWx1ZSA9IHRoaXMucmVzdHJpY3REZWNpbWFscyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBzZXRTZWxlY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBpbnZva2VFbGVtZW50TWV0aG9kKHRoaXMubnVtZXJpY0lucHV0LCAnc2V0U2VsZWN0aW9uUmFuZ2UnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsaW1pdFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5SYW5nZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcih0aGlzLm1heCkgJiYgdmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKHRoaXMubWluKSAmJiB2YWx1ZSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5taW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgbGltaXRJbnB1dFZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGxldCB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQsIHZhbHVlOiBlbnRlcmVkVmFsdWUgfSA9IHRoaXMubnVtZXJpY0lucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBsaW1pdGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbGV0IHNlbGVjdFRvRW5kID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGhDaGFuZ2UgPSBlbnRlcmVkVmFsdWUubGVuZ3RoIC0gU3RyaW5nKHRoaXMuaW5wdXRWYWx1ZSkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGhhc01heCA9IGlzTnVtYmVyKG1heCk7XG4gICAgICAgICAgICBjb25zdCBoYXNNaW4gPSBpc051bWJlcihtaW4pO1xuICAgICAgICAgICAgbGV0IHBhZExpbWl0LCByZXBsYWNlTmV4dDtcbiAgICAgICAgICAgIGxldCBjb3JyZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHRoaXMuaW5wdXRWYWx1ZS5zdWJzdHIoMSkgPT09IGVudGVyZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkVuZDogc2VsZWN0aW9uRW5kLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydDogc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNNYXggJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZExpbWl0ID0gbWF4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc01pbiAmJiB2YWx1ZSA8IG1pbikge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkTGltaXQgPSBtaW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXBsYWNlTmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhZExpbWl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFkZGVkVmFsdWUgPSB0aGlzLnRyeVBhZFZhbHVlKHZhbHVlLCBwYWRMaW1pdCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhZGRlZFZhbHVlICYmIGRlY2ltYWxQYXJ0KHZhbHVlKSAhPT0gZGVjaW1hbFBhcnQocGFkTGltaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZFZhbHVlID0gcGFkZGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFRvRW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXBsYWNlTmV4dCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUgJiYgc2VsZWN0aW9uU3RhcnQgIT09IGVudGVyZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkVmFsdWUgPSBwYXJzZUZsb2F0KGVudGVyZWRWYWx1ZS5zdWJzdHIoMCwgc2VsZWN0aW9uU3RhcnQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGVyZWRWYWx1ZS5zdWJzdHIoc2VsZWN0aW9uU3RhcnQgKyBsZW5ndGhDaGFuZ2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdGVkVmFsdWUgPSB0aGlzLmxpbWl0VmFsdWUoY29ycmVjdGVkVmFsdWUpO1xuICAgICAgICAgICAgc2VsZWN0VG9FbmQgPSAoc2VsZWN0VG9FbmQgfHwgbGltaXRlZFZhbHVlICE9PSBjb3JyZWN0ZWRWYWx1ZSkgJiYgdGhpcy5wcmV2aW91c1NlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnByZXZpb3VzU2VsZWN0aW9uLmVuZCAtIHRoaXMucHJldmlvdXNTZWxlY3Rpb24uc3RhcnQgKyBsZW5ndGhDaGFuZ2UpID4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uRW5kOiBzZWxlY3RUb0VuZCA/IFN0cmluZyhsaW1pdGVkVmFsdWUpLmxlbmd0aCA6IHNlbGVjdGlvbkVuZCxcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0OiBzZWxlY3Rpb25TdGFydCxcbiAgICAgICAgICAgIHZhbHVlOiBsaW1pdGVkVmFsdWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdHJ5UGFkVmFsdWUodmFsdWUsIGxpbWl0KSB7XG4gICAgICAgIGNvbnN0IGxpbWl0TGVuZ3RoID0gU3RyaW5nKE1hdGguZmxvb3IobGltaXQpKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHplcm9QYWRkZWQgPSBwYWQodmFsdWUsIGxpbWl0TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgemVyb1BhZGRlZE5leHQgPSBwYWQodmFsdWUsIGxpbWl0TGVuZ3RoICsgMSk7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmICh0aGlzLmlzSW5SYW5nZSh6ZXJvUGFkZGVkKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gemVyb1BhZGRlZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzSW5SYW5nZSh6ZXJvUGFkZGVkTmV4dCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHplcm9QYWRkZWROZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlzSW5SYW5nZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gIWlzTnVtYmVyKHZhbHVlKSB8fCAoKCFpc051bWJlcih0aGlzLm1pbikgfHwgdGhpcy5taW4gPD0gdmFsdWUpICYmICghaXNOdW1iZXIodGhpcy5tYXgpIHx8IHZhbHVlIDw9IHRoaXMubWF4KSk7XG4gICAgfVxuICAgIHJlc3RyaWN0TW9kZWxWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZXN0cmljdERlY2ltYWxzKHZhbHVlLCB0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0NvcnJlY3QgJiYgdGhpcy5saW1pdFZhbHVlKHJlc3VsdCkgIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN0cmljdERlY2ltYWxzKHZhbHVlLCByb3VuZCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmhhc0RlY2ltYWxzKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IHRoaXMuZGVjaW1hbHM7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocm91bmQgfHwgRVhQT05FTlRfUkVHRVgudGVzdChzdHJpbmdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0b0ZpeGVkUHJlY2lzaW9uKHZhbHVlLCBkZWNpbWFscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHN0cmluZ1ZhbHVlLnNwbGl0KFBPSU5UKTtcbiAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb24gPSBwYXJ0c1sxXTtcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb24gJiYgZnJhY3Rpb24ubGVuZ3RoID4gZGVjaW1hbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24gPSBmcmFjdGlvbi5zdWJzdHIoMCwgZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUZsb2F0KGAke3BhcnRzWzBdfSR7UE9JTlR9JHtmcmFjdGlvbn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZm9ybWF0SW5wdXRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBsZXQgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICBjb25zdCBleHBvbmVudE1hdGNoID0gRVhQT05FTlRfUkVHRVguZXhlYyhzdHJpbmdWYWx1ZSk7XG4gICAgICAgIGlmIChleHBvbmVudE1hdGNoKSB7XG4gICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvRml4ZWQobGltaXRQcmVjaXNpb24ocGFyc2VJbnQoZXhwb25lbnRNYXRjaFsxXSwgMTApKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLnJlcGxhY2UoUE9JTlQsIHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG4gICAgfVxuICAgIGZvcm1hdFZhbHVlKHZhbHVlLCBmb2N1c2VkKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8ICFkZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9jdXNlZCAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdElucHV0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmludGwuZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlO1xuICAgIH1cbiAgICBzZXRJbnB1dFZhbHVlKHZhbHVlID0gdGhpcy52YWx1ZSwgZm9jdXNlZCA9IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGZvY3VzZWQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZTtcbiAgICB9XG4gICAgdmVyaWZ5U2V0dGluZ3MoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW4gIT09IG51bGwgJiYgdGhpcy5tYXggIT09IG51bGwgJiYgdGhpcy5taW4gPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWF4IHZhbHVlIHNob3VsZCBiZSBiaWdnZXIgdGhhbiB0aGUgbWluLiBTZWUgJHtNSU5fRE9DX0xJTkt9IGFuZCAke01BWF9ET0NfTElOS30uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIE51bWVyaWNUZXh0Qm94IGNvbXBvbmVudCByZXF1aXJlcyB2YWx1ZSBvZiB0eXBlIE51bWJlciBhbmQgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IHdhcyBzZXQuYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgb3B0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9uc1tpZHhdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTihwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhdmFsaWQgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIE51bWVyaWNUZXh0Qm94IGNvbXBvbmVudCByZXF1aXJlcyB2YWx1ZSBvZiB0eXBlIE51bWJlciBvciBhIFN0cmluZyByZXByZXNlbnRpbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYSBudW1iZXIgZm9yIHRoZSAke25hbWV9IHByb3BlcnR5IGFuZCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0gd2FzIHNldC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHZhbGlkID8gcGFyc2VkIDogUEFSU0FCTEVfREVGQVVMVFNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubnVtZXJpY1JlZ2V4O1xuICAgICAgICBpZiAodGhpcy5udW1lcmljSW5wdXQgJiYgKCF0aGlzLmZvY3VzZWQgfHwgIXRoaXMuaXNWYWxpZCh0aGlzLmVsZW1lbnRWYWx1ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNUcmFpbGluZ1plcm9zKGlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGVjaW1hbHMgJiYgdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFjdGlvbiA9IGlucHV0VmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yKVsxXTtcbiAgICAgICAgICAgIHJldHVybiBmcmFjdGlvbiAmJiBmcmFjdGlvbi5sZW5ndGggPiB0aGlzLmRlY2ltYWxzICYmIGZyYWN0aW9uLmxhc3RJbmRleE9mKCcwJykgPT09IGZyYWN0aW9uLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZWN0QWxsKCkge1xuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oMCwgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCk7XG4gICAgfVxuICAgIHNlbGVjdENhcmV0KCkge1xuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbih0aGlzLm51bWVyaWNJbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmVsZW1lbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgcGFydGlhbFZhbHVlID0gZm9ybWF0dGVkVmFsdWUuc3Vic3RyaW5nKDAsIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICB0aGlzLnNldElucHV0VmFsdWUoKTtcbiAgICAgICAgaWYgKHBhcnRpYWxWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25pZmljYW50Q2hhcnNJbkZvcm1hdHRlZFZhbHVlID0gZXh0cmFjdFNpZ25pZmljYW50TnVtZXJpY0NoYXJzKHBhcnRpYWxWYWx1ZSwgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkU2lnbmlmaWNhbnRDaGFycyA9IHRoaXMuYWRqdXN0U2lnbmlmaWNhbnRDaGFycyhmb3JtYXR0ZWRWYWx1ZSwgc2lnbmlmaWNhbnRDaGFyc0luRm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oYWRqdXN0ZWRTaWduaWZpY2FudENoYXJzLCBhZGp1c3RlZFNpZ25pZmljYW50Q2hhcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oMCwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbnVtYmVyT2ZMZWFkaW5nWmVyb2VzKGZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gZm9ybWF0dGVkVmFsdWUuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBtYXRjaGVkTGVhZGluZ1plcm9lcyA9IGZvcm1hdHRlZFZhbHVlLm1hdGNoKC9eW14xLTldKj8oMCspLyk7XG4gICAgICAgIGlmIChtYXRjaGVkTGVhZGluZ1plcm9lcykge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoT2ZNYXRjaCA9IG1hdGNoZWRMZWFkaW5nWmVyb2VzWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aE9mTGVhZGluZ1plcm9lc01hdGNoID0gbWF0Y2hlZExlYWRpbmdaZXJvZXNbMV0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aE9mTWF0Y2ggPT09IHNlcGFyYXRvckluZGV4ID8gbGVuZ3RoT2ZMZWFkaW5nWmVyb2VzTWF0Y2ggLSAxIDogbGVuZ3RoT2ZMZWFkaW5nWmVyb2VzTWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGFkanVzdFNpZ25pZmljYW50Q2hhcnMoZm9ybWF0dGVkVmFsdWUsIHNpZ25pZmljYW50Q2hhcnMpIHtcbiAgICAgICAgY29uc3QgbGVhZGluZ1plcm9lcyA9IHRoaXMubnVtYmVyT2ZMZWFkaW5nWmVyb2VzKGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgaWYgKGxlYWRpbmdaZXJvZXMgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgc2lnbmlmaWNhbnRDaGFycyAtIGxlYWRpbmdaZXJvZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaWduaWZpY2FudENoYXJzO1xuICAgIH1cbn1cbk51bWVyaWNUZXh0Qm94Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb051bWVyaWNUZXh0Qm94JyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5udW1lcmljdGV4dGJveCcgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnVtZXJpY1RleHRCb3hDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE51bWVyaWNUZXh0Qm94Q29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLZW5kb0lucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOdW1lcmljVGV4dEJveENvbXBvbmVudCkgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1udW1lcmljdGV4dGJveCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb051bWVyaWNUZXh0Qm94TG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4taW5jcmVtZW50PVwia2VuZG8ubnVtZXJpY3RleHRib3guaW5jcmVtZW50fFRoZSB0aXRsZSBmb3IgdGhlICoqSW5jcmVtZW50KiogYnV0dG9uIGluIHRoZSBOdW1lcmljVGV4dEJveFwiXG4gICAgICAgICAgICBpbmNyZW1lbnQ9XCJJbmNyZWFzZSB2YWx1ZVwiXG4gICAgICAgICAgICBpMThuLWRlY3JlbWVudD1cImtlbmRvLm51bWVyaWN0ZXh0Ym94LmRlY3JlbWVudHxUaGUgdGl0bGUgZm9yIHRoZSAqKkRlY3JlbWVudCoqIGJ1dHRvbiBpbiB0aGUgTnVtZXJpY1RleHRCb3hcIlxuICAgICAgICAgICAgZGVjcmVtZW50PVwiRGVjcmVhc2UgdmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJrLW51bWVyaWMtd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7IG1vdXNld2hlZWw6IGhhbmRsZVdoZWVsLCBET01Nb3VzZVNjcm9sbDogaGFuZGxlV2hlZWwgfVwiXG4gICAgICAgICAgICAjbnVtZXJpY1dyYXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJvbGU9XCJzcGluYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1pbnB1dCBrLWZvcm1hdHRlZC12YWx1ZVwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgICAgICAgW2lkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwidmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIG1vdXNlZG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgICAgICAgICAgICAgIGRyYWdlbnRlcjogaGFuZGxlRHJhZ0VudGVyLFxuICAgICAgICAgICAgICAgIGtleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgICAgICAgICAgaW5wdXQ6IGhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAgIGZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgIHBhc3RlOiBoYW5kbGVQYXN0ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAjbnVtZXJpY0lucHV0IC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstc2VsZWN0XCIgKm5nSWY9XCJzcGlubmVyc1wiIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cInsgbW91c2V1cDogcmVsZWFzZUFycm93LCBtb3VzZWxlYXZlOiByZWxlYXNlQXJyb3cgfVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cInsgbW91c2Vkb3duOiBpbmNyZWFzZVByZXNzIH1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImluY3JlbWVudFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImluY3JlbWVudFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFycm93RGlyZWN0aW9uID09PSBBcnJvd0RpcmVjdGlvbi5VcFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1saW5rIGstbGluay1pbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktYXJyb3ctblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwieyBtb3VzZWRvd246IGRlY3JlYXNlUHJlc3MgfVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVjcmVtZW50VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZGVjcmVtZW50VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYXJyb3dEaXJlY3Rpb24gPT09IEFycm93RGlyZWN0aW9uLkRvd25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstbGluayBrLWxpbmstZGVjcmVhc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWFycm93LXNcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk51bWVyaWNUZXh0Qm94Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogSW5qZWN0b3IgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfVxuXTtcbk51bWVyaWNUZXh0Qm94Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGZvY3VzYWJsZUlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRvQ29ycmVjdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGVjaW1hbHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzcGlubmVyczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdE9uRm9jdXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIG51bWVyaWNJbnB1dDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ251bWVyaWNJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBudW1lcmljV3JhcDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ251bWVyaWNXcmFwJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgd2lkZ2V0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLW51bWVyaWN0ZXh0Ym94JyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTnVtZXJpY1RleHRCb3hNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbk51bWVyaWNUZXh0Qm94TWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGVjcmVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNyZW1lbnQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMuXG4gKi9cbmNsYXNzIE51bWVyaWNUZXh0Qm94Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBOdW1lcmljVGV4dEJveE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuTnVtZXJpY1RleHRCb3hDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBOdW1lcmljVGV4dEJveE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnVtZXJpY1RleHRCb3hDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLW51bWVyaWN0ZXh0Ym94LW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTnVtZXJpY1RleHRCb3hDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBSZXN1bHRUeXBlO1xuKGZ1bmN0aW9uIChSZXN1bHRUeXBlKSB7XG4gICAgUmVzdWx0VHlwZVtSZXN1bHRUeXBlW1wiTGl0ZXJhbFwiXSA9IDBdID0gXCJMaXRlcmFsXCI7XG4gICAgUmVzdWx0VHlwZVtSZXN1bHRUeXBlW1wiTWFza1wiXSA9IDFdID0gXCJNYXNrXCI7XG4gICAgUmVzdWx0VHlwZVtSZXN1bHRUeXBlW1wiVW5kZWZpbmVkXCJdID0gMl0gPSBcIlVuZGVmaW5lZFwiO1xufSkoUmVzdWx0VHlwZSB8fCAoUmVzdWx0VHlwZSA9IHt9KSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUmVzdWx0IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSwgcmVzdCwgdHlwZSA9IFJlc3VsdFR5cGUuVW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5yZXN0ID0gcmVzdDtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG4gICAgLy9tYXAgOjogRnVuY3RvciBmID0+IGYgYSB+PiAoYSAtPiBiKSAtPiBmIGJcbiAgICBtYXAoZm4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoZm4odGhpcy52YWx1ZSksIHRoaXMucmVzdCk7XG4gICAgfVxuICAgIC8vY2hhaW4gOjogQ2hhaW4gbSA9PiBtIGEgfj4gKGEgLT4gbSBiKSAtPiBtIGJcbiAgICBjaGFpbihmbikge1xuICAgICAgICByZXR1cm4gZm4odGhpcy52YWx1ZSwgdGhpcy5yZXN0KTtcbiAgICB9XG4gICAgZm9sZChzLCBfIC8qd2UgZG9uJ3QgbmVlZCBpdCovKSB7XG4gICAgICAgIHJldHVybiBzKHRoaXMudmFsdWUsIHRoaXMucmVzdCk7XG4gICAgfVxuICAgIGNvbmNhdChyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcCgodnMsIF8pID0+IHIuY2hhaW4oKHYsIF9fKSA9PiB2cy5jb25jYXQoW3ZdKSkpO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBSZXN1bHQoeyB2YWx1ZTogJyR7dGhpcy52YWx1ZX0nLCByZXN0OiAke3RoaXMucmVzdH0gfSlgO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFN0cmVhbSB7XG4gICAgY29uc3RydWN0b3IoaW5wdXQgPSBbXSwgY29udHJvbCA9IFtdKSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5jb250cm9sID0gY29udHJvbDtcbiAgICAgICAgdGhpcy5pbnB1dEN1cnNvciA9IDA7XG4gICAgICAgIHRoaXMuY29udHJvbEN1cnNvciA9IDA7XG4gICAgfVxuICAgIGVvZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRDdXJzb3IgPj0gdGhpcy5pbnB1dC5sZW5ndGg7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgZmlyc3QgdmFsdWUgZnJvbSB0aGUgaW5wdXQuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYXI6IHRoaXMuaW5wdXRbdGhpcy5pbnB1dEN1cnNvcisrXSxcbiAgICAgICAgICAgIGNvbnRyb2w6IHRoaXMuY29udHJvbFt0aGlzLmNvbnRyb2xDdXJzb3IrK11cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGVlaygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoYXI6IHRoaXMuaW5wdXRbdGhpcy5pbnB1dEN1cnNvcl0sXG4gICAgICAgICAgICBjb250cm9sOiB0aGlzLmNvbnRyb2xbdGhpcy5jb250cm9sQ3Vyc29yXVxuICAgICAgICB9O1xuICAgIH1cbiAgICBlYXRfaW5wdXQoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRDdXJzb3IrKztcbiAgICB9XG4gICAgZWF0X2NvbnRyb2woKSB7XG4gICAgICAgIHRoaXMuY29udHJvbEN1cnNvcisrO1xuICAgIH1cbiAgICBlYXQoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRDdXJzb3IrKztcbiAgICAgICAgdGhpcy5jb250cm9sQ3Vyc29yKys7XG4gICAgfVxufVxuXG5jb25zdCB0b0FycmF5ID0gKHZhbHVlKSA9PiAodmFsdWUgfHwgJycpLnNwbGl0KCcnKTtcbmNvbnN0IEVTQ0FQRV9DSEFSQUNURVIgPSAnXFxcXCc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJzZSkge1xuICAgICAgICB0aGlzLnBhcnNlID0gcGFyc2U7XG4gICAgfVxuICAgIHJ1bihpbnB1dCwgY29udHJvbCA9ICcnKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UobmV3IFN0cmVhbSh0b0FycmF5KGlucHV0KSwgdG9BcnJheShjb250cm9sKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vbWFwIDo6IEZ1bmN0b3IgZiA9PiBmIGEgfj4gKGEgLT4gYikgLT4gZiBiXG4gICAgbWFwKGYpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJzZXIoc3RyZWFtID0+IHRoaXMucGFyc2Uoc3RyZWFtKS5tYXAoZikpO1xuICAgIH1cbiAgICAvL2NoYWluIDo6IENoYWluIG0gPT4gbSBhIH4+IChhIC0+IG0gYikgLT4gbSBiXG4gICAgY2hhaW4oZikge1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNlcihzdHJlYW0gPT4gdGhpcy5wYXJzZShzdHJlYW0pLmNoYWluKCh2LCBzKSA9PiBmKHYpLnJ1bihzKSkpO1xuICAgIH1cbiAgICBpc0xpdGVyYWwoYykge1xuICAgICAgICByZXR1cm4gdGhpcy5ydW4oYykudHlwZSA9PT0gUmVzdWx0VHlwZS5MaXRlcmFsO1xuICAgIH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtYXNrID0gKHsgcHJvbXB0LCBwcm9tcHRQbGFjZWhvbGRlciB9KSA9PiBydWxlID0+IG5ldyBQYXJzZXIoc3RyZWFtID0+IHtcbiAgICB3aGlsZSAoIXN0cmVhbS5lb2YoKSkge1xuICAgICAgICBjb25zdCB7IGNoYXIsIGNvbnRyb2wgfSA9IHN0cmVhbS5wZWVrKCk7XG4gICAgICAgIGlmIChjaGFyID09PSBjb250cm9sICYmIGNvbnRyb2wgPT09IHByb21wdCkge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQocHJvbXB0LCBzdHJlYW0sIFJlc3VsdFR5cGUuTWFzayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bGUudGVzdChjaGFyKSkge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoY2hhciwgc3RyZWFtLCBSZXN1bHRUeXBlLk1hc2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBwcm9tcHRQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQocHJvbXB0LCBzdHJlYW0sIFJlc3VsdFR5cGUuTWFzayk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLmVhdF9pbnB1dCgpO1xuICAgIH1cbiAgICBzdHJlYW0uZWF0KCk7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQocHJvbXB0LCBzdHJlYW0sIFJlc3VsdFR5cGUuTWFzayk7XG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBsaXRlcmFsID0gX3Rva2VuID0+IG5ldyBQYXJzZXIoc3RyZWFtID0+IHtcbiAgICAvLyAgICBsZXQge2NoYXIsIGNvbnRyb2x9ID0gc3RyZWFtLnBlZWsoKTtcbiAgICBsZXQgY2hhciA9IHN0cmVhbS5wZWVrKCkuY2hhcjtcbiAgICBpZiAoY2hhciA9PT0gX3Rva2VuKSB7XG4gICAgICAgIHN0cmVhbS5lYXQoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoX3Rva2VuLCBzdHJlYW0sIFJlc3VsdFR5cGUuTGl0ZXJhbCk7XG4gICAgfVxuICAgIC8vICAgIGlmIChjb250cm9sID09PSBfdG9rZW4pIHtcbiAgICAvLyAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9mKCkgJiYgY2hhciAhPT0gX3Rva2VuKSB7XG4gICAgLy8gICAgICAgICAgICBzdHJlYW0uZWF0X2lucHV0KCk7XG4gICAgLy8gICAgICAgICAgICBjaGFyID0gc3RyZWFtLnBlZWsoKS5jaGFyO1xuICAgIC8vICAgICAgICB9XG4gICAgLy8gICAgfVxuICAgIC8vXG4gICAgLy8gICAgaWYgKGNvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vICAgICAgICBzdHJlYW0uZWF0KCk7XG4gICAgLy8gICAgfVxuICAgIHJldHVybiBuZXcgUmVzdWx0KF90b2tlbiwgc3RyZWFtLCBSZXN1bHRUeXBlLkxpdGVyYWwpO1xufSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdW5tYXNrID0gcHJvbXB0ID0+IHJ1bGUgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4ge1xuICAgIHdoaWxlICghc3RyZWFtLmVvZigpKSB7XG4gICAgICAgIGNvbnN0IHsgY2hhciwgY29udHJvbCB9ID0gc3RyZWFtLnBlZWsoKTtcbiAgICAgICAgaWYgKGNoYXIgPT09IHByb21wdCAmJiBjb250cm9sID09PSBwcm9tcHQpIHtcbiAgICAgICAgICAgIHN0cmVhbS5lYXQoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KGNoYXIsIHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bGUudGVzdChjaGFyKSkge1xuICAgICAgICAgICAgc3RyZWFtLmVhdCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoY2hhciwgc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0uZWF0X2lucHV0KCk7XG4gICAgfVxuICAgIHN0cmVhbS5lYXQoKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCgnJywgc3RyZWFtKTtcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVubGl0ZXJhbCA9IF90b2tlbiA9PiBuZXcgUGFyc2VyKHN0cmVhbSA9PiB7XG4gICAgaWYgKHN0cmVhbS5lb2YoKSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdCgnJywgc3RyZWFtKTtcbiAgICB9XG4gICAgY29uc3QgeyBjaGFyIH0gPSBzdHJlYW0ucGVlaygpO1xuICAgIGlmIChjaGFyID09PSBfdG9rZW4pIHtcbiAgICAgICAgc3RyZWFtLmVhdCgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlc3VsdChfdG9rZW4sIHN0cmVhbSk7XG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB0b2tlbiA9IChydWxlcywgY3JlYXRvcikgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4ge1xuICAgIGxldCB7IGNoYXIgfSA9IHN0cmVhbS5uZXh0KCk7XG4gICAgY29uc3QgcnVsZSA9IHJ1bGVzW2NoYXJdO1xuICAgIGlmIChjaGFyID09PSBFU0NBUEVfQ0hBUkFDVEVSKSB7XG4gICAgICAgIGNoYXIgPSBzdHJlYW0ubmV4dCgpLmNoYXI7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KGNyZWF0b3IubGl0ZXJhbChjaGFyKSwgc3RyZWFtKTtcbiAgICB9XG4gICAgaWYgKCFydWxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KGNyZWF0b3IubGl0ZXJhbChjaGFyKSwgc3RyZWFtKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoY3JlYXRvci5tYXNrKHJ1bGUpLCBzdHJlYW0pO1xufSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcmF3TWFzayA9ICh7IHByb21wdCwgcHJvbXB0UGxhY2Vob2xkZXIgfSkgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4ge1xuICAgIGxldCB7IGNoYXIgfSA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoYXIgPT09IHByb21wdCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChwcm9tcHRQbGFjZWhvbGRlciwgc3RyZWFtKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoY2hhciwgc3RyZWFtKTtcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJhd0xpdGVyYWwgPSBpbmNsdWRlTGl0ZXJhbHMgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4ge1xuICAgIGxldCB7IGNoYXIgfSA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGluY2x1ZGVMaXRlcmFscykge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChjaGFyLCBzdHJlYW0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlc3VsdCgnJywgc3RyZWFtKTtcbn0pO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgYWx3YXlzID0gdmFsdWUgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4gbmV3IFJlc3VsdCh2YWx1ZSwgc3RyZWFtKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgYXBwZW5kID0gKHAxLCBwMikgPT4gcDEuY2hhaW4odnMgPT4gcDIubWFwKHYgPT4gdnMuY29uY2F0KFt2XSkpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzZXF1ZW5jZSA9IGxpc3QgPT4gbGlzdC5yZWR1Y2UoKGFjYywgcGFyc2VyKSA9PiBhcHBlbmQoYWNjLCBwYXJzZXIpLCBhbHdheXMoW10pKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBncmVlZHkgPSBwYXJzZXIgPT4gbmV3IFBhcnNlcihzdHJlYW0gPT4ge1xuICAgIGxldCByZXN1bHQgPSBuZXcgUmVzdWx0KFtdLCBzdHJlYW0pO1xuICAgIHdoaWxlICghc3RyZWFtLmVvZigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQocGFyc2VyLnJ1bihzdHJlYW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWFza2luZ1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgICAgIHRoaXMucHJvbXB0ID0gXCJfXCI7XG4gICAgICAgIHRoaXMubWFzayA9IFwiXCI7XG4gICAgICAgIHRoaXMucHJvbXB0UGxhY2Vob2xkZXIgPSBcIiBcIjtcbiAgICAgICAgdGhpcy5pbmNsdWRlTGl0ZXJhbHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXNrVG9rZW5zID0gW107XG4gICAgICAgIHRoaXMudW5tYXNrVG9rZW5zID0gW107XG4gICAgICAgIHRoaXMucmF3VG9rZW5zID0gW107XG4gICAgICAgIHRoaXMudmFsaWRhdGlvblRva2VucyA9IFtdO1xuICAgIH1cbiAgICB1cGRhdGUoeyBtYXNrOiBtYXNrJCQxID0gJycsIHByb21wdCA9ICcnLCBwcm9tcHRQbGFjZWhvbGRlciA9ICcgJywgcnVsZXMgPSB7fSwgaW5jbHVkZUxpdGVyYWxzID0gZmFsc2UgfSkge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrJCQxO1xuICAgICAgICB0aGlzLnByb21wdCA9IHByb21wdDtcbiAgICAgICAgdGhpcy5wcm9tcHRQbGFjZWhvbGRlciA9IHByb21wdFBsYWNlaG9sZGVyO1xuICAgICAgICB0aGlzLnJ1bGVzID0gcnVsZXM7XG4gICAgICAgIHRoaXMuaW5jbHVkZUxpdGVyYWxzID0gaW5jbHVkZUxpdGVyYWxzO1xuICAgICAgICB0aGlzLnRva2VuaXplKCk7XG4gICAgfVxuICAgIHZhbGlkYXRpb25WYWx1ZShtYXNrZWRWYWx1ZSA9ICcnKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG1hc2tlZFZhbHVlO1xuICAgICAgICBzZXF1ZW5jZSh0aGlzLnZhbGlkYXRpb25Ub2tlbnMpXG4gICAgICAgICAgICAucnVuKG1hc2tlZFZhbHVlKVxuICAgICAgICAgICAgLmZvbGQodW5tYXNrZWQgPT4ge1xuICAgICAgICAgICAgdmFsdWUgPSB1bm1hc2tlZC5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmF3VmFsdWUobWFza2VkVmFsdWUgPSAnJykge1xuICAgICAgICBsZXQgdmFsdWUgPSBtYXNrZWRWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnJhd1Rva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXF1ZW5jZSh0aGlzLnJhd1Rva2VucylcbiAgICAgICAgICAgIC5ydW4obWFza2VkVmFsdWUpXG4gICAgICAgICAgICAuZm9sZCh1bm1hc2tlZCA9PiB7XG4gICAgICAgICAgICB2YWx1ZSA9IHVubWFza2VkLmpvaW4oJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbWFza1JhdyhyYXdWYWx1ZSA9ICcnKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJhd1ZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMubWFza1Rva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXF1ZW5jZSh0aGlzLm1hc2tUb2tlbnMpXG4gICAgICAgICAgICAucnVuKHJhd1ZhbHVlKVxuICAgICAgICAgICAgLmZvbGQobWFza2VkID0+IHtcbiAgICAgICAgICAgIHZhbHVlID0gbWFza2VkLmpvaW4oJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBtYXNrSW5wdXQoaW5wdXQsIGNvbnRyb2wsIHNwbGl0UG9pbnQpIHtcbiAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrUmVtb3ZlZChpbnB1dCwgY29udHJvbCwgc3BsaXRQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWFza0luc2VydGVkKGlucHV0LCBjb250cm9sLCBzcGxpdFBvaW50KTtcbiAgICB9XG4gICAgbWFza0luUmFuZ2UocGFzdGVkLCBvbGRWYWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgbGV0IHNlbGVjdGlvbiA9IGVuZDtcbiAgICAgICAgY29uc3QgYmVmb3JlQ2hhbmdlID0gb2xkVmFsdWUuc3BsaXQoJycpLnNsaWNlKDAsIHN0YXJ0KTtcbiAgICAgICAgY29uc3QgYWZ0ZXJDaGFuZ2UgPSBvbGRWYWx1ZS5zcGxpdCgnJykuc2xpY2UoZW5kKTtcbiAgICAgICAgc2VxdWVuY2UodGhpcy5tYXNrVG9rZW5zLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgICAgICAgLnJ1bihwYXN0ZWQpXG4gICAgICAgICAgICAuZm9sZChtYXNrZWQgPT4ge1xuICAgICAgICAgICAgdmFsdWUgPSBiZWZvcmVDaGFuZ2VcbiAgICAgICAgICAgICAgICAuY29uY2F0KG1hc2tlZClcbiAgICAgICAgICAgICAgICAuY29uY2F0KGFmdGVyQ2hhbmdlKVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBtYXNrUmVtb3ZlZChpbnB1dCwgY29udHJvbCwgc3BsaXRQb2ludCkge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHNwbGl0UG9pbnQ7XG4gICAgICAgIGNvbnN0IHVuY2hhbmdlZCA9IGlucHV0LnNwbGl0KCcnKS5zbGljZShzcGxpdFBvaW50KTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IGlucHV0LnNwbGl0KCcnKS5zbGljZSgwLCBzcGxpdFBvaW50KS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgdGFrZSQkMSA9IHRoaXMubWFza1Rva2Vucy5sZW5ndGggLSAoaW5wdXQubGVuZ3RoIC0gc3BsaXRQb2ludCk7XG4gICAgICAgIHNlcXVlbmNlKHRoaXMubWFza1Rva2Vucy5zbGljZSgwLCB0YWtlJCQxKSlcbiAgICAgICAgICAgIC5ydW4oY2hhbmdlZCwgY29udHJvbClcbiAgICAgICAgICAgIC5mb2xkKG1hc2tlZCA9PiB7XG4gICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmFkanVzdFBvc2l0aW9uKG1hc2tlZCwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHZhbHVlID0gbWFza2VkLmNvbmNhdCh1bmNoYW5nZWQpLmpvaW4oJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFkanVzdFBvc2l0aW9uKGlucHV0LCBzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgY2FyZXRDaGFyID0gaW5wdXRbc2VsZWN0aW9uXTtcbiAgICAgICAgY29uc3QgaXNMaXRlcmFsID0gdGhpcy5tYXNrVG9rZW5zW3NlbGVjdGlvbl0uaXNMaXRlcmFsKGNhcmV0Q2hhcik7XG4gICAgICAgIGlmICghaXNMaXRlcmFsICYmIGNhcmV0Q2hhciAhPT0gdGhpcy5wcm9tcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24gKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuICAgIG1hc2tJbnNlcnRlZChpbnB1dCwgY29udHJvbCwgc3BsaXRQb2ludCkge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHNwbGl0UG9pbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBpbnB1dC5zbGljZSgwLCBzcGxpdFBvaW50KTtcbiAgICAgICAgc2VxdWVuY2UodGhpcy51bm1hc2tUb2tlbnMpXG4gICAgICAgICAgICAucnVuKGNoYW5nZWQsIGNvbnRyb2wpXG4gICAgICAgICAgICAuY2hhaW4odW5tYXNrZWQgPT4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gdW5tYXNrZWQuam9pbignJykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29udHJvbC5zbGljZShzZWxlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHNlcXVlbmNlKHRoaXMubWFza1Rva2VucylcbiAgICAgICAgICAgICAgICAucnVuKHVubWFza2VkLmpvaW4oJycpICsgdW5jaGFuZ2VkLCBjb250cm9sKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5mb2xkKG1hc2tlZCA9PiB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1hc2tlZC5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXQgbWFza1Rva2VuQ3JlYXRvcigpIHtcbiAgICAgICAgY29uc3QgeyBwcm9tcHQsIHByb21wdFBsYWNlaG9sZGVyIH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGl0ZXJhbDogcnVsZSA9PiBsaXRlcmFsKHJ1bGUpLFxuICAgICAgICAgICAgbWFzazogcnVsZSA9PiBtYXNrKHsgcHJvbXB0LCBwcm9tcHRQbGFjZWhvbGRlciB9KShydWxlKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXQgdW5tYXNrVG9rZW5DcmVhdG9yKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGl0ZXJhbDogcnVsZSA9PiB1bmxpdGVyYWwocnVsZSksXG4gICAgICAgICAgICBtYXNrOiBydWxlID0+IHVubWFzayh0aGlzLnByb21wdCkocnVsZSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IHJhd1Rva2VuQ3JlYXRvcigpIHtcbiAgICAgICAgY29uc3QgeyBwcm9tcHQsIHByb21wdFBsYWNlaG9sZGVyLCBpbmNsdWRlTGl0ZXJhbHMgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaXRlcmFsOiBfID0+IHJhd0xpdGVyYWwoaW5jbHVkZUxpdGVyYWxzKSxcbiAgICAgICAgICAgIG1hc2s6IF8gPT4gcmF3TWFzayh7IHByb21wdCwgcHJvbXB0UGxhY2Vob2xkZXIgfSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IHZhbGlkYXRpb25Ub2tlbkNyZWF0b3IoKSB7XG4gICAgICAgIGNvbnN0IHsgcHJvbXB0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGl0ZXJhbDogXyA9PiByYXdMaXRlcmFsKGZhbHNlKSxcbiAgICAgICAgICAgIG1hc2s6IF8gPT4gcmF3TWFzayh7IHByb21wdCwgcHJvbXB0UGxhY2Vob2xkZXI6ICcnIH0pXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRva2VuaXplKCkge1xuICAgICAgICBncmVlZHkodG9rZW4odGhpcy5ydWxlcywgdGhpcy5tYXNrVG9rZW5DcmVhdG9yKSlcbiAgICAgICAgICAgIC5ydW4odGhpcy5tYXNrKVxuICAgICAgICAgICAgLmZvbGQoKHRva2VucywgXykgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXNrVG9rZW5zID0gdG9rZW5zO1xuICAgICAgICB9KTtcbiAgICAgICAgZ3JlZWR5KHRva2VuKHRoaXMucnVsZXMsIHRoaXMudW5tYXNrVG9rZW5DcmVhdG9yKSlcbiAgICAgICAgICAgIC5ydW4odGhpcy5tYXNrKVxuICAgICAgICAgICAgLmZvbGQoKHRva2VucywgXykgPT4ge1xuICAgICAgICAgICAgdGhpcy51bm1hc2tUb2tlbnMgPSB0b2tlbnM7XG4gICAgICAgIH0pO1xuICAgICAgICBncmVlZHkodG9rZW4odGhpcy5ydWxlcywgdGhpcy5yYXdUb2tlbkNyZWF0b3IpKVxuICAgICAgICAgICAgLnJ1bih0aGlzLm1hc2spXG4gICAgICAgICAgICAuZm9sZCgodG9rZW5zLCBfKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJhd1Rva2VucyA9IHRva2VucztcbiAgICAgICAgfSk7XG4gICAgICAgIGdyZWVkeSh0b2tlbih0aGlzLnJ1bGVzLCB0aGlzLnZhbGlkYXRpb25Ub2tlbkNyZWF0b3IpKVxuICAgICAgICAgICAgLnJ1bih0aGlzLm1hc2spXG4gICAgICAgICAgICAuZm9sZCgodG9rZW5zLCBfKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25Ub2tlbnMgPSB0b2tlbnM7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbk1hc2tpbmdTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCByZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5jb25zdCBGT0NVU0VEJDMgPSAnay1zdGF0ZS1mb2N1c2VkJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIE1hc2tlZFRleHRCb3ggY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X21hc2tlZHRleHRib3ggJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgIDxrZW5kby1tYXNrZWR0ZXh0Ym94XG4gKiAgICAgICAgICBbbWFza109XCJtYXNrXCJcbiAqICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPlxuICogICAgICA8L2tlbmRvLW1hc2tlZHRleHRib3g+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogIHB1YmxpYyB2YWx1ZTogc3RyaW5nID0gXCI5NTgwMTI4MDU1ODA3NzkyXCI7XG4gKiAgcHVibGljIG1hc2s6IHN0cmluZyA9IFwiMDAwMC0wMDAwLTAwMDAtMDAwMFwiO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIE1hc2tlZFRleHRCb3hDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UsIHJlbmRlcmVyLCBob3N0RWxlbWVudCwgbmdab25lLCBpbmplY3RvciwgY2hhbmdlRGV0ZWN0b3IsIHJ0bCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBob3N0RWxlbWVudDtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2FibGVJZCA9IGBrLSR7Z3VpZCgpfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIE1hc2tlZFRleHRCb3ggaXMgZGlzYWJsZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9tYXNrZWR0ZXh0Ym94ICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIE1hc2tlZFRleHRCb3ggaXMgaW4gaXRzIHJlYWQtb25seSBzdGF0ZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X21hc2tlZHRleHRib3ggJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3NlcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXByZXNlbnRzIGEgcHJvbXB0IGNoYXJhY3RlciBmb3IgdGhlIG1hc2tlZCB2YWx1ZS5cbiAgICAgICAgICogQGRlZmF1bHQgYF9gXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb21wdCA9ICdfJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyBhIGNoYXJhY3RlciB3aGljaCByZXByZXNlbnRzIGFuIGVtcHR5IHBvc2l0aW9uIGluIHRoZSByYXcgdmFsdWUuXG4gICAgICAgICAqIEBkZWZhdWx0ICcgJ1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcm9tcHRQbGFjZWhvbGRlciA9ICcgJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgbGl0ZXJhbHMgaW4gdGhlIHJhdyB2YWx1ZSAgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB2YWx1ZV9tYXNrZWR0ZXh0Ym94ICV9KSkuXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY2x1ZGVMaXRlcmFscyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBtYXNrIHNob3VsZCBiZSBzaG93biBvbiBmb2N1cyBmb3IgZW1wdHkgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hc2tPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIG1hc2sgdmFsaWRhdG9yIGlzIGVuZm9yY2VkIHdoZW4gYSBmb3JtIGlzIHZhbGlkYXRlZFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHZhbGlkYXRpb25fbWFza2VkdGV4dGJveCAlfSkpLlxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hc2tWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgW2B0YWJpbmRleGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgpIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBmb2N1c2VzIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVG8gd2lyZSB0aGUgZXZlbnQgcHJvZ3JhbW1hdGljYWxseSwgdXNlIHRoZSBgb25Gb2N1c2AgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1tYXNrZWR0ZXh0Ym94IChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCI+PC9rZW5kby1tYXNrZWR0ZXh0Ym94PlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGZvY3VzZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGVsZW1lbnQgZ2V0cyBibHVycmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uQmx1cmAgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1tYXNrZWR0ZXh0Ym94IChibHVyKT1cImhhbmRsZUJsdXIoKVwiPjwva2VuZG8tbWFza2VkdGV4dGJveD5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGJsdXJyZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmZvY3VzQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UnVsZXMgPSB7XG4gICAgICAgICAgICBcIiNcIjogL1tcXGRcXHNcXCtcXC1dLyxcbiAgICAgICAgICAgIFwiJlwiOiAvW1xcU10vLFxuICAgICAgICAgICAgXCIwXCI6IC9bXFxkXS8sXG4gICAgICAgICAgICBcIjlcIjogL1tcXGRcXHNdLyxcbiAgICAgICAgICAgIFwiP1wiOiAvW2EtekEtWlxcc10vLFxuICAgICAgICAgICAgXCJBXCI6IC9bYS16QS1aMC05XS8sXG4gICAgICAgICAgICBcIkNcIjogLy4vLFxuICAgICAgICAgICAgXCJMXCI6IC9bYS16QS1aXS8sXG4gICAgICAgICAgICBcImFcIjogL1thLXpBLVowLTlcXHNdL1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmlzUGFzdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gWzAsIDBdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXNrT25Gb2N1cyAmJiB0aGlzLmVtcHR5TWFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXQodGhpcy5zZXJ2aWNlLm1hc2tSYXcodGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2V0U2VsZWN0aW9uKDAsIDApOyB9LCAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkZvY3VzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCAmJiAhdGhpcy5mb2N1c0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0NsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgfSA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPT09IHNlbGVjdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXNrT25Gb2N1cyAmJiB0aGlzLmVtcHR5TWFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXQodGhpcy5tYXNrZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IChfKSA9PiB7IH07XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIHRoaXMudXBkYXRlU2VydmljZSgpO1xuICAgIH1cbiAgICBnZXQgaG9zdERpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHBvc2VzIHRoZSBSZWdFeHAtYmFzZWQgbWFzayB2YWxpZGF0aW9uIGFycmF5IChbc2VlIGV4YW1wbGVdKHslIHNsdWcgbWFza3NfbWFza2VkdGV4dGJveCAlfSkpLlxuICAgICAqL1xuICAgIGdldCBydWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bGVzIHx8IHRoaXMuZGVmYXVsdFJ1bGVzO1xuICAgIH1cbiAgICBzZXQgcnVsZXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRSdWxlcywgdmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmhvc3RFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwidGFiaW5kZXhcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgYnkgdGhlIFRleHRCb3hDb250YWluZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBNYXNrZWRUZXh0Qm94IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gIUJvb2xlYW4odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRHJhZ0Ryb3AoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgTWFza2VkVGV4dEJveC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHMtbm8tcnVuXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJtYXNrZWRpbnB1dC5mb2N1cygpXCI+Rm9jdXMgdGhlIGlucHV0PC9idXR0b24+XG4gICAgICogIDxrZW5kby1tYXNrZWR0ZXh0Ym94ICNtYXNrZWRpbnB1dD48L2tlbmRvLW1hc2tlZHRleHRib3g+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXRGb2N1c1NlbGVjdGlvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgTWFza2VkVGV4dEJveC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcGFzdGVIYW5kbGVyKGUpIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH0gPSBlLnRhcmdldDtcbiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZCA9PT0gc2VsZWN0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUGFzdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpbnB1dEhhbmRsZXIoZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnNlbGVjdGlvbjtcbiAgICAgICAgaWYgKCF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5pc1Bhc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmICh0aGlzLmlzUGFzdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzUGFzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByaWdodFBhcnQgPSB0aGlzLm1hc2tlZFZhbHVlLmxlbmd0aCAtIGVuZDtcbiAgICAgICAgICAgIGNvbnN0IHRvID0gdmFsdWUubGVuZ3RoIC0gcmlnaHRQYXJ0O1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zZXJ2aWNlLm1hc2tJblJhbmdlKHZhbHVlLnNsaWNlKHN0YXJ0LCB0byksIHRoaXMubWFza2VkVmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zZXJ2aWNlLm1hc2tJbnB1dCh2YWx1ZSwgdGhpcy5tYXNrZWRWYWx1ZSwgZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXQocmVzdWx0LnZhbHVlLCByZXN1bHQuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShyZXN1bHQudmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubm9ybWFsaXplVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWFzaykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5leHRyYWN0Q2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlKG5leHQpO1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKCd2YWx1ZScsIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBtYXNrZWRWYWx1ZSA9IHRoaXMuc2VydmljZS5tYXNrUmF3KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKG1hc2tlZFZhbHVlICE9PSB0aGlzLm1hc2tlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dChtYXNrZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYW55Q2hhbmdlZChbJ3Byb21wdFBsYWNlaG9sZGVyJywgJ2luY2x1ZGVMaXRlcmFscyddLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5tYXNrZWRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXQodGhpcy5zZXJ2aWNlLm1hc2tSYXcodGhpcy52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5ub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXQodGhpcy5zZXJ2aWNlLm1hc2tSYXcodGhpcy52YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2V0cyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgYGNoYW5nZWAgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2V0cyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgYHRvdWNoYCBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBzdGF0dXMgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzIHRvIG9yIGZyb20gYGRpc2FibGVkYC5cbiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlLCBpdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhcHByb3ByaWF0ZSBET00gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoXykge1xuICAgICAgICBpZiAodGhpcy5tYXNrVmFsaWRhdGlvbiA9PT0gZmFsc2UgfHwgIXRoaXMubWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UudmFsaWRhdGlvblZhbHVlKHRoaXMubWFza2VkVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYXNrZWRWYWx1ZS5pbmRleE9mKHRoaXMucHJvbXB0KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybkVycm9yOiB7XG4gICAgICAgICAgICAgICAgICAgIG1hc2s6IHRoaXMubWFzayxcbiAgICAgICAgICAgICAgICAgICAgbWFza2VkVmFsdWU6IHRoaXMubWFza2VkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHVwZGF0ZVZhbHVlKG1hc2tlZFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2sgJiYgIXRoaXMuc2VydmljZS52YWxpZGF0aW9uVmFsdWUobWFza2VkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZXJ2aWNlLnJhd1ZhbHVlKG1hc2tlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHVwZGF0ZUlucHV0KG1hc2tlZFZhbHVlID0gJycsIHNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLm1hc2tlZFZhbHVlID0gbWFza2VkVmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tYXNrT25Gb2N1cyAmJiAhdGhpcy5mb2N1c2VkICYmIHRoaXMuZW1wdHlNYXNrID8gJycgOiBtYXNrZWRWYWx1ZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHRyYWN0Q2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjaGFuZ2VzKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ3J1bGVzJykucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4gICAgfVxuICAgIHVwZGF0ZVNlcnZpY2UoZXh0cmEpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBpbmNsdWRlTGl0ZXJhbHM6IHRoaXMuaW5jbHVkZUxpdGVyYWxzLFxuICAgICAgICAgICAgbWFzazogdGhpcy5tYXNrLFxuICAgICAgICAgICAgcHJvbXB0OiB0aGlzLnByb21wdCxcbiAgICAgICAgICAgIHByb21wdFBsYWNlaG9sZGVyOiB0aGlzLnByb21wdFBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgcnVsZXM6IHRoaXMucnVsZXNcbiAgICAgICAgfSwgZXh0cmEpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGUoY29uZmlnKTtcbiAgICB9XG4gICAgc2V0U2VsZWN0aW9uKHN0YXJ0ID0gdGhpcy5zZWxlY3Rpb25bMF0sIGVuZCA9IHRoaXMuc2VsZWN0aW9uWzFdKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIGludm9rZUVsZW1lbnRNZXRob2QodGhpcy5pbnB1dCwgJ3NldFNlbGVjdGlvblJhbmdlJywgc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVtcHR5TWFzaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5tYXNrUmF3KCkgPT09IHRoaXMubWFza2VkVmFsdWU7XG4gICAgfVxuICAgIHNldEZvY3VzU2VsZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1hc2tlZFZhbHVlID8gdGhpcy5tYXNrZWRWYWx1ZS5pbmRleE9mKHRoaXMucHJvbXB0KSA6IDA7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgc2VsZWN0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW2luZGV4LCBpbmRleF07XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZvY3VzZWQ7XG4gICAgfVxuICAgIHNldCBmb2N1c2VkKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCAhPT0gdmFsdWUgJiYgdGhpcy5ob3N0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgRk9DVVNFRCQzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgRk9DVVNFRCQzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbm9ybWFsaXplVmFsdWUodmFsdWUgPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHByZXNlbnQgPSBpc1ByZXNlbnQodmFsdWUpO1xuICAgICAgICBpZiAocHJlc2VudCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBNYXNrZWRUZXh0Qm94IGNvbXBvbmVudCBzdXBwb3J0cyBvbmx5IHN0cmluZyB2YWx1ZXMuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlc2VudCA/IHZhbHVlIDogJyc7XG4gICAgfVxufVxuTWFza2VkVGV4dEJveENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9NYXNrZWRUZXh0Qm94JyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTWFza2luZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXNrZWRUZXh0Qm94Q29tcG9uZW50KSAvKiB0c2xpbnQ6ZGlzYWJsZS1saW5lICovXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tlZFRleHRCb3hDb21wb25lbnQpIC8qIHRzbGludDpkaXNhYmxlLWxpbmUgKi9cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogS2VuZG9JbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tlZFRleHRCb3hDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tbWFza2VkdGV4dGJveCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICBjbGFzcz1cImstdGV4dGJveFwiXG4gICAgICAgICAgICBbaWRdPVwiZm9jdXNhYmxlSWRcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIGZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGhhbmRsZURyYWdEcm9wLFxuICAgICAgICAgICAgICAgIGRyb3A6IGhhbmRsZURyYWdEcm9wXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk1hc2tlZFRleHRCb3hDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBNYXNraW5nU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtSVEwsXSB9XSB9XG5dO1xuTWFza2VkVGV4dEJveENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLW1hc2tlZHRleHRib3gnLF0gfV0sXG4gICAgaG9zdERpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgbWFzazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJ1bGVzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwcm9tcHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByb21wdFBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNsdWRlTGl0ZXJhbHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1hc2tPbkZvY3VzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXNrVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGlucHV0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgcGFzdGVIYW5kbGVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsncGFzdGUnLCBbJyRldmVudCddLF0gfV0sXG4gICAgaW5wdXRIYW5kbGVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnaW5wdXQnLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOmNvbXBvbmVudC1zZWxlY3RvciAqL1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNsaWRlclRpY2sge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jbGFzc2VzID0ge1xuICAgICAgICAgICAgJ2stdGljayc6IHRydWVcbiAgICAgICAgfTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2xpZGVyVGlja3NDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHJ0bCkge1xuICAgICAgICB0aGlzLnJ0bCA9IHJ0bDtcbiAgICAgICAgdGhpcy53cmFwcGVyQ2xhc3NlcyA9ICdrLXJlc2V0IGstc2xpZGVyLWl0ZW1zJztcbiAgICAgICAgdGhpcy50aWNrcyA9IFtdO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhfKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlVGlja3MoKTtcbiAgICB9XG4gICAgY3JlYXRlVGlja3MoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gY2FsY3VsYXRlVGlja3NDb3VudCh0aGlzLm1pbiwgdGhpcy5tYXgsIHRoaXMuc3RlcCk7XG4gICAgICAgIGNvbnN0IGxhcmdlU3RlcCA9IHRoaXMubGFyZ2VTdGVwO1xuICAgICAgICBjb25zdCB0aWNrVmFsdWVQcm9wcyA9IHtcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgc21hbGxTdGVwOiB0aGlzLnN0ZXBcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTbGlkZXJUaWNrKGNhbGN1bGF0ZVZhbHVlRnJvbVRpY2soaSwgdGlja1ZhbHVlUHJvcHMpKSk7XG4gICAgICAgICAgICBpZiAobGFyZ2VTdGVwICYmIGkgJSBsYXJnZVN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0ubGFyZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5jbGFzc2VzWydrLXRpY2stbGFyZ2UnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucnRsIHx8IHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdFswXS5jbGFzc2VzLCB0aGlzLmVuZFRpY2tDbGFzc2VzKHRydWUpKTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5jbGFzc2VzLCB0aGlzLmVuZFRpY2tDbGFzc2VzKGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aWNrcyA9IHJlc3VsdDtcbiAgICB9XG4gICAgZW5kVGlja0NsYXNzZXMoZmlyc3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdrLWZpcnN0JzogKGZpcnN0ICYmICF0aGlzLnZlcnRpY2FsKSB8fCAoIWZpcnN0ICYmIHRoaXMudmVydGljYWwpLFxuICAgICAgICAgICAgJ2stbGFzdCc6ICghZmlyc3QgJiYgIXRoaXMudmVydGljYWwpIHx8IChmaXJzdCAmJiB0aGlzLnZlcnRpY2FsKVxuICAgICAgICB9O1xuICAgIH1cbn1cblNsaWRlclRpY2tzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9TbGlkZXJUaWNrc10nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPGxpICN0aWNrRWxlbWVudCAqbmdGb3I9XCJsZXQgdGljayBvZiB0aWNrcztcIlxuICAgICAgICBbbmdDbGFzc109XCJ0aWNrLmNsYXNzZXNcIlxuICAgICAgICB0aXRsZT1cInt7IHRpY2tUaXRsZSh0aWNrLnZhbHVlKSB9fVwiXG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICA+XG4gICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0aWNrLmxhcmdlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstbGFiZWxcIiAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZSB8fCBkZWZhdWx0TGFiZWxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidGlja1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj4mbmJzcDs8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICA8L2xpPlxuXG4gICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExhYmVsIGxldC12YWx1ZT1cInZhbHVlXCI+XG4gICAgICAgIHt7IHRpY2tUaXRsZSh2YWx1ZSkgfX1cbiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TbGlkZXJUaWNrc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbUlRMLF0gfV0gfVxuXTtcblNsaWRlclRpY2tzQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHdyYXBwZXJDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcycsXSB9XSxcbiAgICB0aWNrVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZlcnRpY2FsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYXJnZVN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYWJlbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aWNrRWxlbWVudHM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogWyd0aWNrRWxlbWVudCcsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNsaWRlcnNDb21tb25Nb2R1bGUge1xufVxuU2xpZGVyc0NvbW1vbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlclRpY2tzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMYWJlbFRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIExhYmVsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlclRpY2tzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEcmFnZ2FibGVNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEV2ZW50c01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUmVzaXplU2Vuc29yTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEcmFnZ2FibGVNb2R1bGUsIEV2ZW50c01vZHVsZSwgUmVzaXplU2Vuc29yTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2xpZGVyTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5TbGlkZXJNZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBkZWNyZW1lbnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluY3JlbWVudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZ0hhbmRsZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbGl6ZWRTbGlkZXJNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIFNsaWRlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuTG9jYWxpemVkU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogU2xpZGVyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRTbGlkZXJNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1NsaWRlckxvY2FsaXplZE1lc3NhZ2VzXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTG9jYWxpemVkU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgU2xpZGVyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBTbGlkZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFNsaWRlck1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zbGlkZXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TbGlkZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgU2xpZGVyIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBJbnB1dHMgbW9kdWxlXG4gKiBpbXBvcnQgeyBTbGlkZXJNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKiBpbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSwgU2xpZGVyTW9kdWxlXSwgLy8gaW1wb3J0IFNsaWRlciBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFNsaWRlck1vZHVsZSB7XG59XG5TbGlkZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6ZWRTbGlkZXJNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6ZWRTbGlkZXJNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2xpZGVyc0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJhbmdlU2xpZGVyTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5SYW5nZVNsaWRlck1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRyYWdIYW5kbGVTdGFydDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZ0hhbmRsZUVuZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbGl6ZWRSYW5nZVNsaWRlck1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgUmFuZ2VTbGlkZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkxvY2FsaXplZFJhbmdlU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogUmFuZ2VTbGlkZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExvY2FsaXplZFJhbmdlU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9TbGlkZXJMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvY2FsaXplZFJhbmdlU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgUmFuZ2VTbGlkZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIFJhbmdlU2xpZGVyTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5SYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFJhbmdlU2xpZGVyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcmFuZ2VzbGlkZXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5SYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBSYW5nZVNsaWRlciBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgSW5wdXRzIG1vZHVsZVxuICogaW1wb3J0IHsgUmFuZ2VTbGlkZXJNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKiBpbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSwgUmFuZ2VTbGlkZXJNb2R1bGVdLCAvLyBpbXBvcnQgUmFuZ2VTbGlkZXIgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBSYW5nZVNsaWRlck1vZHVsZSB7XG59XG5SYW5nZVNsaWRlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIFJhbmdlU2xpZGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBSYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6ZWRSYW5nZVNsaWRlck1lc3NhZ2VzRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIFJhbmdlU2xpZGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBSYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6ZWRSYW5nZVNsaWRlck1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBMYWJlbFRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTbGlkZXJzQ29tbW9uTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5NZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb2ZmOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsaXplZFN3aXRjaE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5Mb2NhbGl6ZWRTd2l0Y2hNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExvY2FsaXplZFN3aXRjaE1lc3NhZ2VzRGlyZWN0aXZlKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvU3dpdGNoTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRTd2l0Y2hNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzLlxuICovXG5jbGFzcyBTd2l0Y2hDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuU3dpdGNoQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTd2l0Y2hDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXN3aXRjaC1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN3aXRjaEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBTd2l0Y2ggY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIFN3aXRjaCBtb2R1bGVcbiAqIGltcG9ydCB7IFN3aXRjaE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWlucHV0cyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIFN3aXRjaE1vZHVsZV0sIC8vIGltcG9ydCBTd2l0Y2ggbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBTd2l0Y2hNb2R1bGUge1xufVxuU3dpdGNoTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemVkU3dpdGNoTWVzc2FnZXNEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemVkU3dpdGNoTWVzc2FnZXNEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEV2ZW50c01vZHVsZSwgUmVzaXplU2Vuc29yTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxpemVkTnVtZXJpY1RleHRCb3hNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIE51bWVyaWNUZXh0Qm94TWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5Mb2NhbGl6ZWROdW1lcmljVGV4dEJveE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE51bWVyaWNUZXh0Qm94TWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWROdW1lcmljVGV4dEJveE1lc3NhZ2VzRGlyZWN0aXZlKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvTnVtZXJpY1RleHRCb3hMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvY2FsaXplZE51bWVyaWNUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIE51bWVyaWNUZXh0Qm94IGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBOdW1lcmljVGV4dEJveCBtb2R1bGVcbiAqIGltcG9ydCB7IE51bWVyaWNUZXh0Qm94TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgTnVtZXJpY1RleHRCb3hNb2R1bGVdLCAvLyBpbXBvcnQgTnVtZXJpY1RleHRCb3ggbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBOdW1lcmljVGV4dEJveE1vZHVsZSB7XG59XG5OdW1lcmljVGV4dEJveE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXplZE51bWVyaWNUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIE51bWVyaWNUZXh0Qm94Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBOdW1lcmljVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIE51bWVyaWNUZXh0Qm94Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBOdW1lcmljVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFdmVudHNNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIE1hc2tlZFRleHRCb3ggY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIE1hc2tlZFRleHRCb3ggbW9kdWxlXG4gKiBpbXBvcnQgeyBNYXNrZWRUZXh0Qm94TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgTWFza2VkVGV4dEJveE1vZHVsZV0sIC8vIGltcG9ydCBNYXNrZWRUZXh0Qm94IG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgTWFza2VkVGV4dEJveE1vZHVsZSB7XG59XG5NYXNrZWRUZXh0Qm94TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtNYXNrZWRUZXh0Qm94Q29tcG9uZW50XSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbTWFza2VkVGV4dEJveENvbXBvbmVudF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXZlbnRzTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgYWRvcm5tZW50cyBpbiB0aGUgc3VmZml4IGNvbnRhaW5lciAoW3NlZSBleGFtcGxlc10oeyUgc2x1ZyBhZG9ybm1lbnRzX3RleHRib3ggJX0jdG9jLXN1ZmZpeGFkb3JubWVudHMpKS5cbiAqICBAZXhhbXBsZVxuICogYGBgdHMtbm8tcnVuXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby10ZXh0Ym94PlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvVGV4dEJveFN1ZmZpeFRlbXBsYXRlPlxuICogICAgICAgIDxidXR0b24ga2VuZG9CdXR0b24gbG9vaz1cImNsZWFyXCIgaWNvbj1cImltYWdlXCI+PC9idXR0b24+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tdGV4dGJveD5cbiAqIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge31cbiAqIGBgYFxuICovXG5jbGFzcyBUZXh0Qm94U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5UZXh0Qm94U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1RleHRCb3hTdWZmaXhUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRleHRCb3hTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgYWRvcm5tZW50cyBpbiB0aGUgcHJlZml4IGNvbnRhaW5lciAoW3NlZSBleGFtcGxlc10oeyUgc2x1ZyBhZG9ybm1lbnRzX3RleHRib3ggJX0jdG9jLXByZWZpeGFkb3JubWVudHMpKS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLXRleHRib3g+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9UZXh0Qm94UHJlZml4VGVtcGxhdGU+XG4gKiAgICAgICAgPGJ1dHRvbiBrZW5kb0J1dHRvbiBsb29rPVwiY2xlYXJcIiBpY29uPVwiaW1hZ2VcIj48L2J1dHRvbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby10ZXh0Ym94PlxuICogYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7fVxuICogYGBgXG4gKi9cbmNsYXNzIFRleHRCb3hQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cblRleHRCb3hQcmVmaXhUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvVGV4dEJveFByZWZpeFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGV4dEJveFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbmNsYXNzIFRleHRCb3hDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvblNlcnZpY2UsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIHJlbmRlcmVyLCBpbmplY3RvciwgaG9zdEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlID0gbG9jYWxpemF0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBob3N0RWxlbWVudDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGB0aXRsZWAgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQgb2YgdGhlIFRleHRCb3guXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpdGxlID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGB0YWJpbmRleGAgb2YgdGhlIFRleHRCb3guXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IDBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiaW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvdmlkZXMgYSB2YWx1ZSBmb3IgdGhlIFRleHRCb3guXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgd2hvbGUgdmFsdWUgd2lsbCBiZSBzZWxlY3RlZCB3aGVuIHRoZSBUZXh0Qm94IGlzIGNsaWNrZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdE9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGVuIHRoZSBTdWNjZXNzIGljb24gd2lsbCBiZSBzaG93biAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHZhbGlkYXRpb25fdGV4dGJveCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICpcbiAgICAgICAgICogYGJvb2xlYW5gJm1kYXNoO1RoZSBTdWNjZXNzIGljb24gaXMgZGlzcGxheWVkLCBpZiB0aGUgY29uZGl0aW9uIGdpdmVuIGJ5IHRoZSBkZXZlbG9wZXIgaXMgbWV0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBgaW5pdGlhbGAmbWRhc2g7VGhlIFN1Y2Nlc3MgaWNvbiB3aWxsIGJlIGRpc3BsYXllZCB3aGVuIHRoZSBjb21wb25lbnQgc3RhdGUgaXMgbmVpdGhlciBgaW52YWxpZGAgbm9yIGB0b3VjaGVkYCBvciBgZGlydHlgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zaG93U3VjY2Vzc0ljb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGVuIHRoZSBFcnJvciBpY29uIHdpbGwgYmUgc2hvd24gKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB2YWxpZGF0aW9uX3RleHRib3ggJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqXG4gICAgICAgICAqICogYGluaXRpYWxgJm1kYXNoO1RoZSBFcnJvciBpY29uIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gdGhlIGNvbXBvbmVudCBzdGF0ZSBpc1xuICAgICAgICAgKiBgaW52YWxpZGAgYW5kIGB0b3VjaGVkYCBvciBgZGlydHlgLlxuICAgICAgICAgKiAqIGBib29sZWFuYCZtZGFzaDtUaGUgRXJyb3IgaWNvbiBpcyBkaXNwbGF5ZWQsIGlmIHRoZSBjb25kaXRpb24gZ2l2ZW4gYnkgdGhlIGRldmVsb3BlciBpcyBtZXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dFcnJvckljb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIGEgQ2xlYXIgYnV0dG9uIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsZWFyQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHZhbHVlIGlzIGNoYW5nZWQmbWRhc2g7XG4gICAgICAgICAqIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBibHVycmVkIG9yIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHRocm91Z2ggdGhlICoqQ2xlYXIqKiBidXR0b25cbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld190ZXh0Ym94ICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICogV2hlbiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudCBpcyBwcm9ncmFtbWF0aWNhbGx5IGNoYW5nZWQgdG8gYG5nTW9kZWxgIG9yIGBmb3JtQ29udHJvbGBcbiAgICAgICAgICogdGhyb3VnaCBpdHMgQVBJIG9yIGZvcm0gYmluZGluZywgdGhlIGB2YWx1ZUNoYW5nZWAgZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIGl0XG4gICAgICAgICAqIG1pZ2h0IGNhdXNlIGEgbWl4LXVwIHdpdGggdGhlIGJ1aWx0LWluIGB2YWx1ZUNoYW5nZWAgbWVjaGFuaXNtcyBvZiB0aGUgYG5nTW9kZWxgIG9yIGBmb3JtQ29udHJvbGAgYmluZGluZ3MuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGZvY3VzZXMgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5wdXRGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgYGlucHV0YCBlbGVtZW50IGdldHMgYmx1cnJlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5wdXRCbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGZvY3VzZXMgdGhlIFRleHRCb3ggY29tcG9uZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uRm9jdXNgIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0cy1uby1ydW5cbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tdGV4dGJveCAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiPjwva2VuZG8tdGV4dGJveD5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZygnQ29tcG9uZW50IGlzIGlzRm9jdXNlZCcpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgVGV4dEJveCBjb21wb25lbnQgZ2V0cyBibHVycmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uQmx1cmAgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzLW5vLXJ1blxuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby10ZXh0Ym94IChibHVyKT1cImhhbmRsZUJsdXIoKVwiPjwva2VuZG8tdGV4dGJveD5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKCdDb21wb25lbnQgaXMgYmx1cnJlZCcpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdE9uRm9jdXMgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2VsZWN0QWxsKCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uRm9jdXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5pbnB1dEZvY3VzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXNDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSB8fCAodGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ICYmIHRoaXMuY2xlYXJCdXR0b25DbGlja2VkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Rm9jdXMuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dEJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLmlucHV0Qmx1cikgfHwgcmVxdWlyZXNab25lT25CbHVyKHRoaXMuY29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Qmx1ci5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZUlucHV0ID0gKGV2KSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5jb21pbmdWYWx1ZSA9IGV2LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWUoaW5jb21pbmdWYWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmdDaGFuZ2UgPSAoXykgPT4geyB9O1xuICAgICAgICB0aGlzLm5nVG91Y2hlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb25TZXJ2aWNlLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgdGFiSW5kZXgodGFiSW5kZXgpIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IHRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmluZGV4O1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gZmFsc2UgOiB0aGlzLl9pc0ZvY3VzZWQ7XG4gICAgfVxuICAgIHNldCBpc0ZvY3VzZWQoaXNGb2N1c2VkKSB7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIHRoaXMuY2hlY2tDbGVhckJ1dHRvbigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJzb3JJbnNpZGVXcmFwcGVyID0gZmFsc2U7XG4gICAgICAgIGxldCB0YWJiaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIGZvY3VzSW4gYW5kIGZvY3VzT3V0IGFyZSByZWxhdGl2ZSB0byB0aGUgaG9zdCBlbGVtZW50XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnZm9jdXNpbicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnZm9jdXNvdXQnLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGFiYmluZykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0VGV4dGJveCA9IGNsb3Nlc3QoYXJncy5yZWxhdGVkVGFyZ2V0LCAoZWxlbWVudCkgPT4gZWxlbWVudCA9PT0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjbG9zZXN0VGV4dGJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGFiYmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJzb3JJbnNpZGVXcmFwcGVyICYmICF0aGlzLmNsZWFyQnV0dG9uQ2xpY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKGhvc3RFbGVtZW50LCAnbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJzb3JJbnNpZGVXcmFwcGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5yZW5kZXJlci5saXN0ZW4oaG9zdEVsZW1lbnQsICdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnNvckluc2lkZVdyYXBwZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5yZW5kZXJlci5saXN0ZW4oaG9zdEVsZW1lbnQsICdrZXlkb3duJywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLlRhYikge1xuICAgICAgICAgICAgICAgICAgICB0YWJiaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmJpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkIHx8IGNoYW5nZXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDbGVhckJ1dHRvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgVGV4dEJveC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHMtbm8tcnVuXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJpbnB1dC5mb2N1cygpXCI+Rm9jdXMgdGhlIGlucHV0PC9idXR0b24+XG4gICAgICogIDxrZW5kby10ZXh0Ym94ICNpbnB1dD48L2tlbmRvLXRleHRib3g+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZFByb2dyYW1tYXRpY2FsbHkgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFRleHRCb3guXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNGb2N1c2VkRWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCc6Zm9jdXMnKTtcbiAgICAgICAgaWYgKGlzRm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlzRm9jdXNlZEVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2xlYXJUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5nZXQoJ2NsZWFyJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjaGVja0NsZWFyQnV0dG9uKCkge1xuICAgICAgICB0aGlzLnNob3dDbGVhckJ1dHRvbiA9XG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlZCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckJ1dHRvbiAmJlxuICAgICAgICAgICAgICAgICEhdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsZWFyVmFsdWUoZXYpIHtcbiAgICAgICAgaWYgKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJCdXR0b25DbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNoZWNrQ2xlYXJCdXR0b24oKTtcbiAgICAgICAgdGhpcy5jbGVhckJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoZWNrQ2xlYXJCdXR0b24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5uZ0NoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5uZ1RvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBzdGF0dXMgb2YgdGhlIGNvbXBvbmVudCBjaGFuZ2VzIHRvIG9yIGZyb20gYGRpc2FibGVkYC5cbiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlLCBpdCBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhcHByb3ByaWF0ZSBET00gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2hvd0Vycm9yc0luaXRpYWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpbnZhbGlkLCBkaXJ0eSwgdG91Y2hlZCB9ID0gdGhpcy5jb250cm9sO1xuICAgICAgICByZXR1cm4gaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzaG93U3VjY2Vzc0luaXRpYWwoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZGlydHksIHRvdWNoZWQgfSA9IHRoaXMuY29udHJvbDtcbiAgICAgICAgcmV0dXJuIHZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzdWNjZXNzSWNvbkNsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1Y2Nlc3NJY29uXG4gICAgICAgICAgICA/IGBrLXRleHQtc3VjY2VzcyAke3RoaXMuc3VjY2Vzc0ljb259YFxuICAgICAgICAgICAgOiBgay10ZXh0LXN1Y2Nlc3Mgay1pY29uIGstaS1jaGVjay1vdXRsaW5lYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBlcnJvckljb25DbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lcnJvckljb25cbiAgICAgICAgICAgID8gYGstdGV4dC1lcnJvciAke3RoaXMuZXJyb3JJY29ufWBcbiAgICAgICAgICAgIDogYGstdGV4dC1lcnJvciBrLWljb24gay1pLXdhcm5pbmdgO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNsZWFyQnV0dG9uQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJCdXR0b25JY29uXG4gICAgICAgICAgICA/IHRoaXMuY2xlYXJCdXR0b25JY29uXG4gICAgICAgICAgICA6IGBrLWljb24gay1pLWNsb3NlLWNpcmNsZWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzRXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93RXJyb3JJY29uID09PSAnaW5pdGlhbCdcbiAgICAgICAgICAgID8gdGhpcy5zaG93RXJyb3JzSW5pdGlhbCgpXG4gICAgICAgICAgICA6IHRoaXMuc2hvd0Vycm9ySWNvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc1N1Y2Nlc3NmdWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dTdWNjZXNzSWNvbiA9PT0gJ2luaXRpYWwnXG4gICAgICAgICAgICA/IHRoaXMuc2hvd1N1Y2Nlc3NJbml0aWFsKClcbiAgICAgICAgICAgIDogdGhpcy5zaG93U3VjY2Vzc0ljb247XG4gICAgfVxuICAgIHNldFNlbGVjdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmlucHV0LCAnc2V0U2VsZWN0aW9uUmFuZ2UnLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZWxlY3RBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbigwLCB0aGlzLnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFhcmVTYW1lKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQ2xlYXJCdXR0b24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c0NoYW5nZWRQcm9ncmFtbWF0aWNhbGx5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuVGV4dEJveENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9UZXh0Qm94JyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby50ZXh0Ym94JyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRCb3hDb21wb25lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLZW5kb0lucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0Qm94Q29tcG9uZW50KSB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRleHRib3gnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9UZXh0Qm94TG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tY2xlYXI9XCJrZW5kby50ZXh0Ym94LmNsZWFyfFRoZSB0aXRsZSBmb3IgdGhlICoqQ2xlYXIqKiBidXR0b24gaW4gdGhlIFRleHRCb3guXCJcbiAgICAgICAgICAgIGNsZWFyPVwiQ2xlYXJcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiay1pbnB1dC1wcmVmaXhcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwicHJlZml4VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByZWZpeFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiay1pbnB1dFwiXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0YWJpbmRleFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIGZvY3VzOiBoYW5kbGVJbnB1dEZvY3VzLFxuICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUlucHV0Qmx1cixcbiAgICAgICAgICAgICAgICBpbnB1dDogaGFuZGxlSW5wdXR9XCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImstaW5wdXQtc3VmZml4XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhhc0Vycm9yc1wiIFtuZ0NsYXNzXT1cImVycm9ySWNvbkNsYXNzZXNcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU3VjY2Vzc2Z1bFwiIFtuZ0NsYXNzXT1cInN1Y2Nlc3NJY29uQ2xhc3Nlc1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWNsZWFyLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNsZWFyVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNsZWFyVGl0bGUoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjbGVhckJ1dHRvbkNsYXNzZXNcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN1ZmZpeFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzdWZmaXhUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRleHRCb3hDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5UZXh0Qm94Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0T25Gb2N1czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd1N1Y2Nlc3NJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzaG93RXJyb3JJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbGVhckJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3VjY2Vzc0ljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGVycm9ySWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2xlYXJCdXR0b25JY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaW5wdXRGb2N1czogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGlucHV0Qmx1cjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIGlucHV0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgc3VmZml4VGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1RleHRCb3hTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIHByZWZpeFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtUZXh0Qm94UHJlZml4VGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dLFxuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10ZXh0Ym94JyxdIH1dLFxuICAgIGlzRm9jdXNlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1mb2N1c2VkJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV1cbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2VwYXJhdG9yIGluIHRoZSBjb250ZW50IG9mIHRoZSBUZXh0Qm94IChbc2VlIGV4YW1wbGVzXSh7JSBzbHVnIGFkb3JubWVudHNfdGV4dGJveCAlfSN0b2Mtc2VwYXJhdG9yKSkuXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtbm8tcnVuXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby10ZXh0Ym94PlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvVGV4dEJveFN1ZmZpeFRlbXBsYXRlPlxuICogICAgICAgIDxidXR0b24ga2VuZG9CdXR0b24gbG9vaz1cImNsZWFyXCIgaWNvbj1cImltYWdlXCI+PC9idXR0b24+XG4gKiAgICAgICAgPGtlbmRvLXRleHRib3gtc2VwYXJhdG9yPjwva2VuZG8tdGV4dGJveC1zZXBhcmF0b3I+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tdGV4dGJveD5cbiAqIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge31cbiAqIGBgYFxuICovXG5jbGFzcyBUZXh0Qm94U2VwYXJhdG9yQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cblRleHRCb3hTZXBhcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRleHRib3gtc2VwYXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblRleHRCb3hTZXBhcmF0b3JDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRleHRib3gtc2VwYXJhdG9yJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGV4dEJveE1lc3NhZ2VzIGV4dGVuZHMgQ29tcG9uZW50TWVzc2FnZXMge1xufVxuVGV4dEJveE1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNsZWFyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzLlxuICovXG5jbGFzcyBUZXh0Qm94Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBUZXh0Qm94TWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5UZXh0Qm94Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogVGV4dEJveE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tdGV4dGJveC1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRleHRCb3hDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsaXplZFRleHRCb3hNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIFRleHRCb3hNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkxvY2FsaXplZFRleHRCb3hNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUZXh0Qm94TWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmUpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9UZXh0Qm94TG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIFRleHRCb3ggZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIFRleHRCb3ggbW9kdWxlXG4gKiBpbXBvcnQgeyBUZXh0Qm94TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgVGV4dEJveE1vZHVsZV0sIC8vIGltcG9ydCBUZXh0Qm94IG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgVGV4dEJveE1vZHVsZSB7XG59XG5UZXh0Qm94TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveERpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEFyZWFEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFRleHRCb3hDb250YWluZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIFRleHRCb3hDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIFRleHRCb3hTZXBhcmF0b3JDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIFRleHRCb3hTdWZmaXhUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBUZXh0Qm94Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXplZFRleHRCb3hNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBUZXh0Qm94RGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBUZXh0QXJlYURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveENvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveFNlcGFyYXRvckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveFN1ZmZpeFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBUZXh0Qm94UHJlZml4VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIEV2ZW50c01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6ZWRUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEV2ZW50c01vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGEgc3BlY2lmaWVkIGV2ZW50LlxuICAgICAqIEluIHRoaXMgd2F5LCB0aGUgc291cmNlIGNvbXBvbmVudCBzdXBwcmVzc2VzIHRoZSBidWlsdC1pbiBiZWhhdmlvciB0aGF0IGZvbGxvd3MgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBldmVudCBpcyBwcmV2ZW50ZWQgYnkgYW55IG9mIGl0cyBzdWJzY3JpYmVycywgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIGB0cnVlYCBpZiB0aGUgZGVmYXVsdCBhY3Rpb24gd2FzIHByZXZlbnRlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICovXG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEZpcmVzIGVhY2ggdGltZSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBDb2xvclBpY2tlciB3cmFwcGVyIGlzIGNsaWNrZWQuXG4gKiBUaGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIENvbG9yUGlja2VyIGljb24gaXMgc2V0IG9yIG5vdC5cbiAqXG4gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBhY3RpdmUgY29sb3IgYW5kIGdpdmVzIHRoZSBvcHRpb24gdG8gcHJldmVudCB0aGUgb3BlbmluZyBvZiB0aGUgcG9wdXAuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICB0ZW1wbGF0ZTogYFxuICogICAgICAgPGtlbmRvLWNvbG9ycGlja2VyXG4gKiAgICAgICAgICAgW2ljb25dPVwiJ2VkaXQtdG9vbHMnXCJcbiAqICAgICAgICAgICBbdmFsdWVdPVwiJyM5MDAnXCJcbiAqICAgICAgICAgICAoYWN0aXZlQ29sb3JDbGljayk9XCJoYW5kbGVBY3RpdmVDb2xvckNsaWNrKCRldmVudClcIlxuICogICAgICAgPlxuICogICAgICAgPC9rZW5kby1jb2xvcnBpY2tlcj5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGhhbmRsZUFjdGl2ZUNvbG9yQ2xpY2soZXZlbnQ6IEFjdGl2ZUNvbG9yQ2xpY2tFdmVudCk6IHZvaWQge1xuICogICAgICAgICBldmVudC5wcmV2ZW50T3BlbigpO1xuICpcbiAqICAgICAgICAgY29uc29sZS5sb2coJ09wZW4gcHJldmVudGVkOicsIGV2ZW50LmlzT3BlblByZXZlbnRlZCgpKTtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgY29sb3I6JywgZXZlbnQuY29sb3IpO1xuICogICAgIH1cbiAqICB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgQWN0aXZlQ29sb3JDbGlja0V2ZW50IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQHBhcmFtIGNvbG9yIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIENvbG9yUGlja2VyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbG9yKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5vcGVuUHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHRoZSBvcGVuaW5nIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBwcmV2ZW50T3BlbigpIHtcbiAgICAgICAgdGhpcy5vcGVuUHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBvcHVwIG9wZW5pbmcgaXMgcHJldmVudGVkIGJ5IGFueSBvZiBpdHMgc3Vic2NyaWJlcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFJldHVybnMgYHRydWVgIGlmIHRoZSBvcGVuIGFjdGlvbiB3YXMgcHJldmVudGVkLiBPdGhlcndpc2UsIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBpc09wZW5QcmV2ZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5QcmV2ZW50ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBSZXR1cm5zIHRoZSBoZXggb3IgcmdiYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9yLlxuICovXG5jb25zdCBwYXJzZUNvbG9yJDEgPSAodmFsdWUsIGZvcm1hdCwgc2FmZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBhbGxvd2VkRm9ybWF0cyA9IFsnaGV4JywgJ3JnYmEnLCAnbmFtZSddO1xuICAgIGlmIChhbGxvd2VkRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgY29sb3Igb3V0cHV0IGZvcm1hdCAnJHtmb3JtYXR9Jy4gVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSAnaGV4JywgJ3JnYmEnIG9yICduYW1lJy5gKTtcbiAgICB9XG4gICAgaWYgKCFpc1ByZXNlbnQodmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gJ25hbWUnKSB7XG4gICAgICAgIHJldHVybiBuYW1lRm9ybWF0KHZhbHVlLCBzYWZlKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKHZhbHVlLnRyaW0oKSwgc2FmZSk7XG4gICAgaWYgKCFpc1ByZXNlbnQocGFyc2VkQ29sb3IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdCA9PT0gJ2hleCcgPyBwYXJzZWRDb2xvci50b0NzcygpIDogcGFyc2VkQ29sb3IudG9Dc3NSZ2JhKCk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmV0dXJucyBhbiBIU1Ygb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvciBzdHJpbmcuXG4gKi9cbmNvbnN0IGdldEhTViA9ICh2YWx1ZSwgc2FmZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbG9yKHZhbHVlLCBzYWZlKTtcbiAgICBpZiAoIWlzUHJlc2VudChwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZC50b0hTVigpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFJldHVybnMgYW4gUkdCQSBvYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9yIHN0cmluZy5cbiAqL1xuY29uc3QgZ2V0UkdCQSA9ICh2YWx1ZSwgc2FmZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbG9yKHZhbHVlLCBzYWZlKTtcbiAgICBpZiAoIWlzUHJlc2VudChwYXJzZWQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZC50b0J5dGVzKCk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmV0dXJucyB0aGUgUkdCQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9yLlxuICovXG5jb25zdCBnZXRDb2xvckZyb21IU1YgPSAoaHN2YSkgPT4ge1xuICAgIGNvbnN0IGh1ZSA9IGZpdEludG9Cb3VuZHMoaHN2YS5oLCAwLCAzNTkuOSk7XG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IGZpdEludG9Cb3VuZHMoaHN2YS5zLCAwLCAxKTtcbiAgICBjb25zdCB2YWx1ZSA9IGZpdEludG9Cb3VuZHMoaHN2YS52LCAwLCAxKTtcbiAgICBjb25zdCBhbHBoYSA9IGZpdEludG9Cb3VuZHMoaHN2YS5hLCAwLCAxKTtcbiAgICByZXR1cm4gQ29sb3IuZnJvbUhTVihodWUsIHNhdHVyYXRpb24sIHZhbHVlLCBhbHBoYSkudG9Dc3NSZ2JhKCk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmV0dXJucyB0aGUgUkdCQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9yIGJhc2VkIG9uIHRoZSBgaHVlYCwgYXNzdW1pbmcgdGhlIGB2YWx1ZWAsIGBzYXR1cmF0aW9uYCBhbmQgYGFscGhhYCBoYXZlIHZhbHVlIG9mIGAxYC5cbiAqL1xuY29uc3QgZ2V0Q29sb3JGcm9tSHVlID0gKGh1ZSkgPT4ge1xuICAgIHJldHVybiBnZXRDb2xvckZyb21IU1YoeyBoOiBodWUsIHM6IDEsIHY6IDEsIGE6IDEgfSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmV0dXJucyB0aGUgUkdCQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9yLlxuICovXG5jb25zdCBnZXRDb2xvckZyb21SR0JBID0gKHJnYmEpID0+IHtcbiAgICBjb25zdCByZWQgPSBmaXRJbnRvQm91bmRzKHJnYmEuciwgMCwgMjU1KTtcbiAgICBjb25zdCBncmVlbiA9IGZpdEludG9Cb3VuZHMocmdiYS5nLCAwLCAyNTUpO1xuICAgIGNvbnN0IGJsdWUgPSBmaXRJbnRvQm91bmRzKHJnYmEuYiwgMCwgMjU1KTtcbiAgICBjb25zdCBhbHBoYSA9IGZpdEludG9Cb3VuZHMocmdiYS5hLCAwLCAxKTtcbiAgICByZXR1cm4gQ29sb3IuZnJvbUJ5dGVzKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKS50b0Nzc1JnYmEoKTtcbn07XG4vKipcbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIG5hbWVGb3JtYXQodmFsdWUsIHNhZmUpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmIChpc1ByZXNlbnQobmFtZWRDb2xvcnNbdmFsdWVdKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChwYXJzZUNvbG9yKHZhbHVlLCBzYWZlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlQ29sb3IodmFsdWUsIHNhZmUpLnRvSGV4KCk7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG5hbWVkQ29sb3JzKS5maW5kKGtleSA9PiBuYW1lZENvbG9yc1trZXldID09PSB2YWx1ZSk7XG4gICAgaWYgKCFrZXkgJiYgIXNhZmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgY29sb3IgJHt2YWx1ZX0gaXMgbm90IHN1cHBvcnRlZCBmb3IgJ2Zvcm1hdD1cIm5hbWVcIicgcHJvcGVydHkuVG8gZGlzcGxheSAke3ZhbHVlfSBjb2xvciwgdGhlIGNvbXBvbmVudCAnZm9ybWF0JyBwcm9wZXJ0eSBzaG91ZCBiZSBzZXQgdG8gJ2hleCcgb3IgJ3JnYmEnIGApO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBQQUxFVFRFUFJFU0VUUyA9IHtcbiAgICBiYXNpYzoge1xuICAgICAgICBjb2xvcnM6ICcwMDAwMDAsN2Y3ZjdmLDg4MDAxNSxlZDFjMjQsZmY3ZjI3LGZmZjIwMCwyMmIxNGMsMDBhMmU4LDNmNDhjYyxhMzQ5YTQsZmZmZmZmLGMzYzNjMyxiOTdhNTcsZmZhZWM5LGZmYzkwZSxlZmU0YjAsYjVlNjFkLDk5ZDllYSw3MDkyYmUsYzhiZmU3JyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIG9mZmljZToge1xuICAgICAgICBjb2xvcnM6ICdmZmZmZmYsIDAwMDAwMCwgZTZlNmU2LCA0MzU1NjksIDQzNzFjNCwgZWQ3ZTMyLCBhNWE0YTUsIGZlYmYwNCwgNWE5YmQ1LCA3MWFlNDgsIGYyZjJmMywgN2Y3ZjdmLCBkMWNlY2UsIGQ1ZGRlMywgZGFlMWY0LCBmY2U1ZDQsIGRlZWRlZCwgZmZmMmNjLCBkZWVhZjYsIGUxZWZkOSwgZDdkOGQ4LCA1ODU5NTksIGFlYWJhYiwgYWRiYWNhLCBiNGM1ZTcsIGY2Y2FhYywgZGJkYmRiLCBmZmU0OTgsIGJjZDZlZSwgYzVlMGIyLCBiZmJmYzAsIDNmM2YzZiwgNzY3MDcwLCA4NTk1YjEsIDhmYWJkYiwgZjViMTgzLCBjOWM4YzksIGZlZDk2NSwgOWJjNGU1LCBhOGQwOGQsIGE1YTVhNiwgMjYyNjI1LCAzOTM5MzksIDMzNDA1MCwgMmU1NDk2LCBjNDVhMTEsIDdiN2I3YSwgYmY5MDAwLCAyZjc1YjUsIDU0ODIzNSwgN2Y3ZjdmLCAwYjBjMGMsIDE2MTYxNiwgMjIyYTM0LCAyMDM3NjQsIDg0M2QwYiwgNTI1MjUyLCA3ZjYwMDAsIDFkNGQ3OSwgMzc1NjIzJyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIGFwZXg6IHtcbiAgICAgICAgY29sb3JzOiAnZmZmZmZmLCAwMDAwMDAsIGM5YzJkMSwgNjk2NzZkLCBjZWI5NjYsIDljYjA4NCwgNmJiMWM5LCA2NTg1Y2YsIDdlNmJjOSwgYTM3OWJiLCBmMmYyZjIsIDdmN2Y3ZiwgZjRmMmY1LCBlMGUwZTIsIGY1ZjFlMCwgZWJlZmU2LCBlMWVmZjQsIGUwZTZmNSwgZTVlMWY0LCBlY2U0ZjEsIGQ4ZDhkOCwgNTk1OTU5LCBlOWU2ZWMsIGMyYzFjNSwgZWJlM2MxLCBkN2RmY2QsIGMzZGZlOSwgYzFjZWViLCBjYmMzZTksIGRhYzllMywgYmZiZmJmLCAzZjNmM2YsIGRlZGFlMywgYTRhM2E4LCBlMWQ1YTMsIGMzY2ZiNSwgYTZkMGRlLCBhMmI1ZTIsIGIxYTZkZSwgYzdhZWQ2LCBhNWE1YTUsIDI2MjYyNiwgOTY4OGE1LCA0ZTRkNTEsIGFlOTYzOCwgNzU4YzVhLCAzZDhkYTksIDM2NWJiMCwgNTMzZGE5LCA3ZDRkOTksIDdmN2Y3ZiwgMGMwYzBjLCA2MzU2NzIsIDM0MzMzNiwgNzQ2NDI1LCA0ZTVkM2MsIDI5NWU3MCwgMjQzYzc1LCAzNzI5NzAsIDUzMzM2NicsXG4gICAgICAgIGNvbHVtbnM6IDEwXG4gICAgfSxcbiAgICBhdXN0aW46IHtcbiAgICAgICAgY29sb3JzOiAnZmZmZmZmLCAwMDAwMDAsIGNhZjI3OCwgM2UzZDJkLCA5NGM2MDAsIDcxNjg1YSwgZmY2NzAwLCA5MDk0NjUsIDk1NmI0MywgZmVhMDIyLCBmMmYyZjIsIDdmN2Y3ZiwgZjRmY2U0LCBkZGRjZDAsIGVmZmZjMCwgZTNlMWRjLCBmZmUwY2IsIGU4ZTlkZiwgZWNlMWQ2LCBmZWVjZDIsIGQ4ZDhkOCwgNTk1OTU5LCBlOWY5YzksIGJiYjlhMSwgZGZmZjgyLCBjOGMzYmEsIGZmYzI5OSwgZDJkNGMwLCBkYWMzYWQsIGZlZDlhNiwgYmZiZmJmLCAzZjNmM2YsIGRmZjdhZSwgYWRhNTk4LCBjZmZmNDMsIGFkYTU5OCwgZmZhMzY1LCBiY2JmYTEsIGM4YTU4NSwgZmVjNjdhLCBhNWE1YTUsIDI2MjYyNiwgYTllYTI1LCAyZTJkMjEsIDZmOTQwMCwgNTQ0ZTQzLCBiZjRkMDAsIDZjNmY0YiwgNmY1MDMyLCBkNzdiMDAsIDdmN2Y3ZiwgMGMwYzBjLCA3NGE1MGYsIDFmMWUxNiwgNGE2MzAwLCAzODM0MmQsIDdmMzMwMCwgNDg0YTMyLCA0YTM1MjEsIDhmNTIwMCcsXG4gICAgICAgIGNvbHVtbnM6IDEwXG4gICAgfSxcbiAgICBjbGFyaXR5OiB7XG4gICAgICAgIGNvbG9yczogJ2ZmZmZmZiwgMjkyOTM0LCBmM2YyZGMsIGQyNTMzYywgOTNhMjk5LCBhZDhmNjcsIDcyNjA1NiwgNGM1YTZhLCA4MDhkYTAsIDc5NDYzZCwgZjJmMmYyLCBlN2U3ZWMsIGU3ZTViOSwgZjZkY2Q4LCBlOWVjZWEsIGVlZThlMCwgZTRkZWRiLCBkOGRkZTMsIGU1ZThlYywgZTlkNmQzLCBkOGQ4ZDgsIGM0YzRkMSwgZDVkMTg1LCBlZGJhYjEsIGQzZDlkNiwgZGVkMmMyLCBjOWJlYjgsIGIyYmNjOCwgY2NkMWQ5LCBkM2FlYTcsIGJmYmZiZiwgOGE4YWEzLCBhY2E3M2IsIGU0OTc4YSwgYmVjN2MxLCBjZGJiYTMsIGFmOWU5NCwgOGM5YmFjLCBiMmJhYzYsIGJkODU3YywgYTVhNWE1LCA1NjU2NmUsIDU2NTMxZCwgYTQzOTI1LCA2YjdjNzIsIDg2NmI0OCwgNTU0ODQwLCAzOTQzNGYsIDVjNjk3YiwgNWEzNDJkLCA3ZjdmN2YsIDNiM2I0YiwgMjIyMTBiLCA2ZDI2MTksIDQ3NTM0YywgNTk0NzMwLCAzOTMwMmIsIDI2MmQzNSwgM2Q0NjUyLCAzYzIzMWUnLFxuICAgICAgICBjb2x1bW5zOiAxMFxuICAgIH0sXG4gICAgc2xpcHN0cmVhbToge1xuICAgICAgICBjb2xvcnM6ICdmZmZmZmYsIDAwMDAwMCwgYjRkY2ZhLCAyMTI3NDUsIDRlNjdjOCwgNWVjY2YzLCBhN2VhNTIsIDVkY2VhZiwgZmY4MDIxLCBmMTQxMjQsIGYyZjJmMiwgN2Y3ZjdmLCA4YmM5ZjcsIGM3Y2NlNCwgZGJlMGY0LCBkZWY0ZmMsIGVkZmFkYywgZGVmNWVmLCBmZmU1ZDIsIGZjZDlkMywgZDhkOGQ4LCA1OTU5NTksIDRmYWNmMywgOTA5YWNhLCBiOGMyZTksIGJlZWFmYSwgZGJmNmI5LCBiZWViZGYsIGZmY2NhNiwgZjliM2E3LCBiZmJmYmYsIDNmM2YzZiwgMGQ3OGM5LCA1OTY3YWYsIDk0YTNkZSwgOWVlMGY3LCBjYWYyOTcsIDlkZTFjZiwgZmZiMjc5LCBmNjhkN2IsIGE1YTVhNSwgMjYyNjI2LCAwNjNjNjQsIDE4MWQzMywgMzE0NzlmLCAxMWIyZWIsIDgxZDMxOSwgMzRhYzhiLCBkODVjMDAsIGMzMjYwYywgN2Y3ZjdmLCAwYzBjMGMsIDAyMTgyOCwgMTAxMzIyLCAyMDJmNmEsIDBiNzY5YywgNTY4YzExLCAyMjcyNWMsIDkwM2QwMCwgODIxOTA4JyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIG1ldHJvOiB7XG4gICAgICAgIGNvbG9yczogJ2ZmZmZmZiwgMDAwMDAwLCBkNmVjZmYsIDRlNWI2ZiwgN2ZkMTNiLCBlYTE1N2EsIGZlYjgwYSwgMDBhZGRjLCA3MzhhYzgsIDFhYjM5ZiwgZjJmMmYyLCA3ZjdmN2YsIGE3ZDZmZiwgZDlkZGU0LCBlNWY1ZDcsIGZhZDBlNCwgZmVmMGNkLCBjNWYyZmYsIGUyZTdmNCwgYzlmN2YxLCBkOGQ4ZDgsIDU5NTk1OSwgNjBiNWZmLCBiM2JjY2EsIGNiZWNiMCwgZjZhMWM5LCBmZWUyOWMsIDhiZTZmZiwgYzdkMGU5LCA5NGVmZTMsIGJmYmZiZiwgM2YzZjNmLCAwMDdkZWEsIDhkOWJhZiwgYjJlMzg5LCBmMjcyYWYsIGZlZDQ2YiwgNTFkOWZmLCBhYWI4ZGUsIDVmZTdkNSwgYTVhNWE1LCAyNjI2MjYsIDAwM2U3NSwgM2E0NDUzLCA1ZWEyMjYsIGFmMGY1YiwgYzU4YzAwLCAwMDgxYTUsIDQyNWVhOSwgMTM4Njc3LCA3ZjdmN2YsIDBjMGMwYywgMDAxOTJlLCAyNzJkMzcsIDNmNmMxOSwgNzUwYTNkLCA4MzVkMDAsIDAwNTY2ZSwgMmMzZjcxLCAwYzU5NGYnLFxuICAgICAgICBjb2x1bW5zOiAxMFxuICAgIH0sXG4gICAgZmxvdzoge1xuICAgICAgICBjb2xvcnM6ICdmZmZmZmYsIDAwMDAwMCwgZGJmNWY5LCAwNDYxN2IsIDBmNmZjNiwgMDA5ZGQ5LCAwYmQwZDksIDEwY2Y5YiwgN2NjYTYyLCBhNWMyNDksIGYyZjJmMiwgN2Y3ZjdmLCBiMmU5ZjIsIGI0ZWNmYywgYzdlMmZhLCBjNGVlZmYsIGM5ZmFmYywgYzlmYWVkLCBlNGY0ZGYsIGVkZjJkYSwgZDhkOGQ4LCA1OTU5NTksIDc2ZDllOCwgNmFkYWZhLCA5MGM2ZjYsIDg5ZGVmZiwgOTNmNWY5LCA5NGY2ZGIsIGNhZTljMCwgZGJlNmI2LCBiZmJmYmYsIDNmM2YzZiwgMjFiMmM4LCAyMGM4ZjcsIDU5YTlmMiwgNGZjZWZmLCA1ZGYwZjYsIDVmZjJjYSwgYjBkZmEwLCBjOWRhOTEsIGE1YTVhNSwgMjYyNjI2LCAxMDU5NjQsIDAyNDg1YywgMGI1Mzk0LCAwMDc1YTIsIDA4OWNhMiwgMGI5Yjc0LCA1NGE4MzgsIDdlOTUzMiwgN2Y3ZjdmLCAwYzBjMGMsIDA2MjMyOCwgMDEzMDNkLCAwNzM3NjMsIDAwNGU2YywgMDU2ODZjLCAwNzY3NGQsIDM4NzAyNSwgNTQ2MzIxJyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIGhhcmRjb3Zlcjoge1xuICAgICAgICBjb2xvcnM6ICdmZmZmZmYsIDAwMDAwMCwgZWNlOWM2LCA4OTVkMWQsIDg3MzYyNCwgZDY4NjJkLCBkMGJlNDAsIDg3N2Y2YywgOTcyMTA5LCBhZWI3OTUsIGYyZjJmMiwgN2Y3ZjdmLCBlMWRjYTUsIGYyZTBjNiwgZjBkMGM5LCBmNmU2ZDUsIGY1ZjJkOCwgZTdlNWUxLCBmYmM3YmMsIGVlZjBlOSwgZDhkOGQ4LCA1OTU5NTksIGQwYzk3NCwgZTZjMjhkLCBlMmEyOTMsIGVlY2VhYSwgZWNlNWIyLCBjZmNjYzMsIGY3OGY3YSwgZGVlMmQ0LCBiZmJmYmYsIDNmM2YzZiwgYTI5YTM2LCBkYWE0NTQsIGQ0NzM1ZSwgZTZiNjgxLCBlMmQ4OGMsIGI3YjJhNSwgZjM1ODM4LCBjZWQzYmYsIGE1YTVhNSwgMjYyNjI2LCA1MTRkMWIsIDY2NDUxNSwgNjUyODFhLCBhMjY0MWYsIGEzOTQyOCwgNjU1ZjUwLCA3MTE4MDYsIDg3OTQ2NCwgN2Y3ZjdmLCAwYzBjMGMsIDIwMWUwYSwgNDQyZTBlLCA0MzFiMTEsIDZjNDMxNSwgNmQ2MjFhLCA0MzNmMzUsIDRiMTAwNCwgNWE2MjQzJyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIHRyZWs6IHtcbiAgICAgICAgY29sb3JzOiAnZmZmZmZmLCAwMDAwMDAsIGZiZWVjOSwgNGUzYjMwLCBmMGEyMmUsIGE1NjQ0ZSwgYjU4YjgwLCBjMzk4NmQsIGExOTU3NCwgYzE3NTI5LCBmMmYyZjIsIDdmN2Y3ZiwgZjdlMDllLCBlMWQ2Y2YsIGZjZWNkNSwgZWRkZmRhLCBmMGU3ZTUsIGYzZWFlMSwgZWNlOWUzLCBmNWUzZDEsIGQ4ZDhkOCwgNTk1OTU5LCBmM2NjNWYsIGM0YWQ5ZiwgZjlkOWFiLCBkY2MwYjYsIGUxZDBjYywgZTdkNWM0LCBkOWQ0YzcsIGViYzdhMywgYmZiZmJmLCAzZjNmM2YsIGQyOWYwZiwgYTc4NDcwLCBmNmM3ODEsIGNiYTA5MiwgZDJiOWIyLCBkYmMxYTcsIGM2YmZhYiwgZTFhYzc2LCBhNWE1YTUsIDI2MjYyNiwgNjk0ZjA3LCAzYTJjMjQsIGM4N2QwZSwgN2I0YjNhLCA5MjYyNTUsIGExNzI0MiwgN2I3MTUzLCA5MDU3MWUsIDdmN2Y3ZiwgMGMwYzBjLCAyYTFmMDMsIDI3MWQxOCwgODU1MzA5LCA1MjMyMjYsIDYxNDEzOCwgNmI0YzJjLCA1MjRiMzcsIDYwM2ExNCcsXG4gICAgICAgIGNvbHVtbnM6IDEwXG4gICAgfSxcbiAgICB2ZXJ2ZToge1xuICAgICAgICBjb2xvcnM6ICdmZmZmZmYsIDAwMDAwMCwgZDJkMmQyLCA2NjY2NjYsIGZmMzg4YywgZTQwMDU5LCA5YzAwN2YsIDY4MDA3ZiwgMDA1YmQzLCAwMDM0OWUsIGYyZjJmMiwgN2Y3ZjdmLCBiZGJkYmQsIGUwZTBlMCwgZmZkN2U4LCBmZmM2ZGMsIGZmYjhmMSwgZjFiMmZmLCBjM2RjZmYsIGI4Y2ZmZiwgZDhkOGQ4LCA1OTU5NTksIDlkOWQ5ZCwgYzFjMWMxLCBmZmFmZDEsIGZmOGViYSwgZmY3MWU0LCBlMzY1ZmYsIDg3YmFmZiwgNzJhMGZmLCBiZmJmYmYsIDNmM2YzZiwgNjk2OTY5LCBhM2EzYTMsIGZmODdiYSwgZmY1NTk3LCBmZjJhZDcsIGQ1MTlmZiwgNGI5OGZmLCAyYjcxZmYsIGE1YTVhNSwgMjYyNjI2LCAzNDM0MzQsIDRjNGM0YywgZTkwMDYyLCBhYjAwNDIsIDc1MDA1ZiwgNGUwMDVmLCAwMDQ0OWUsIDAwMjY3NiwgN2Y3ZjdmLCAwYzBjMGMsIDE1MTUxNSwgMzMzMzMzLCA5YjAwNDEsIDcyMDAyYywgNGUwMDNmLCAzNDAwM2YsIDAwMmQ2OSwgMDAxOTRmJyxcbiAgICAgICAgY29sdW1uczogMTBcbiAgICB9LFxuICAgIG1vbm9jaHJvbWU6IHtcbiAgICAgICAgY29sb3JzOiAnMDAwMDAwLCAxYTFhMWEsIDMzMzMzMywgNGQ0ZDRkLCA2NjY2NjYsIDgwODA4MCwgOTk5OTk5LCBiM2IzYjMsIGNjY2NjYywgZTZlNmU2LCBmMmYyZjIsIGZmZmZmZicsXG4gICAgICAgIGNvbHVtbnM6IDEyXG4gICAgfSxcbiAgICBhY2Nlc3NpYmxlOiB7XG4gICAgICAgIGNvbG9yczogJ2JsYWNrLCBncmV5LCBkYXJrcmVkLCByZWQsIGRhcmtvcmFuZ2UsIGdvbGQsIGdyZWVuLCBibHVlLCBkYXJrYmx1ZSwgcHVycGxlLCB3aGl0ZSwgZGFya2dyZXksIHNhZGRsZWJyb3duLCBwaW5rLCBvcmFuZ2UsIHllbGxvdywgbGlnaHRncmVlbiwgbGlnaHRza3libHVlLCBsaWdodGJsdWUsIG1lZGl1bXB1cnBsZScsXG4gICAgICAgIGNvbHVtbnM6IDEwXG4gICAgfVxufTtcblxuY29uc3QgREVGQVVMVF9QUkVTRVQgPSAnb2ZmaWNlJztcbmNvbnN0IERFRkFVTFRfQUNDRVNTSUJMRV9QUkVTRVQgPSAnYWNjZXNzaWJsZSc7XG5sZXQgc2VyaWFsID0gMDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIENvbG9yUGlja2VyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19jb2xvcnBpY2tlciAlfSkuXG4gKiBEZXNpZ25lZCB0byByZXBsYWNlIHRoZSBgPGlucHV0IHR5cGU9XCJjb2xvclwiPmAgSFRNTDUgdGFnIHdoaWNoIGlzIG5vdCB3aWRlbHkgc3VwcG9ydGVkIGluIGJyb3dzZXJzLlxuICovXG5jbGFzcyBDb2xvclBpY2tlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocG9wdXBTZXJ2aWNlLCBsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ob3N0Q2xhc3NlcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstY29sb3JwaWNrZXItJHtzZXJpYWwrK31gO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB3aGF0IHZpZXcgdGhlIENvbG9yUGlja2VyIHdpbGwgcmVuZGVyIGluIHRoZSBwb3B1cC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmlldyA9ICdncmFkaWVudCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIENvbG9yUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIENvbG9yUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBDb2xvclBpY2tlci5cbiAgICAgICAgICogVGhlIGlucHV0IHZhbHVlIG1heSBiZSBpbiBhIGRpZmZlcmVudCBmb3JtYXQuIEhvd2V2ZXIsIGl0IHdpbGwgYmUgcGFyc2VkIGludG8gdGhlIG91dHB1dCBgZm9ybWF0YFxuICAgICAgICAgKiBhZnRlciB0aGUgY29tcG9uZW50IHByb2Nlc3NlcyBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogSWYgdGhlIGBncmFkaWVudGAgdmlldyBpcyB1c2VkIHdpdGggdGhlIGBvcGFjaXR5YCBvcHRpb24gc2V0IHRvIHRydWUsIHRoaXMgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQgYW5kIGByZ2JhYCB3aWxsIGJlIHVzZWQgaW5zdGVhZC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIGByZ2JhYCAoZGVmYXVsdClcbiAgICAgICAgICogKiBgaGV4YFxuICAgICAgICAgKiAqIFtgbmFtZWBdKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0NTUy9Qcm9wZXJ0aWVzL2NvbG9yL2tleXdvcmRzKVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb3JtYXQgPSAncmdiYSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIGl0LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCBpdCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIG9wZW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIENvbG9yUGlja2VyIGlzIGZvY3VzZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIENvbG9yUGlja2VyIGlzIGJsdXJyZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBDb2xvclBpY2tlciB3cmFwcGVyIGlzIGNsaWNrZWQuXG4gICAgICAgICAqIFRoZSBldmVudCBpcyB0cmlnZ2VyZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgQ29sb3JQaWNrZXIgaWNvbiBpcyBzZXQgb3Igbm90LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgW2BBY3RpdmVDb2xvckNsaWNrRXZlbnRgXSh7JSBzbHVnIGFwaV9pbnB1dHNfYWN0aXZlY29sb3JjbGlja2V2ZW50ICV9KSBldmVudCBwcm92aWRlcyB0aGUgb3B0aW9uIHRvIHByZXZlbnQgdGhlIHBvcHVwIG9wZW5pbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbG9yQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3RhYmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IHsgYW5pbWF0ZTogdHJ1ZSB9O1xuICAgICAgICB0aGlzLl9wYWxldHRlU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fZ3JhZGllbnRTZXR0aW5ncyA9IHsgb3BhY2l0eTogdHJ1ZSwgY2xlYXJCdXR0b246IGZhbHNlIH07XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIGNvbG9yLlxuICAgICAqL1xuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHBhcnNlQ29sb3IkMSh2YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgcG9wdXAgb2YgdGhlIENvbG9yUGlja2VyLlxuICAgICAqL1xuICAgIHNldCBwb3B1cFNldHRpbmdzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHRoaXMuX3BvcHVwU2V0dGluZ3MsIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFNldHRpbmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBwYWxldHRlIHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBDb2xvclBpY2tlciBwb3B1cC5cbiAgICAgKi9cbiAgICBzZXQgcGFsZXR0ZVNldHRpbmdzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3BhbGV0dGVTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24odGhpcy5fcGFsZXR0ZVNldHRpbmdzLCB2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBwYWxldHRlU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWxldHRlU2V0dGluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIGdyYWRpZW50IHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBDb2xvclBpY2tlciBwb3B1cC5cbiAgICAgKi9cbiAgICBzZXQgZ3JhZGllbnRTZXR0aW5ncyh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9ncmFkaWVudFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9ncmFkaWVudFNldHRpbmdzLCB2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBncmFkaWVudFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhZGllbnRTZXR0aW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBbYHRhYmluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzZXQgdGFiaW5kZXgodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdGFiaW5kZXggPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuICAgICAgICB0aGlzLl90YWJpbmRleCA9ICFpc05hTih0YWJpbmRleCkgPyB0YWJpbmRleCA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgZ2V0IHRhYmluZGV4KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQgPyB0aGlzLl90YWJpbmRleCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIENvbG9yUGlja2VyIHBvcHVwIGlzIG9wZW4uXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLnBvcHVwUmVmKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpY29uU3R5bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmljb25DbGFzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gYGstaWNvbiBrLWktJHt0aGlzLmljb259YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFByZXNldCA9ICh0aGlzLmZvcm1hdCAhPT0gJ25hbWUnKSA/IERFRkFVTFRfUFJFU0VUIDogREVGQVVMVF9BQ0NFU1NJQkxFX1BSRVNFVDtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NQYWxldHRlID0gdGhpcy5fcGFsZXR0ZVNldHRpbmdzLnBhbGV0dGU7XG4gICAgICAgIGNvbnN0IHByZXNldENvbHVtbnMgPSB0eXBlb2Ygc2V0dGluZ3NQYWxldHRlID09PSAnc3RyaW5nJyAmJiBQQUxFVFRFUFJFU0VUU1tzZXR0aW5nc1BhbGV0dGVdID9cbiAgICAgICAgICAgIFBBTEVUVEVQUkVTRVRTW3NldHRpbmdzUGFsZXR0ZV0uY29sdW1ucyA6XG4gICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BhbGV0dGVTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHBhbGV0dGU6IHNldHRpbmdzUGFsZXR0ZSB8fCBkZWZhdWx0UHJlc2V0LFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMuX3BhbGV0dGVTZXR0aW5ncy50aWxlU2l6ZSB8fCAyNCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuX3BhbGV0dGVTZXR0aW5ncy5jb2x1bW5zIHx8IHByZXNldENvbHVtbnMgfHwgMTBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtYXQgJiYgY2hhbmdlcy5mb3JtYXQuY3VycmVudFZhbHVlID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgIHRoaXMudmlldyA9ICdwYWxldHRlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aWV3ID09PSAnZ3JhZGllbnQnICYmIHRoaXMuZ3JhZGllbnRTZXR0aW5ncy5vcGFjaXR5KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9ICdyZ2JhJztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZUNvbG9yJDEodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVdyYXBwZXJDbGljaygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVXaXRoRXZlbnRzKCF0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUFjdGl2ZUNvbG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQWN0aXZlQ29sb3JDbGlja0V2ZW50KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbG9yQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgIGlmICghZXZlbnQuaXNPcGVuUHJldmVudGVkKCkgfHwgdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlV3JhcHBlckNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgd3JhcHBlciBvZiB0aGUgQ29sb3JQaWNrZXIuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVdyYXBwZXJGb2N1cygpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnBhbGV0dGUpKSB7XG4gICAgICAgICAgICB0aGlzLnBhbGV0dGUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIENvbG9yUGlja2VyLlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVdyYXBwZXJCbHVyKCkge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgY29sb3IgdmFsdWUgb2YgdGhlIENvbG9yUGlja2VyLlxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBwb3B1cCBvZiB0aGUgQ29sb3JQaWNrZXIuXG4gICAgICogRG9lcyBub3QgdHJpZ2dlciB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZW4gQW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBTcGVjaWZpZXMgd2hldGhlciB0aGUgcG9wdXAgd2lsbCBiZSBvcGVuZWQgb3IgY2xvc2VkLlxuICAgICAqL1xuICAgIHRvZ2dsZShvcGVuKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgb3BlbiA9IGlzUHJlc2VudChvcGVuKSA/IG9wZW4gOiAhdGhpcy5pc09wZW47XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVWYWx1ZUNoYW5nZShjb2xvciwgY2xvc2VQb3B1cCkge1xuICAgICAgICBjb25zdCBwYXJzZWRDb2xvciA9IHBhcnNlQ29sb3IkMShjb2xvciwgdGhpcy5mb3JtYXQpO1xuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZSA9IHBhcnNlZENvbG9yICE9PSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoY2xvc2VQb3B1cCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVXaXRoRXZlbnRzKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWRDb2xvcjtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChwYXJzZWRDb2xvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZChwYXJzZWRDb2xvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVBvcHVwQmx1cihldmVudCkge1xuICAgICAgICBjb25zdCBmb2N1c0luUG9wdXBFbGVtZW50ID0gdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXJDbGlja2VkID0gZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQgfHwgd3JhcHBlckNsaWNrZWQgfHwgZm9jdXNJblBvcHVwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlOZ1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVXaXRoRXZlbnRzKGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5ub3RpZnlOZ1RvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVdyYXBwZXJLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLkFycm93RG93biB8fCBldmVudC5rZXlDb2RlID09PSBLZXlzLkVudGVyKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVXaXRoRXZlbnRzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVQb3B1cEtleURvd24oa2V5Q29kZSkge1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5UYWIgfHwga2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlV2l0aEV2ZW50cyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdG9nZ2xlV2l0aEV2ZW50cyhvcGVuKSB7XG4gICAgICAgIGNvbnN0IHNhbWVTdGF0ZSA9IHRoaXMuaXNPcGVuID09PSBvcGVuO1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8IHNhbWVTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIG9wZW4gPyB0aGlzLm9wZW4uZW1pdChldmVudEFyZ3MpIDogdGhpcy5jbG9zZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIGlmICghZXZlbnRBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShvcGVuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcGVuUG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxBbGlnbiA9IHRoaXMuZGlyZWN0aW9uID09PSBcInJ0bFwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCI7XG4gICAgICAgIGNvbnN0IGFuY2hvclBvc2l0aW9uID0geyBob3Jpem9udGFsOiBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsOiBcImJvdHRvbVwiIH07XG4gICAgICAgIGNvbnN0IHBvcHVwUG9zaXRpb24gPSB7IGhvcml6b250YWw6IGhvcml6b250YWxBbGlnbiwgdmVydGljYWw6IFwidG9wXCIgfTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLndyYXBwZXIsXG4gICAgICAgICAgICBhbmltYXRlOiB0aGlzLnBvcHVwU2V0dGluZ3MuYW5pbWF0ZSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiB0aGlzLnBvcHVwU2V0dGluZ3MuYXBwZW5kVG8sXG4gICAgICAgICAgICBwb3B1cEFsaWduOiBwb3B1cFBvc2l0aW9uLFxuICAgICAgICAgICAgYW5jaG9yQWxpZ246IGFuY2hvclBvc2l0aW9uLFxuICAgICAgICAgICAgcG9wdXBDbGFzczogJ2stY29sb3JwaWNrZXItcG9wdXAnLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5wb3B1cFRlbXBsYXRlLFxuICAgICAgICAgICAgcG9zaXRpb25Nb2RlOiAnYWJzb2x1dGUnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvcHVwUmVmLnBvcHVwQW5jaG9yVmlld3BvcnRMZWF2ZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVXaXRoRXZlbnRzKGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsb3NlUG9wdXAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLnBhbGV0dGUgPSBudWxsO1xuICAgIH1cbn1cbkNvbG9yUGlja2VyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jb2xvcnBpY2tlcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbG9yUGlja2VyQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBLZW5kb0lucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29sb3JQaWNrZXJDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5jb2xvcnBpY2tlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICN3cmFwcGVyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2stcGlja2VyLXdyYXAnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXN0YXRlLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnay1zdGF0ZS1mb2N1c2VkJzogdGhpcy5pc0ZvY3VzZWRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICAgICAgW2lkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVXcmFwcGVyRm9jdXMoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVXcmFwcGVyQmx1cigpXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlV3JhcHBlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWljb25TdHlsZXNcIiBjbGFzcz1cImstc2VsZWN0ZWQtY29sb3JcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ2YWx1ZVwiIChjbGljayk9XCJoYW5kbGVBY3RpdmVDb2xvckNsaWNrKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktbGluZVwiICpuZ0lmPVwiIXZhbHVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpY29uU3R5bGVzXCIgY2xhc3M9XCJrLXRvb2wtaWNvblwiIFtuZ0NsYXNzXT1cImljb25TdHlsZXNcIiAoY2xpY2spPVwiaGFuZGxlQWN0aXZlQ29sb3JDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLXNlbGVjdGVkLWNvbG9yXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwidmFsdWVcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstc2VsZWN0XCIgKGNsaWNrKT1cImhhbmRsZVdyYXBwZXJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWFycm93LXNcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwb3B1cFRlbXBsYXRlPlxuICAgICAgICAgICAgPGtlbmRvLWNvbG9yZ3JhZGllbnRcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXcgPT09ICdncmFkaWVudCcgfHwgdmlldyA9PT0gJ2NvbWJvJ1wiXG4gICAgICAgICAgICAgICAga2VuZG9Gb2N1c09uRG9tUmVhZHlcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbb3BhY2l0eV09XCJncmFkaWVudFNldHRpbmdzLm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJncmFkaWVudFNldHRpbmdzLmNsZWFyQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwiaGFuZGxlUG9wdXBCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVWYWx1ZUNoYW5nZSgkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBLZXlEb3duKCRldmVudC5rZXlDb2RlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2tlbmRvLWNvbG9yZ3JhZGllbnQ+XG4gICAgICAgICAgICA8a2VuZG8tY29sb3JwYWxldHRlXG4gICAgICAgICAgICAgICAgI3BhbGV0dGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXcgPT09ICdwYWxldHRlJyB8fCB2aWV3ID09PSAnY29tYm8nXCJcbiAgICAgICAgICAgICAgICBrZW5kb0ZvY3VzT25Eb21SZWFkeVxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cInBhbGV0dGVTZXR0aW5ncy5wYWxldHRlXCJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJwYWxldHRlU2V0dGluZ3MuY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW3RpbGVTaXplXT1cInBhbGV0dGVTZXR0aW5ncy50aWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlUG9wdXBCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjZWxsU2VsZWN0aW9uKT1cImhhbmRsZVZhbHVlQ2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwS2V5RG93bigkZXZlbnQua2V5Q29kZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1jb2xvcnBhbGV0dGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbG9yUGlja2VyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5Db2xvclBpY2tlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNvbG9ycGlja2VyJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgZm9jdXNhYmxlSWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBTZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFsZXR0ZVNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncmFkaWVudFNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9wZW46IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIGFjdGl2ZUNvbG9yQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb250YWluZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSxdIH1dLFxuICAgIHdyYXBwZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWyd3cmFwcGVyJyxdIH1dLFxuICAgIHBvcHVwVGVtcGxhdGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydwb3B1cFRlbXBsYXRlJyxdIH1dLFxuICAgIHBhbGV0dGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydwYWxldHRlJywgeyByZWFkOiBFbGVtZW50UmVmIH0sXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbG9yUGFsZXR0ZVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvbG9yUm93cyA9IFtdO1xuICAgIH1cbiAgICBzZXRDb2xvck1hdHJpeChwYWxldHRlLCBjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sb3JSb3dzID0gW107XG4gICAgICAgIGlmICghKGlzUHJlc2VudChwYWxldHRlKSAmJiBwYWxldHRlLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb2x1bW5zID0gY29sdW1ucyB8fCBwYWxldHRlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgc3RhcnQgPSAwOyBzdGFydCA8IHBhbGV0dGUubGVuZ3RoOyBzdGFydCArPSBjb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBwYWxldHRlLnNsaWNlKHN0YXJ0LCBjb2x1bW5zICsgc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5jb2xvclJvd3MucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENlbGxDb29yZHNGb3IoY29sb3IpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoY29sb3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5jb2xvclJvd3MubGVuZ3RoOyByb3crKykge1xuICAgICAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdGhpcy5jb2xvclJvd3Nbcm93XS5sZW5ndGg7IGNvbCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sb3JSb3dzW3Jvd11bY29sXSA9PT0gY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29sb3JBdChjZWxsQ29vcmRzKSB7XG4gICAgICAgIGlmICghKGlzUHJlc2VudChjZWxsQ29vcmRzKSAmJiBpc1ByZXNlbnQodGhpcy5jb2xvclJvd3NbY2VsbENvb3Jkcy5yb3ddKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclJvd3NbY2VsbENvb3Jkcy5yb3ddW2NlbGxDb29yZHMuY29sXTtcbiAgICB9XG4gICAgZ2V0TmV4dENlbGwoY3VycmVudCwgaG9yaXpvbnRhbFN0ZXAsIHZlcnRpY2FsU3RlcCkge1xuICAgICAgICBpZiAoIShpc1ByZXNlbnQoY3VycmVudCkgJiYgaXNQcmVzZW50KGN1cnJlbnQucm93KSAmJiBpc1ByZXNlbnQoY3VycmVudC5jb2wpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcm93OiAwLCBjb2w6IDAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmNsYW1wSW5kZXgoY3VycmVudC5yb3cgKyB2ZXJ0aWNhbFN0ZXAsIHRoaXMuY29sb3JSb3dzLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNsYW1wSW5kZXgoY3VycmVudC5jb2wgKyBob3Jpem9udGFsU3RlcCwgdGhpcy5jb2xvclJvd3Nbcm93XS5sZW5ndGggLSAxKTtcbiAgICAgICAgcmV0dXJuIHsgcm93LCBjb2wgfTtcbiAgICB9XG4gICAgY2xhbXBJbmRleChpbmRleCwgbWF4KSB7XG4gICAgICAgIGNvbnN0IG1pbkFycmF5SW5kZXggPSAwO1xuICAgICAgICBpZiAoaW5kZXggPCBtaW5BcnJheUluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbWluQXJyYXlJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPiBtYXgpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbkNvbG9yUGFsZXR0ZVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbmNvbnN0IERFRkFVTFRfVElMRV9TSVpFID0gMjQ7XG5jb25zdCBERUZBVUxUX0NPTFVNTlNfQ09VTlQgPSAxMDtcbmNvbnN0IERFRkFVTFRfUFJFU0VUJDEgPSAnb2ZmaWNlJztcbmNvbnN0IERFRkFVTFRfQUNDRVNTSUJMRV9QUkVTRVQkMSA9ICdhY2Nlc3NpYmxlJztcbmxldCBzZXJpYWwkMSA9IDA7XG4vKipcbiAqIFRoZSBDb2xvclBhbGV0dGUgY29tcG9uZW50IHByb3ZpZGVzIGEgc2V0IG9mIHByZWRlZmluZWQgcGFsZXR0ZSBwcmVzZXRzIGFuZCBlbmFibGVzIHlvdSB0byBpbXBsZW1lbnQgYSBjdXN0b20gY29sb3IgcGFsZXR0ZS5cbiAqIFRoZSBDb2xvclBhbGV0dGUgaXMgaW5kZXBlbmRlbnRseSB1c2VkIGJ5IGBrZW5kby1jb2xvcnBpY2tlcmAgYW5kIGNhbiBiZSBkaXJlY3RseSBhZGRlZCB0byB0aGUgcGFnZS5cbiAqL1xuY2xhc3MgQ29sb3JQYWxldHRlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlLCBsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gYGstY29sb3JwYWxldHRlLSR7c2VyaWFsJDErK31gO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBDb2xvclBhbGV0dGVDb21wb25lbnQuXG4gICAgICAgICAqIFRoZSBpbnB1dCB2YWx1ZSBtYXkgYmUgaW4gYSBkaWZmZXJlbnQgZm9ybWF0LiBIb3dldmVyLCBpdCB3aWxsIGJlIHBhcnNlZCBpbnRvIHRoZSBvdXRwdXQgYGZvcm1hdGBcbiAgICAgICAgICogYWZ0ZXIgdGhlIGNvbXBvbmVudCBwcm9jZXNzZXMgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYGhleGBcbiAgICAgICAgICogKiBgcmdiYWBcbiAgICAgICAgICogKiBgbmFtZWBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gJ2hleCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNpemUgb2YgYSBjb2xvciBjZWxsLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYHRpbGVTaXplID0gMjRgXG4gICAgICAgICAqICogYHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfWBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGlsZVNpemUgPSB7IHdpZHRoOiBERUZBVUxUX1RJTEVfU0laRSwgaGVpZ2h0OiBERUZBVUxUX1RJTEVfU0laRSB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBjb2xvciBzZWxlY3Rpb24gaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBzZWxlY3RzIGEgY2VsbCB3aXRoIHRoZSBtb3VzZSBvciBwcmVzc2VzIGBFbnRlcmAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaG9zdENsYXNzZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YWJpbmRleCA9IDA7XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkID0gKCkgPT4geyB9O1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBwYWxldHRlSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgY29sb3IuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gcGFyc2VDb2xvciQxKHZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICogRGVmYXVsdHMgdG8gYDEwYC5cbiAgICAgKi9cbiAgICBzZXQgY29sdW1ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBtaW5Db2x1bW5zQ291bnQgPSAxO1xuICAgICAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWUgPiBtaW5Db2x1bW5zQ291bnQgPyB2YWx1ZSA6IG1pbkNvbHVtbnNDb3VudDtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY29sb3IgcGFsZXR0ZSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOlxuICAgICAqICogVGhlIG5hbWUgb2YgdGhlIHByZWRlZmluZWQgcGFsZXR0ZSBwcmVzZXQgKGZvciBleGFtcGxlLCBgb2ZmaWNlYCwgYGJhc2ljYCwgYW5kIGBhcGV4YCkuXG4gICAgICogKiBBIHN0cmluZyB3aXRoIGNvbW1hLXNlcGFyYXRlZCBjb2xvcnMuXG4gICAgICogKiBBIHN0cmluZyBhcnJheS5cbiAgICAgKi9cbiAgICBzZXQgcGFsZXR0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gREVGQVVMVF9QUkVTRVQkMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1ByZXNlbnQoUEFMRVRURVBSRVNFVFNbdmFsdWVdKSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zIHx8IFBBTEVUVEVQUkVTRVRTW3ZhbHVlXS5jb2x1bW5zO1xuICAgICAgICAgICAgdmFsdWUgPSBQQUxFVFRFUFJFU0VUU1t2YWx1ZV0uY29sb3JzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSA/IHZhbHVlLnNwbGl0KCcsJykgOiB2YWx1ZTtcbiAgICAgICAgdGhpcy5fcGFsZXR0ZSA9IGNvbG9ycy5tYXAoY29sb3IgPT4gcGFyc2VDb2xvciQxKGNvbG9yLCB0aGlzLmZvcm1hdCwgZmFsc2UpKTtcbiAgICB9XG4gICAgZ2V0IHBhbGV0dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWxldHRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHNldCB0YWJpbmRleCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0YWJpbmRleCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMuX3RhYmluZGV4ID0gIWlzTmFOKHRhYmluZGV4KSA/IHRhYmluZGV4IDogZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBnZXQgdGFiaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCA/IHRoaXMuX3RhYmluZGV4IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHRpbGVMYXlvdXQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50aWxlU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbGVTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiB0aGlzLnRpbGVTaXplLCBoZWlnaHQ6IHRoaXMudGlsZVNpemUgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2xvclJvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuY29sb3JSb3dzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RUYWJpbmRleCgpIHsgcmV0dXJuIHRoaXMudGFiaW5kZXg7IH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7IHJldHVybiB0aGlzLmRpc2FibGVkOyB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbG9yUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRQcmVzZXQgPSAodGhpcy5mb3JtYXQgIT09ICduYW1lJykgPyBERUZBVUxUX1BSRVNFVCQxIDogREVGQVVMVF9BQ0NFU1NJQkxFX1BSRVNFVCQxO1xuICAgICAgICAgICAgdGhpcy5wYWxldHRlID0gdGhpcy5wYWxldHRlIHx8IGRlZmF1bHRQcmVzZXQ7XG4gICAgICAgICAgICB0aGlzLnNldFJvd3MoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZENlbGwgPSB0aGlzLnNlcnZpY2UuZ2V0Q2VsbENvb3Jkc0Zvcih0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5wYWxldHRlIHx8IGNoYW5nZXMuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMucGFsZXR0ZSB8fCBjaGFuZ2VzLnZhbHVlIHx8IGNoYW5nZXMuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkQ2VsbCA9IHRoaXMuc2VydmljZS5nZXRDZWxsQ29vcmRzRm9yKHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlzUlRMID0gdGhpcy5kaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd0Rvd246XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsTmF2aWdhdGlvbigwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd1VwOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2VsbE5hdmlnYXRpb24oMCwgLTEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkFycm93UmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsTmF2aWdhdGlvbihpc1JUTCA/IC0xIDogMSwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuQXJyb3dMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2VsbE5hdmlnYXRpb24oaXNSVEwgPyAxIDogLTEsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkVudGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRW50ZXIoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlSG9zdEJsdXIoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVDZWxsU2VsZWN0aW9uKHZhbHVlLCBmb2N1c2VkQ2VsbCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNlZENlbGwgPSBmb2N1c2VkQ2VsbDtcbiAgICAgICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yJDEodmFsdWUsIHRoaXMuZm9ybWF0LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbi5lbWl0KHBhcnNlZENvbG9yKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHBhcnNlZENvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VkQ29sb3I7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocGFyc2VkQ29sb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlOZ0NoYW5nZWQocGFyc2VkQ29sb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gcGFyc2VkQ29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gcGFyc2VkQ29sb3I7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHBhcnNlZENvbG9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZm9jdXNlZENlbGwgPSB0aGlzLnNlcnZpY2UuZ2V0Q2VsbENvb3Jkc0Zvcih0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5ub3RpZnlOZ0NoYW5nZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBjb2xvciB2YWx1ZSBvZiB0aGUgQ29sb3JQYWxldHRlLlxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRDZWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldFJvd3MoKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMucGFsZXR0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMgfHwgREVGQVVMVF9DT0xVTU5TX0NPVU5UO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc2V0Q29sb3JNYXRyaXgodGhpcy5wYWxldHRlLCB0aGlzLmNvbHVtbnMpO1xuICAgIH1cbiAgICBoYW5kbGVDZWxsTmF2aWdhdGlvbihob3Jpem9udGFsU3RlcCwgdmVydGljYWxTdGVwKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkQ2VsbCA9IHRoaXMuc2VydmljZS5nZXROZXh0Q2VsbCh0aGlzLmZvY3VzZWRDZWxsLCBob3Jpem9udGFsU3RlcCwgdmVydGljYWxTdGVwKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZXJ2aWNlLmdldENvbG9yQXQodGhpcy5mb2N1c2VkQ2VsbCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVFbnRlcigpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5mb2N1c2VkQ2VsbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZENvbG9yID0gdGhpcy5zZXJ2aWNlLmdldENvbG9yQXQodGhpcy5mb2N1c2VkQ2VsbCk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2VsbFNlbGVjdGlvbihzZWxlY3RlZENvbG9yLCB0aGlzLmZvY3VzZWRDZWxsKTtcbiAgICB9XG59XG5Db2xvclBhbGV0dGVDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNvbG9ycGFsZXR0ZScsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2xvclBhbGV0dGVDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogS2VuZG9JbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbG9yUGFsZXR0ZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgQ29sb3JQYWxldHRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmNvbG9ycGFsZXR0ZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZFwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiay1wYWxldHRlIGstcmVzZXRcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiICpuZ0Zvcj1cImxldCByb3cgb2YgY29sb3JSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2xvciBvZiByb3c7IGxldCBjb2xJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1zZWxlY3RlZF09XCJmb2N1c2VkQ2VsbD8ucm93ID09PSByb3dJbmRleCAmJiBmb2N1c2VkQ2VsbD8uY29sID09PSBjb2xJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnZhbHVlXT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2VsbFNlbGVjdGlvbihjb2xvciwgeyByb3c6IHJvd0luZGV4LCBjb2w6IGNvbEluZGV4IH0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aWxlTGF5b3V0LndpZHRoICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aWxlTGF5b3V0LmhlaWdodCArICdweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiB0aWxlTGF5b3V0LndpZHRoICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sb3JQYWxldHRlQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29sb3JQYWxldHRlU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQ29sb3JQYWxldHRlQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgcGFsZXR0ZUlkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmlkJyxdIH1dLFxuICAgIGlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWxldHRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aWxlU2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0aW9uQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsU2VsZWN0aW9uOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaG9zdFRhYmluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnRhYmluZGV4JyxdIH1dLFxuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY29sb3JwYWxldHRlJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgaGFuZGxlS2V5ZG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleWRvd24nLCBbJyRldmVudCddLF0gfV0sXG4gICAgaGFuZGxlSG9zdEJsdXI6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydibHVyJyxdIH1dXG59O1xuXG5jb25zdCBERUZBVUxUX09VVFBVVF9GT1JNQVQgPSAncmdiYSc7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSAncmdiYSgyNTUsIDAsIDAsIDEpJztcbmxldCBzZXJpYWwkMiA9IDA7XG4vKipcbiAqIFRoZSBDb2xvckdyYWRpZW50IGNvbXBvbmVudCBlbmFibGVzIHNtb290aCBjb2xvciB0cmFuc2l0aW9ucyBhbmQgcHJvdmlkZXMgb3B0aW9ucyBmb3Igc2VsZWN0aW5nIHNwZWNpZmljIGNvbG9ycyBvdmVyIHRoZSBkcmFnIGhhbmRsZS5cbiAqIFRoZSBDb2xvckdyYWRpZW50IGlzIGluZGVwZW5kZW50bHkgdXNlZCBieSBga2VuZG8tY29sb3JwaWNrZXJgIGFuZCBjYW4gYmUgZGlyZWN0bHkgYWRkZWQgdG8gdGhlIHBhZ2UuXG4gKi9cbmNsYXNzIENvbG9yR3JhZGllbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIG5nWm9uZSwgcmVuZGVyZXIsIGNkciwgbG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3NlcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gYGstY29sb3JncmFkaWVudC0ke3NlcmlhbCQyKyt9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgYWxwaGEgc2xpZGVyIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBDb2xvckdyYWRpZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBDb2xvckdyYWRpZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENvbG9yR3JhZGllbnQgc2hvdWxkIGRpc3BsYXkgYSAnQ2xlYXIgY29sb3InIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBzZWxlY3RzIGEgbmV3IGNvbG9yLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYGh1ZWAsIGBzYXR1cmF0aW9uYCwgYHZhbHVlYCwgYW5kIGBhbHBoYWAgdmFsdWVzLlxuICAgICAgICAgKiBUaGUgdmFsdWVzIGFyZSBpbml0aWFsbHkgc2V0IGluIGBuZ09uSW5pdGAgb3IgaW4gYG5nT25DaGFuZ2VzYCBhbmQgYXJlXG4gICAgICAgICAqIHVwZGF0ZWQgb24gbW92aW5nIHRoZSBkcmFnIGhhbmRsZSBvciB0aGUgc2xpZGVycy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaHN2YSA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBDb2xvckdyYWRpZW50Q29tcG9uZW50LlxuICAgICAgICAgKiBUaGUgaW5wdXQgdmFsdWUgbWF5IGJlIGluIGEgZGlmZmVyZW50IGZvcm1hdC4gSG93ZXZlciwgaXQgd2lsbCBiZSBwYXJzZWQgaW50byB0aGUgb3V0cHV0IGBmb3JtYXRgXG4gICAgICAgICAqIGFmdGVyIHRoZSBjb21wb25lbnQgcHJvY2Vzc2VzIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogKERlZmF1bHQpIGByZ2JhYFxuICAgICAgICAgKiAqIGBoZXhgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcm1hdCA9IERFRkFVTFRfT1VUUFVUX0ZPUk1BVDtcbiAgICAgICAgdGhpcy5fdGFiaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgICAgICAgdGhpcy5ub3RpZnlOZ1RvdWNoZWQgPSAoKSA9PiB7IH07XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IGxvY2FsaXphdGlvblNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IGhvc3RUYWJpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZ3JhZGllbnRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIGluaXRpYWxseSBzZWxlY3RlZCBjb2xvci5cbiAgICAgKi9cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBwYXJzZUNvbG9yJDEodmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgW2B0YWJpbmRleGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgpIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgc2V0IHRhYmluZGV4KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHRhYmluZGV4ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5fdGFiaW5kZXggPSAhaXNOYU4odGFiaW5kZXgpID8gdGFiaW5kZXggOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGdldCB0YWJpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpc2FibGVkID8gdGhpcy5fdGFiaW5kZXggOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBDb2xvckdyYWRpZW50IG9yIGFueSBvZiBpdHMgY29udGVudCBpcyBmb2N1c2VkLlxuICAgICAqL1xuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIGlmICghKGlzRG9jdW1lbnRBdmFpbGFibGUoKSAmJiBpc1ByZXNlbnQodGhpcy5ob3N0KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYWxwaGFTbGlkZXJWYWx1ZSgpIHtcbiAgICAgICAgLy8gc2V0dGluZyB0aGUgaW5pdGlhbCB2YWx1ZSB0byB1bmRlZmluZWQgdG8gZm9yY2UgdGhlIHNsaWRlciB0byByZWNhbGN1bGF0ZSB0aGUgaGVpZ2h0IG9mIHRoZSBzbGlkZXIgdHJhY2sgb24gdGhlIG5leHQgY2RyIHJ1blxuICAgICAgICBpZiAoIShpc1ByZXNlbnQodGhpcy5oc3ZhKSAmJiBpc1ByZXNlbnQodGhpcy5oc3ZhLmEpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhzdmEuYSAqIDEwMDtcbiAgICB9XG4gICAgZ2V0IGdyYWRpZW50UmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhZGllbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVVSSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKCd2YWx1ZScsIGNoYW5nZXMpICYmICF0aGlzLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVSSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKHJlbW92ZUxpc3RlbmVyID0+IHJlbW92ZUxpc3RlbmVyKCkpO1xuICAgICAgICBpZiAodGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMudXBkYXRlVUkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZURyYWdQcmVzcyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgIWlzUHJlc2VudChhcmdzLm9yaWdpbmFsRXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICBhcmdzLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uSGFuZGxlRHJhZyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZ3JhZGllbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLWRyYWdnaW5nJyk7XG4gICAgICAgIHRoaXMuY2hhbmdlUG9zaXRpb24oYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkhhbmRsZVJlbGVhc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZ3JhZGllbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLWRyYWdnaW5nJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjaGFuZ2VQb3NpdGlvbihwb3NpdGlvbikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubW92ZURyYWdIYW5kbGUocG9zaXRpb24pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUh1ZVNsaWRlckNoYW5nZShodWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZShnZXRDb2xvckZyb21IU1YodGhpcy5oc3ZhKSk7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gZ2V0Q29sb3JGcm9tSHVlKGh1ZSk7XG4gICAgICAgIHRoaXMuc2V0QWxwaGFTbGlkZXJCYWNrZ3JvdW5kKHRoaXMuYmFja2dyb3VuZENvbG9yKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUFscGhhU2xpZGVyQ2hhbmdlKGFscGhhKSB7XG4gICAgICAgIHRoaXMuaHN2YS5hID0gYWxwaGEgLyAxMDA7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoZ2V0Q29sb3JGcm9tSFNWKHRoaXMuaHN2YSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlSW5wdXRzVmFsdWVDaGFuZ2UoY29sb3IpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb2xvciQxKGNvbG9yLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBwYXJzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UocGFyc2VkKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVUkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5ncmFkaWVudFdyYXBwZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVJKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5ub3RpZnlOZ0NoYW5nZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMubm90aWZ5TmdUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbW92ZURyYWdIYW5kbGUocG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gcG9zaXRpb24uY2xpZW50WCAtIHRoaXMuZ3JhZGllbnRSZWN0LmxlZnQ7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IHBvc2l0aW9uLmNsaWVudFkgLSB0aGlzLmdyYWRpZW50UmVjdC50b3A7XG4gICAgICAgIGNvbnN0IHRvcCA9IGZpdEludG9Cb3VuZHMoZGVsdGFZLCAwLCB0aGlzLmdyYWRpZW50UmVjdC5oZWlnaHQpO1xuICAgICAgICBjb25zdCBsZWZ0ID0gZml0SW50b0JvdW5kcyhkZWx0YVgsIDAsIHRoaXMuZ3JhZGllbnRSZWN0LndpZHRoKTtcbiAgICAgICAgdGhpcy5zZXREcmFnSGFuZGxlRWxlbWVudFBvc2l0aW9uKHRvcCwgbGVmdCk7XG4gICAgICAgIHRoaXMuaHN2YS5zID0gbGVmdCAvIHRoaXMuZ3JhZGllbnRSZWN0LndpZHRoO1xuICAgICAgICB0aGlzLmhzdmEudiA9IDEgLSB0b3AgLyB0aGlzLmdyYWRpZW50UmVjdC5oZWlnaHQ7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoZ2V0Q29sb3JGcm9tSFNWKHRoaXMuaHN2YSkpO1xuICAgICAgICB0aGlzLnNldEFscGhhU2xpZGVyQmFja2dyb3VuZChnZXRDb2xvckZyb21IU1YoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5oc3ZhLCB7IGE6IDEgfSkpKTtcbiAgICB9XG4gICAgdXBkYXRlVUkoKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oc3ZhID0gdGhpcy52YWx1ZSA/IGdldEhTVih0aGlzLnZhbHVlKSA6IHsgaDogMCwgczogMCwgdjogMSwgYTogMSB9O1xuICAgICAgICBjb25zdCB0b3AgPSAoMSAtIHRoaXMuaHN2YS52KSAqIHRoaXMuZ3JhZGllbnRSZWN0LmhlaWdodDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuaHN2YS5zICogdGhpcy5ncmFkaWVudFJlY3Qud2lkdGg7XG4gICAgICAgIHRoaXMuc2V0RHJhZ0hhbmRsZUVsZW1lbnRQb3NpdGlvbih0b3AsIGxlZnQpO1xuICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGdldENvbG9yRnJvbUh1ZSh0aGlzLmhzdmEuaCk7XG4gICAgICAgIHRoaXMuc2V0QWxwaGFTbGlkZXJCYWNrZ3JvdW5kKHRoaXMuYmFja2dyb3VuZENvbG9yKTtcbiAgICB9XG4gICAgaGFuZGxlVmFsdWVDaGFuZ2UoY29sb3IpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IGNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY29sb3IpO1xuICAgICAgICB0aGlzLm5vdGlmeU5nQ2hhbmdlZChjb2xvcik7XG4gICAgfVxuICAgIHNldERyYWdIYW5kbGVFbGVtZW50UG9zaXRpb24odG9wLCBsZWZ0KSB7XG4gICAgICAgIGNvbnN0IGRyYWdIYW5kbGUgPSB0aGlzLmRyYWdIYW5kbGUubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkcmFnSGFuZGxlLCAndG9wJywgYCR7dG9wfXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZHJhZ0hhbmRsZSwgJ2xlZnQnLCBgJHtsZWZ0fXB4YCk7XG4gICAgfVxuICAgIHNldEFscGhhU2xpZGVyQmFja2dyb3VuZChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5hbHBoYVNsaWRlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbGlkZXJUcmFjayA9IHRoaXMuYWxwaGFTbGlkZXIudHJhY2submF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzbGlkZXJUcmFjaywgJ2JhY2tncm91bmQnLCBgbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgdHJhbnNwYXJlbnQsICR7YmFja2dyb3VuZENvbG9yfSlgKTtcbiAgICB9XG4gICAgYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzT3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJ2ZvY3Vzb3V0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250YWluc0ZvY3VzKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCBldmVudC5yZWxhdGVkVGFyZ2V0KSAmJiBpc1VudG91Y2hlZCh0aGlzLmhvc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm5vdGlmeU5nVG91Y2hlZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2goZm9jdXNPdXRMaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkNvbG9yR3JhZGllbnRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNvbG9yZ3JhZGllbnQnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2xvckdyYWRpZW50Q29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBLZW5kb0lucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29sb3JHcmFkaWVudENvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmNvbG9yZ3JhZGllbnQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWhib3ggay1oc3Ytd3JhcFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstaHN2LXJlY3RhbmdsZVwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2dyYWRpZW50V3JhcHBlclxuICAgICAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstaHN2LWdyYWRpZW50XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBvc2l0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9QcmVzcyk9XCJoYW5kbGVEcmFnUHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZW5kb0RyYWcpPVwib25IYW5kbGVEcmFnKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2VuZG9SZWxlYXNlKT1cIm9uSGFuZGxlUmVsZWFzZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZHJhZ2hhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWhib3ggay1zbGlkZXJzLXdyYXAge3sgY2xlYXJCdXR0b24gPyAnay1zbGlkZXJzLXdyYXAtY2xlYXJhYmxlJyA6ICcnIH19XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWNsZWFyLWNvbG9yIGstYnV0dG9uIGstYmFyZSBrLWJ1dHRvbi1pY29uXCIgKm5nSWY9XCJjbGVhckJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1yZXNldC1jb2xvclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGtlbmRvLXNsaWRlclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstaHVlLXNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aWNrUGxhY2VtZW50XT1cIidub25lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCIzNjBcIlxuICAgICAgICAgICAgICAgICAgICBbc21hbGxTdGVwXT1cIjVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFyZ2VTdGVwXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiaHN2YS5oXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUh1ZVNsaWRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9rZW5kby1zbGlkZXI+XG4gICAgICAgICAgICAgICAgPGtlbmRvLXNsaWRlclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wYWNpdHkgJiYgZm9ybWF0ID09PSAncmdiYSdcIlxuICAgICAgICAgICAgICAgICAgICAjYWxwaGFTbGlkZXJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWFscGhhLXNsaWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aWNrUGxhY2VtZW50XT1cIidub25lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICBbc21hbGxTdGVwXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbbGFyZ2VTdGVwXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFscGhhU2xpZGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQWxwaGFTbGlkZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tc2xpZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8a2VuZG8tY29sb3JpbnB1dFxuICAgICAgICAgICAgW29wYWNpdHldPVwib3BhY2l0eVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlSW5wdXRzVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9rZW5kby1jb2xvcmlucHV0PlxuYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2xvckdyYWRpZW50Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5Db2xvckdyYWRpZW50Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmxhdGNvbG9ycGlja2VyJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgaG9zdFRhYmluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnRhYmluZGV4JyxdIH1dLFxuICAgIGdyYWRpZW50SWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuaWQnLF0gfV0sXG4gICAgaWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgb3BhY2l0eTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbGVhckJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWxwaGFTbGlkZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydhbHBoYVNsaWRlcicsXSB9XSxcbiAgICBncmFkaWVudFdyYXBwZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydncmFkaWVudFdyYXBwZXInLF0gfV0sXG4gICAgZHJhZ0hhbmRsZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2RyYWdIYW5kbGUnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2xvcklucHV0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihob3N0KSB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGFscGhhIHNsaWRlciB3aWxsIGJlIHNob3duLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGFjaXR5ID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBDb2xvcklucHV0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBDb2xvcklucHV0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRW1pdHMgYSBwYXJzZWQgcmdiYSBzdHJpbmcgY29sb3IuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbG9ySW5wdXRDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgcmdiYSBpbnB1dHMgdmFsdWVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZ2JhID0ge307XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGFueSBvZiB0aGUgaW5wdXRzIGFyZSBmb2N1c2VkLlxuICAgICAqL1xuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIGlmICghKGlzRG9jdW1lbnRBdmFpbGFibGUoKSAmJiBpc1ByZXNlbnQodGhpcy5ob3N0KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlIHJnYmEgaW5wdXRzIGhhdmUgdmFsdWUuXG4gICAgICovXG4gICAgZ2V0IHJnYmFJbnB1dFZhbGlkKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5yZ2JhKS5ldmVyeShrZXkgPT4gaXNQcmVzZW50KHRoaXMucmdiYVtrZXldKSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudChjaGFuZ2VzLnZhbHVlKSAmJiAhdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaGV4ID0gcGFyc2VDb2xvciQxKHRoaXMudmFsdWUsICdoZXgnKTtcbiAgICAgICAgICAgIHRoaXMucmdiYSA9IGdldFJHQkEodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJnYmEuYSA9IHBhcnNlQ29sb3IkMSh0aGlzLnZhbHVlLCAncmdiYScpID8gdGhpcy5yZ2JhLmEgOiAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVJnYmFWYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvckZyb21SR0JBKHRoaXMucmdiYSk7XG4gICAgICAgIGlmICghdGhpcy5yZ2JhSW5wdXRWYWxpZCB8fCBjb2xvciA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5yZ2JhID0gZ2V0UkdCQSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5oZXggPSBwYXJzZUNvbG9yJDEoY29sb3IsICdoZXgnKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNvbG9yKTtcbiAgICB9XG4gICAgaGFuZGxlSGV4VmFsdWVDaGFuZ2UoaGV4KSB7XG4gICAgICAgIHRoaXMuaGV4ID0gaGV4O1xuICAgICAgICBjb25zdCBjb2xvciA9IHBhcnNlQ29sb3IkMShoZXgsICdyZ2JhJyk7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGNvbG9yKSB8fCBjb2xvciA9PT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBjb2xvcjtcbiAgICAgICAgdGhpcy5yZ2JhID0gZ2V0UkdCQShjb2xvcik7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjb2xvcik7XG4gICAgfVxuICAgIGhhbmRsZVJnYmFJbnB1dEJsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5yZ2JhSW5wdXRWYWxpZCkge1xuICAgICAgICAgICAgdGhpcy5yZ2JhID0gZ2V0UkdCQSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVIZXhJbnB1dEJsdXIoKSB7XG4gICAgICAgIHRoaXMuaGV4ID0gcGFyc2VDb2xvciQxKHRoaXMudmFsdWUsICdoZXgnKTtcbiAgICB9XG59XG5Db2xvcklucHV0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jb2xvcmlucHV0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1oYm94IGstZ3JhZGllbnQtdmFsdWVzXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjaGV4SW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstdGV4dGJveCBrLWhleC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoZXggfHwgJydcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibm8gY29sb3JcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUhleElucHV0Qmx1cigpXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSGV4VmFsdWVDaGFuZ2UoaGV4SW5wdXQudmFsdWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3hcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIjI1NVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSXCJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJyZ2JhLnJcIlxuICAgICAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3Bpbm5lcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiJ24nXCJcbiAgICAgICAgICAgICAgICBbZGVjaW1hbHNdPVwiMFwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlUmdiYUlucHV0Qmx1cigpXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlUmdiYVZhbHVlQ2hhbmdlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1udW1lcmljdGV4dGJveD5cbiAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveFxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiMjU1XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkdcIlxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInJnYmEuZ1wiXG4gICAgICAgICAgICAgICAgW2F1dG9Db3JyZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzcGlubmVyc109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCInbidcIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCIwXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVSZ2JhSW5wdXRCbHVyKClcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVSZ2JhVmFsdWVDaGFuZ2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxuICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgW21heF09XCIyNTVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQlwiXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicmdiYS5iXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvcnJlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NwaW5uZXJzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cIiduJ1wiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cIjBcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZVJnYmFJbnB1dEJsdXIoKVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVJnYmFWYWx1ZUNoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XG4gICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3hcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9wYWNpdHlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiMVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBXCJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJyZ2JhLmFcIlxuICAgICAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3Bpbm5lcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cIjAuMDFcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiJ24yJ1wiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cIjJcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZVJnYmFJbnB1dEJsdXIoKVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVJnYmFWYWx1ZUNoYW5nZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1oYm94IGstZ3JhZGllbnQtdmFsdWVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1oZXgtdmFsdWVcIj5oZXg8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+cjwvZGl2PlxuICAgICAgICAgICAgPGRpdj5nPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PmI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGFjaXR5XCI+YTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbG9ySW5wdXRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5Db2xvcklucHV0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGFjaXR5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sb3JJbnB1dENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNvbG9yaW5wdXRzJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRm9jdXNPbkRvbVJlYWR5RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcihob3N0LCBuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5mb2N1c09uTmV4dFRpY2soKTtcbiAgICB9XG4gICAgZm9jdXNPbk5leHRUaWNrKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKTtcbiAgICB9XG59XG5Gb2N1c09uRG9tUmVhZHlEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0ZvY3VzT25Eb21SZWFkeV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZvY3VzT25Eb21SZWFkeURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuXG5jb25zdCBQVUJMSUNfRElSRUNUSVZFUyA9IFtcbiAgICBDb2xvclBpY2tlckNvbXBvbmVudCxcbiAgICBDb2xvclBhbGV0dGVDb21wb25lbnQsXG4gICAgQ29sb3JHcmFkaWVudENvbXBvbmVudFxuXTtcbmNvbnN0IElOVEVSTkFMX0RJUkVDVElWRVMgPSBbXG4gICAgQ29sb3JJbnB1dENvbXBvbmVudCxcbiAgICBGb2N1c09uRG9tUmVhZHlEaXJlY3RpdmVcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBDb2xvclBpY2tlci5cbiAqL1xuY2xhc3MgQ29sb3JQaWNrZXJNb2R1bGUge1xufVxuQ29sb3JQaWNrZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBQVUJMSUNfRElSRUNUSVZFUyxcbiAgICAgICAgICAgICAgICAgICAgSU5URVJOQUxfRElSRUNUSVZFU1xuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1BVQkxJQ19ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgTnVtZXJpY1RleHRCb3hNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUG9wdXBNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIERyYWdnYWJsZU1vZHVsZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkaXJlY3RpdmUgdGhhdCByZW5kZXJzIHRoZSBbS2VuZG8gVUkgQ2hlY2tCb3hdKHslIHNsdWcgb3ZlcnZpZXdfY2hlY2tib3ggJX0pIGlucHV0IGNvbXBvbmVudC5cbiAqIFRoZSBkaXJlY3RpdmUgaXMgcGxhY2VkIG9uIGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGVsZW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBrZW5kb0NoZWNrQm94IC8+XG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2hlY2tCb3hEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmtlbmRvQ2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cbkNoZWNrQm94RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdpbnB1dFtrZW5kb0NoZWNrQm94XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNoZWNrQm94RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGtlbmRvQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hlY2tib3gnLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIENoZWNrQm94IGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBDaGVja0JveCBtb2R1bGVcbiAqIGltcG9ydCB7IENoZWNrQm94TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgQ2hlY2tCb3hNb2R1bGVdLCAvLyBpbXBvcnQgQ2hlY2tCb3ggbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDaGVja0JveE1vZHVsZSB7XG59XG5DaGVja0JveE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQ2hlY2tCb3hEaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtDaGVja0JveERpcmVjdGl2ZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkaXJlY3RpdmUgdGhhdCByZW5kZXJzIHRoZSBbS2VuZG8gVUkgUmFkaW9CdXR0b25dKHslIHNsdWcgb3ZlcnZpZXdfY2hlY2tib3ggJX0pIGlucHV0IGNvbXBvbmVudC5cbiAqIFRoZSBkaXJlY3RpdmUgaXMgcGxhY2VkIG9uIGlucHV0IHR5cGU9XCJyYWRpb1wiIGVsZW1lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBrZW5kb1JhZGlvQnV0dG9uIC8+XG4gKiBgYGBcbiAqL1xuY2xhc3MgUmFkaW9CdXR0b25EaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmtlbmRvQ2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cblJhZGlvQnV0dG9uRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdpbnB1dFtrZW5kb1JhZGlvQnV0dG9uXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblJhZGlvQnV0dG9uRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGtlbmRvQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstcmFkaW8nLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIFJhZGlvQnV0dG9uIGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBSYWRpb0J1dHRvbiBtb2R1bGVcbiAqIGltcG9ydCB7IFJhZGlvQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgUmFkaW9CdXR0b25Nb2R1bGVdLCAvLyBpbXBvcnQgUmFkaW9CdXR0b24gbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBSYWRpb0J1dHRvbk1vZHVsZSB7XG59XG5SYWRpb0J1dHRvbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbUmFkaW9CdXR0b25EaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtSYWRpb0J1dHRvbkRpcmVjdGl2ZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxubGV0IHNlcmlhbCQzID0gMDtcbi8qKlxuICogUmVwcmVzZW50cyBhbiBlcnJvciBtZXNzYWdlIHRoYXQgd2lsbCBiZSBzaG93biB1bmRlcm5lYXRoXG4gKiBhIEtlbmRvIGNvbnRyb2wgb3IgbmF0aXZlIEhUTUwgZm9ybS1ib3VuZCBjb21wb25lbnQgYWZ0ZXIgYSB2YWxpZGF0aW9uLlxuICovXG5jbGFzcyBFcnJvckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBFcnJvciBtZXNzYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYHN0YXJ0YFxuICAgICAgICAgKiAqIGBlbmRgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFsaWduID0gJ3N0YXJ0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWQgPSBga2VuZG8tZXJyb3ItJHtzZXJpYWwkMysrfWA7XG4gICAgICAgIHRoaXMucm9sZUF0dHJpYnV0ZSA9ICdhbGVydCc7XG4gICAgfVxuICAgIGdldCBzdGFydENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGlnbiA9PT0gJ3N0YXJ0JztcbiAgICB9XG4gICAgZ2V0IGVuZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGlnbiA9PT0gJ2VuZCc7XG4gICAgfVxuICAgIGdldCBpZEF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxufVxuRXJyb3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZvcm1lcnJvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkVycm9yQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1mb3JtLWVycm9yJyxdIH1dLFxuICAgIGFsaWduOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb2xlQXR0cmlidXRlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgc3RhcnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10ZXh0LXN0YXJ0JyxdIH1dLFxuICAgIGVuZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRleHQtZW5kJyxdIH1dLFxuICAgIGlkQXR0cmlidXRlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmlkJyxdIH1dXG59O1xuXG5sZXQgc2VyaWFsJDQgPSAwO1xuLyoqXG4gKiBSZXByZXNlbnRzIGEgaGludCBtZXNzYWdlIHRoYXQgd2lsbCBiZSBzaG93biB1bmRlcm5lYXRoIGEgZm9ybS1ib3VuZCBjb21wb25lbnQuXG4gKi9cbmNsYXNzIEhpbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIEhpbnQgbWVzc2FnZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogKERlZmF1bHQpIGBzdGFydGBcbiAgICAgICAgICogKiBgZW5kYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbGlnbiA9ICdzdGFydCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gYGtlbmRvLWhpbnQtJHtzZXJpYWwkNCsrfWA7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXJ0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsaWduID09PSAnc3RhcnQnO1xuICAgIH1cbiAgICBnZXQgZW5kQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsaWduID09PSAnZW5kJztcbiAgICB9XG4gICAgZ2V0IGlkQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZDtcbiAgICB9XG59XG5IaW50Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1mb3JtaGludCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkhpbnRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYWxpZ246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1mb3JtLWhpbnQnLF0gfV0sXG4gICAgc3RhcnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10ZXh0LXN0YXJ0JyxdIH1dLFxuICAgIGVuZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRleHQtZW5kJyxdIH1dLFxuICAgIGlkQXR0cmlidXRlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmlkJyxdIH1dXG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIGNvbnRhaW5lciBmb3IgZm9ybS1ib3VuZCBjb250cm9scyAoS2VuZG8gY29udHJvbHMgb3IgbmF0aXZlIEhUTUwgY29udHJvbHMpLlxuICogQXBwbGllcyBzdHlsaW5nIGFuZCBiZWhhdmlvciBydWxlcy5cbiAqL1xuY2xhc3MgRm9ybUZpZWxkQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlciwgbG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZSA9IGxvY2FsaXphdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGVuIHRoZSBIaW50IG1lc3NhZ2VzIHdpbGwgYmUgc2hvd24uXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIChEZWZhdWx0KSBgaW5pdGlhbGAmbWRhc2g7QWxsb3dzIGRpc3BsYXlpbmcgaGludHMgd2hlbiB0aGUgZm9ybS1ib3VuZCBjb21wb25lbnQgc3RhdGUgaXNcbiAgICAgICAgICogYHZhbGlkYCBvciBgdW50b3VjaGVkYCBhbmQgYHByaXN0aW5lYC5cbiAgICAgICAgICogKiBgYWx3YXlzYCZtZGFzaDtBbGxvd3MgZnVsbCBjb250cm9sIG92ZXIgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhpbnRzLlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zaG93SGludHMgPSAnaW5pdGlhbCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGxheW91dCBvcmllbnRhdGlvbiBvZiB0aGUgZm9ybSBmaWVsZC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYHZlcnRpY2FsYFxuICAgICAgICAgKiAqIGBob3Jpem9udGFsYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hlbiB0aGUgRXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBzaG93bi5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqXG4gICAgICAgICAqICogKERlZmF1bHQpIGBpbml0aWFsYCZtZGFzaDtBbGxvd3MgZGlzcGxheWluZyBlcnJvcnMgd2hlbiB0aGUgZm9ybS1ib3VuZCBjb21wb25lbnQgc3RhdGUgaXNcbiAgICAgICAgICogYGludmFsaWRgIGFuZCBgdG91Y2hlZGAgb3IgYGRpcnR5YC5cbiAgICAgICAgICogKiBgYWx3YXlzYCZtZGFzaDtBbGxvd3MgZnVsbCBjb250cm9sIG92ZXIgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGVycm9ycy5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2hvd0Vycm9ycyA9ICdpbml0aWFsJztcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnJ0bCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ydGwgPSBydGw7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBnZXQgZXJyb3JDbGFzcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLmludmFsaWQgJiYgKHRoaXMuY29udHJvbC50b3VjaGVkIHx8IHRoaXMuY29udHJvbC5kaXJ0eSk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJhZGlvYnV0dG9uIGdyb3VwXG4gICAgICAgIGlmICh0aGlzLmlzUmFkaW9Db250cm9sKHRoaXMuY29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZENvbnRyb2woKSB8fFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEVsZW1lbnQoKSB8fFxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEtlbmRvSW5wdXQoKTtcbiAgICB9XG4gICAgc2V0IGZvcm1Db250cm9scyhmb3JtQ29udHJvbHMpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZvcm1Db250cm9sKGZvcm1Db250cm9scyk7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IGZvcm1Db250cm9scy5maXJzdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0hpbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93SGludHMgPT09ICdhbHdheXMnID8gdHJ1ZSA6IHRoaXMuc2hvd0hpbnRzSW5pdGlhbCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0Vycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9ycyA9PT0gJ2Fsd2F5cycgPyB0cnVlIDogdGhpcy5zaG93RXJyb3JzSW5pdGlhbCgpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBkaXNhYmxlZEtlbmRvSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmtlbmRvSW5wdXQgJiYgdGhpcy5rZW5kb0lucHV0LmRpc2FibGVkO1xuICAgIH1cbiAgICBkaXNhYmxlZENvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGRpc2FibGVkRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmNvbnRyb2xFbGVtZW50UmVmcy50b0FycmF5KCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5ldmVyeShlID0+IGUubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgIH1cbiAgICB2YWxpZGF0ZUZvcm1Db250cm9sKGZvcm1Db250cm9scykge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgZm9ybUNvbnRyb2xzLmxlbmd0aCAhPT0gMSAmJiAhdGhpcy5pc0NvbnRyb2xHcm91cChmb3JtQ29udHJvbHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBga2VuZG8tZm9ybWZpZWxkYCBjb21wb25lbnQgc2hvdWxkIGNvbnRhaW4gJyArXG4gICAgICAgICAgICAgICAgJ29ubHkgb25lIGNvbnRyb2wgb2YgdHlwZSBOZ0NvbnRyb2wgd2l0aCBhIGZvcm1Db250cm9sTmFtZShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0Zvcm1Db250cm9sTmFtZSknICtcbiAgICAgICAgICAgICAgICAnb3IgYW4gbmdNb2RlbChodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL05nTW9kZWwpIGJpbmRpbmcuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNDb250cm9sR3JvdXAoZm9ybUNvbnRyb2xzKSB7XG4gICAgICAgIGlmICghZm9ybUNvbnRyb2xzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmb3JtQ29udHJvbHMuZmlyc3QubmFtZTtcbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9scy50b0FycmF5KCkuZXZlcnkoYyA9PiBjLm5hbWUgPT09IG5hbWUgJiYgKHRoaXMuaXNSYWRpb0NvbnRyb2woYykpKTtcbiAgICB9XG4gICAgaXNSYWRpb0NvbnRyb2woY29udHJvbCkge1xuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgUmFkaW9Db250cm9sVmFsdWVBY2Nlc3NvcjtcbiAgICB9XG4gICAgdXBkYXRlRGVzY3JpcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5maW5kQ29udHJvbEVsZW1lbnRzKCk7XG4gICAgICAgIGlmICghY29udHJvbHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmlhSWRzID0gdGhpcy5nZW5lcmF0ZURlc2NyaXB0aW9uSWRzKGNvbnRyb2wpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoY29udHJvbCwgJ2FyaWEtZGVzY3JpYmVkYnknLCBhcmlhSWRzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbmRDb250cm9sRWxlbWVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sRWxlbWVudFJlZnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgY29udHJvbCBpcyBLZW5kb0lucHV0IGFuZCBoYXMgZm9jdXNhYmxlSWQgLSBkcm9wZG93bnMsIGRhdGVpbnB1dHNcbiAgICAgICAgaWYgKHRoaXMua2VuZG9JbnB1dCAmJiB0aGlzLmtlbmRvSW5wdXQuZm9jdXNhYmxlSWQgJiYgaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMua2VuZG9JbnB1dC5mb2N1c2FibGVJZCldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xFbGVtZW50UmVmcy5tYXAoZWwgPT4gZWwubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIGdlbmVyYXRlRGVzY3JpcHRpb25JZHMoY29udHJvbCkge1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmIChjb250cm9sLmhhc0F0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gY29udHJvbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHIuaW5jbHVkZXMoJ2tlbmRvLWhpbnQtJykgfHwgYXR0ci5pbmNsdWRlcygna2VuZG8tZXJyb3ItJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZHMuYWRkKGF0dHIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaW50Q2hpbGRyZW4uZm9yRWFjaCgoaGludCkgPT4ge1xuICAgICAgICAgICAgaWRzLmFkZChoaW50LmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXJyb3JDaGlsZHJlbi5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWRzLmFkZChlcnJvci5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpZHMpLmpvaW4oJyAnKTtcbiAgICB9XG4gICAgc2hvd0hpbnRzSW5pdGlhbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHVudG91Y2hlZCwgcHJpc3RpbmUgfSA9IHRoaXMuY29udHJvbDtcbiAgICAgICAgcmV0dXJuIHZhbGlkIHx8ICh1bnRvdWNoZWQgJiYgcHJpc3RpbmUpO1xuICAgIH1cbiAgICBzaG93RXJyb3JzSW5pdGlhbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGludmFsaWQsIGRpcnR5LCB0b3VjaGVkIH0gPSB0aGlzLmNvbnRyb2w7XG4gICAgICAgIHJldHVybiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKTtcbiAgICB9XG4gICAgc2V0RGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGVzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmVycm9yQ2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVEZXNjcmlwdGlvbigpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5oaW50Q2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVEZXNjcmlwdGlvbigpKSk7XG4gICAgfVxufVxuRm9ybUZpZWxkQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1mb3JtZmllbGQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImxhYmVsLCBrZW5kby1sYWJlbFwiPjwvbmctY29udGVudD5cbiAgICAgICAgPGRpdiBbY2xhc3Muay1mb3JtLWZpZWxkLXdyYXBdPVwiaG9yaXpvbnRhbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tZm9ybWhpbnRcIiAqbmdJZj1cImhhc0hpbnRzXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tZm9ybWVycm9yXCIgKm5nSWY9XCJoYXNFcnJvcnNcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5mb3JtZmllbGQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZvcm1GaWVsZENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuRm9ybUZpZWxkQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1mb3JtLWZpZWxkJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgZXJyb3JDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1mb3JtLWZpZWxkLWVycm9yJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZm9ybS1maWVsZC1kaXNhYmxlZCcsXSB9XSxcbiAgICBmb3JtQ29udHJvbHM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW05nQ29udHJvbCwgeyBkZXNjZW5kYW50czogdHJ1ZSwgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjb250cm9sRWxlbWVudFJlZnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW05nQ29udHJvbCwgeyByZWFkOiBFbGVtZW50UmVmLCBkZXNjZW5kYW50czogdHJ1ZSwgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBrZW5kb0lucHV0OiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtLZW5kb0lucHV0LCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgZXJyb3JDaGlsZHJlbjogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbRXJyb3JDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUsIHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgaGludENoaWxkcmVuOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtIaW50Q29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlLCBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHNob3dIaW50czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3JpZW50YXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dFcnJvcnM6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBGb3JtRmllbGQsIEVycm9yIGFuZCBIaW50IGNvbXBvbmVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgRm9ybUZpZWxkIG1vZHVsZVxuICogaW1wb3J0IHsgRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRm9ybUZpZWxkTW9kdWxlXSwgLy8gaW1wb3J0IEZvcm1GaWVsZCBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEZvcm1GaWVsZE1vZHVsZSB7XG59XG5Gb3JtRmllbGRNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0hpbnRDb21wb25lbnQsIEVycm9yQ29tcG9uZW50LCBGb3JtRmllbGRDb21wb25lbnRdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtIaW50Q29tcG9uZW50LCBFcnJvckNvbXBvbmVudCwgRm9ybUZpZWxkQ29tcG9uZW50XSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBJbnB1dHMgY29tcG9uZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBJbnB1dHMgbW9kdWxlXG4gKiBpbXBvcnQgeyBJbnB1dHNNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKiBpbXBvcnQgeyBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBCcm93c2VyQW5pbWF0aW9uc01vZHVsZSwgSW5wdXRzTW9kdWxlXSwgLy8gaW1wb3J0IElucHV0cyBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIElucHV0c01vZHVsZSB7XG59XG5JbnB1dHNNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtUZXh0Qm94TW9kdWxlLCBTbGlkZXJNb2R1bGUsIFJhbmdlU2xpZGVyTW9kdWxlLCBTd2l0Y2hNb2R1bGUsIE51bWVyaWNUZXh0Qm94TW9kdWxlLCBNYXNrZWRUZXh0Qm94TW9kdWxlLCBDb2xvclBpY2tlck1vZHVsZSwgQ2hlY2tCb3hNb2R1bGUsIFJhZGlvQnV0dG9uTW9kdWxlLCBGb3JtRmllbGRNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0IHsgQ2hlY2tCb3hNb2R1bGUsIENvbG9ySW5wdXRDb21wb25lbnQsIEZvY3VzT25Eb21SZWFkeURpcmVjdGl2ZSwgQ29sb3JQYWxldHRlU2VydmljZSwgTWFza2luZ1NlcnZpY2UsIE51bWVyaWNUZXh0Qm94TWVzc2FnZXMsIFJhZGlvQnV0dG9uTW9kdWxlLCBSYW5nZVNsaWRlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBSYW5nZVNsaWRlck1lc3NhZ2VzLCBTbGlkZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgU2xpZGVyTWVzc2FnZXMsIFNsaWRlckJhc2UsIFNsaWRlcnNDb21tb25Nb2R1bGUsIFN3aXRjaEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBNZXNzYWdlcywgVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBMb2NhbGl6ZWRUZXh0Qm94TWVzc2FnZXNEaXJlY3RpdmUsIFRleHRCb3hNZXNzYWdlcywgVGV4dEJveFByZWZpeFRlbXBsYXRlRGlyZWN0aXZlLCBUZXh0Qm94U2VwYXJhdG9yQ29tcG9uZW50LCBUZXh0Qm94U3VmZml4VGVtcGxhdGVEaXJlY3RpdmUsIFRleHRCb3hDb21wb25lbnQsIFNsaWRlckNvbXBvbmVudCwgUmFuZ2VTbGlkZXJDb21wb25lbnQsIExhYmVsVGVtcGxhdGVEaXJlY3RpdmUsIFN3aXRjaENvbXBvbmVudCwgVGV4dEJveENvbnRhaW5lckNvbXBvbmVudCwgVGV4dEJveERpcmVjdGl2ZSwgVGV4dEFyZWFEaXJlY3RpdmUsIE51bWVyaWNUZXh0Qm94Q29tcG9uZW50LCBOdW1lcmljVGV4dEJveEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBNYXNrZWRUZXh0Qm94Q29tcG9uZW50LCBJbnB1dHNNb2R1bGUsIFNsaWRlclRpY2tzQ29tcG9uZW50LCBTbGlkZXJNb2R1bGUsIFJhbmdlU2xpZGVyTW9kdWxlLCBTd2l0Y2hNb2R1bGUsIE51bWVyaWNUZXh0Qm94TW9kdWxlLCBNYXNrZWRUZXh0Qm94TW9kdWxlLCBUZXh0Qm94TW9kdWxlLCBDb2xvclBpY2tlckNvbXBvbmVudCwgQ29sb3JQYWxldHRlQ29tcG9uZW50LCBDb2xvckdyYWRpZW50Q29tcG9uZW50LCBDb2xvclBpY2tlck1vZHVsZSwgQWN0aXZlQ29sb3JDbGlja0V2ZW50LCBDaGVja0JveERpcmVjdGl2ZSwgUmFkaW9CdXR0b25EaXJlY3RpdmUsIEhpbnRDb21wb25lbnQsIEVycm9yQ29tcG9uZW50LCBGb3JtRmllbGRDb21wb25lbnQsIEZvcm1GaWVsZE1vZHVsZSwgTG9jYWxpemVkTnVtZXJpY1RleHRCb3hNZXNzYWdlc0RpcmVjdGl2ZSwgTG9jYWxpemVkU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUsIExvY2FsaXplZFJhbmdlU2xpZGVyTWVzc2FnZXNEaXJlY3RpdmUsIExvY2FsaXplZFN3aXRjaE1lc3NhZ2VzRGlyZWN0aXZlIH07XG4iXX0=","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Injectable, EventEmitter, Directive, ElementRef, Renderer2, Optional, NgZone, Input, Output, HostBinding, HostListener, isDevMode, Component, ContentChildren, NgModule, TemplateRef, ViewContainerRef, InjectionToken, Inject, ChangeDetectorRef, ContentChild, ViewChild } from '@angular/core';\nimport { BehaviorSubject, Subject, fromEvent, merge } from 'rxjs';\nimport { Keys, isChanged, isDocumentAvailable, hasObservers, guid } from '@progress/kendo-angular-common';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\n\nconst _c0 = [[[\"\", \"kendoButton\", \"\"]]];\nconst _c1 = [\"[kendoButton]\"];\nfunction ListComponent_li_1_1_ng_template_0_Template(rf, ctx) { }\nconst _c2 = function (a0, a1) { return { templateRef: a0, $implicit: a1 }; };\nfunction ListComponent_li_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c2, ctx_r3.itemTemplate == null ? null : ctx_r3.itemTemplate.templateRef, dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_span_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r7.getIconClasses(dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_img_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"img\", 9);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"src\", dataItem_r1.imageUrl, ɵngcc0.ɵɵsanitizeUrl);\n} }\nfunction ListComponent_li_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_ng_template_2_span_0_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_ng_template_2_img_1_Template, 1, 1, \"img\", 7);\n ɵngcc0.ɵɵtext(2);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.icon || dataItem_r1.iconClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.imageUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r4.getText(dataItem_r1), \" \");\n} }\nconst _c3 = function (a1) { return { \"k-item\": true, \"k-state-disabled\": a1 }; };\nfunction ListComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function ListComponent_li_1_Template_li_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const index_r2 = ctx.index; const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.onClick(index_r2); })(\"blur\", function ListComponent_li_1_Template_li_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.onBlur(); });\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_1_Template, 1, 4, undefined, 3);\n ɵngcc0.ɵɵtemplate(2, ListComponent_li_1_ng_template_2_Template, 3, 3, \"ng-template\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r1 = ctx.$implicit;\n const index_r2 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"index\", index_r2)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(5, _c3, dataItem_r1.disabled));\n ɵngcc0.ɵɵattribute(\"aria-disabled\", dataItem_r1.disabled ? true : false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef));\n} }\nconst _c4 = [\"button\"];\nconst _c5 = [\"arrowButton\"];\nconst _c6 = [\"popupTemplate\"];\nconst _c7 = [\"container\"];\nfunction SplitButtonComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 6);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onItemClick($event); })(\"keydown\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.keyDownHandler($event); })(\"keypress\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.keyPressHandler($event); })(\"keyup\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r3.listId)(\"data\", ctx_r3.data)(\"textField\", ctx_r3.textField)(\"itemTemplate\", ctx_r3.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r3.dir);\n} }\nconst _c8 = [\"*\"];\nconst _c9 = [\"buttonList\"];\nfunction DropDownButtonComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 4, 5);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onItemClick($event); })(\"keydown\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.keyDownHandler($event); })(\"keypress\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.keyPressHandler($event); })(\"keyup\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r2.listId)(\"data\", ctx_r2.data)(\"textField\", ctx_r2.textField)(\"itemTemplate\", ctx_r2.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r2.dir);\n} }\nfunction ChipComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r0.selectedIconClasses);\n} }\nfunction ChipComponent_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r1.iconClasses);\n} }\nfunction ChipComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r2.label, \" \");\n} }\nfunction ChipComponent_ng_content_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!label\"]);\n} }\nfunction ChipComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function ChipComponent_span_6_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onRemoveClick($event); });\n ɵngcc0.ɵɵelement(1, \"span\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.removeIconClasses);\n} }\nclass KendoButtonService {\n constructor() {\n this.buttonLookChange = new BehaviorSubject('default');\n this.buttonClicked = new Subject();\n this.buttonClicked$ = this.buttonClicked.asObservable();\n }\n click(button) {\n this.buttonClicked.next(button);\n }\n setButtonLook(look) {\n this.buttonLookChange.next(look);\n }\n}\nKendoButtonService.ɵfac = function KendoButtonService_Factory(t) { return new (t || KendoButtonService)(); };\nKendoButtonService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: KendoButtonService, factory: KendoButtonService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(KendoButtonService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst SPAN_TAG_NAME = 'SPAN';\n/**\n * Represents the Kendo UI Button component for Angular.\n */\nclass ButtonDirective {\n constructor(element, renderer, service, localization, ngZone) {\n this.service = service;\n this.ngZone = ngZone;\n /**\n * Provides visual styling that indicates if the Button is active.\n * By default, `toggleable` is set to `false`.\n */\n this.toggleable = false;\n /**\n * Adds visual weight to the Button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug appearance_button %})).\n *\n * The available values are:\n * * [`ButtonLook`]({% slug api_buttons_buttonlook %}) = `flat` | `outline`\n * * `clear`\n */\n this.look = 'default';\n /**\n * @hidden\n */\n this.role = 'button';\n /**\n * Fires each time the selected state of a toggleable button is changed.\n *\n * The event argument is the new selected state (boolean).\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks the button.\n */\n this.click = new EventEmitter();\n this.isDisabled = false;\n this.isIcon = false;\n this.isIconClass = false;\n this._focused = false;\n this.domEvents = [];\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.element = element.nativeElement;\n this.renderer = renderer;\n }\n /**\n * Backwards-compatible alias\n *\n * @hidden\n */\n get togglable() {\n return this.toggleable;\n }\n /**\n * @hidden\n */\n set togglable(value) {\n this.toggleable = value;\n }\n /**\n * Sets the selected state of the Button.\n */\n get selected() {\n return this._selected || false;\n }\n set selected(value) {\n this._selected = value;\n }\n /**\n * @hidden\n */\n set tabIndex(index) {\n this.element.tabIndex = index;\n }\n get tabIndex() {\n return this.element.tabIndex;\n }\n /**\n * Defines the name for an existing icon in a Kendo UI theme.\n * The icon is rendered inside the Button by a `span.k-icon` element.\n */\n set icon(icon) {\n if (icon) {\n this.iconSetter(icon, () => {\n this.isIcon = true;\n const classes = 'k-icon k-i-' + icon;\n this.addIcon(classes);\n });\n }\n else {\n this.isIcon = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a CSS class—or multiple classes separated by spaces—\n * which are applied to a `span` element inside the Button. Allows the usage of custom icons.\n */\n set iconClass(iconClassName) {\n if (iconClassName) {\n this.iconSetter(iconClassName, () => {\n this.isIconClass = true;\n this.addIcon(iconClassName);\n });\n }\n else {\n this.isIconClass = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a URL which is used for an `img` element inside the Button.\n * The URL can be relative or absolute. If relative, it is evaluated with relation to the web page URL.\n */\n set imageUrl(imageUrl) {\n if (imageUrl) {\n this.iconSetter(imageUrl, this.addImgIcon.bind(this));\n }\n else {\n this.removeImageNode();\n }\n }\n /**\n * If set to `true`, it disables the Button.\n */\n set disabled(disabled) {\n this.isDisabled = disabled;\n this.renderer.setProperty(this.element, 'disabled', disabled);\n }\n get disabled() {\n return this.isDisabled;\n }\n set isFocused(isFocused) {\n this.toggleClass('k-state-focused', isFocused);\n this._focused = isFocused;\n }\n get isFocused() {\n return this._focused;\n }\n get classButton() {\n return true;\n }\n get classPrimary() {\n return this.primary;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get isClear() {\n return this.look === 'clear';\n }\n get roleSetter() {\n return this.role;\n }\n get classDisabled() {\n return this.isDisabled;\n }\n get classActive() {\n return this.selected;\n }\n get getDirection() {\n return this.direction;\n }\n /**\n * @hidden\n */\n onFocus() {\n this.isFocused = true;\n }\n /**\n * @hidden\n */\n onBlur() {\n this.isFocused = false;\n }\n ngOnInit() {\n const isSpan = this.element.tagName === SPAN_TAG_NAME;\n if (this.service) {\n this.buttonLookChangeSubscription = this.service.buttonLookChange\n .pipe(filter((look) => look !== 'default'))\n .subscribe((look) => this.look = look);\n }\n if (!this.element.hasAttribute('role') && this.togglable) {\n this.toggleAriaPressed(this.toggleable);\n }\n if (this.role) {\n this.setAttribute('role', this.role);\n }\n this.ngZone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element, 'click', this._onButtonClick.bind(this)));\n this.domEvents.push(this.renderer.listen(this.element, 'keydown', (event) => {\n if (isSpan && (event.keyCode === Keys.Space || event.keyCode === Keys.Enter)) {\n this.click.emit(event);\n this._onButtonClick();\n }\n }));\n });\n }\n ngOnChanges(change) {\n if (isChanged('togglable', change) || isChanged('toggleable', change)) {\n this.toggleAriaPressed(this.toggleable);\n }\n }\n ngAfterViewChecked() {\n this.setIconTextClasses();\n }\n ngOnDestroy() {\n this.imageNode = null;\n this.iconNode = null;\n this.renderer = null;\n this.localizationChangeSubscription.unsubscribe();\n if (this.service && this.buttonLookChangeSubscription) {\n this.buttonLookChangeSubscription.unsubscribe();\n }\n clearTimeout(this.deferTimeout);\n this.domEvents.forEach(unbindHandler => unbindHandler());\n }\n /**\n * Focuses the Button component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.focus();\n this.isFocused = true;\n }\n }\n /**\n * Blurs the Button component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.blur();\n this.isFocused = false;\n }\n }\n /**\n * @hidden\n */\n setAttribute(attribute, value) {\n this.renderer.setAttribute(this.element, attribute, value);\n }\n /**\n * @hidden\n */\n removeAttribute(attribute) {\n this.renderer.removeAttribute(this.element, attribute);\n }\n /**\n * @hidden\n *\n * Internal setter that triggers selectedChange\n */\n setSelected(value) {\n const changed = this.selected !== value;\n this.selected = value;\n this.setAttribute('aria-pressed', this.selected.toString());\n this.toggleClass('k-state-active', this.selected);\n if (changed && hasObservers(this.selectedChange)) {\n this.ngZone.run(() => {\n this.selectedChange.emit(value);\n });\n }\n }\n toggleAriaPressed(shouldSet) {\n if (!isDocumentAvailable()) {\n return;\n }\n if (shouldSet) {\n this.setAttribute('aria-pressed', this.selected.toString());\n }\n else {\n this.removeAttribute('aria-pressed');\n }\n }\n hasText() {\n if (isDocumentAvailable()) {\n return String(this.element.textContent).trim().length > 0;\n }\n else {\n return false;\n }\n }\n addImgIcon(imageUrl) {\n let renderer = this.renderer;\n if (this.imageNode) {\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n }\n else if (isDocumentAvailable()) {\n this.imageNode = renderer.createElement('img');\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n renderer.setProperty(this.imageNode, 'className', 'k-image');\n renderer.setAttribute(this.imageNode, 'role', 'presentation');\n this.prependChild(this.imageNode);\n }\n }\n addIcon(classNames) {\n let renderer = this.renderer;\n if (this.iconNode) {\n renderer.setProperty(this.iconNode, 'className', classNames);\n }\n else if (isDocumentAvailable()) {\n this.iconNode = renderer.createElement('span');\n renderer.setProperty(this.iconNode, 'className', classNames);\n renderer.setAttribute(this.iconNode, 'role', 'presentation');\n this.prependChild(this.iconNode);\n }\n }\n prependChild(node) {\n this.defer(() => {\n if (this.renderer && node !== this.element.firstChild) {\n this.renderer.insertBefore(this.element, node, this.element.firstChild);\n }\n });\n }\n defer(callback) {\n this.ngZone.runOutsideAngular(() => {\n this.deferTimeout = setTimeout(callback, 0);\n });\n }\n iconSetter(icon, insertIcon) {\n if (icon) {\n insertIcon(icon);\n }\n this.setIconTextClasses();\n }\n removeImageNode() {\n if (this.imageNode && this.renderer.parentNode(this.imageNode)) {\n this.renderer.removeChild(this.element, this.imageNode);\n this.imageNode = null;\n }\n }\n removeIconNode() {\n if (this.iconNode && this.renderer.parentNode(this.iconNode)) {\n this.renderer.removeChild(this.element, this.iconNode);\n this.iconNode = null;\n }\n }\n updateIconNode() {\n if (!this.isIcon && !this.isIconClass) {\n this.removeIconNode();\n }\n }\n setIconTextClasses() {\n const hasIcon = this.isIcon || this.isIconClass || this.imageNode;\n const hasText = this.hasText();\n this.toggleClass('k-button-icon', hasIcon && !hasText);\n this.toggleClass('k-button-icontext', hasIcon && hasText);\n }\n toggleClass(className, add) {\n if (add) {\n this.renderer.addClass(this.element, className);\n }\n else {\n this.renderer.removeClass(this.element, className);\n }\n }\n _onButtonClick() {\n if (!this.disabled && this.service) {\n this.ngZone.run(() => {\n this.service.click(this);\n });\n }\n if (this.togglable && !this.service) {\n this.setSelected(!this.selected);\n }\n }\n}\nButtonDirective.ɵfac = function ButtonDirective_Factory(t) { return new (t || ButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(KendoButtonService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nButtonDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ButtonDirective, selectors: [[\"button\", \"kendoButton\", \"\"], [\"span\", \"kendoButton\", \"\"]], hostVars: 19, hostBindings: function ButtonDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function ButtonDirective_focus_HostBindingHandler() { return ctx.onFocus(); })(\"blur\", function ButtonDirective_blur_HostBindingHandler() { return ctx.onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleSetter)(\"aria-disabled\", ctx.classDisabled)(\"dir\", ctx.getDirection);\n ɵngcc0.ɵɵclassProp(\"k-button\", ctx.classButton)(\"k-primary\", ctx.classPrimary)(\"k-flat\", ctx.isFlat)(\"k-bare\", ctx.isBare)(\"k-outline\", ctx.isOutline)(\"k-button-clear\", ctx.isClear)(\"k-state-disabled\", ctx.classDisabled)(\"k-state-active\", ctx.classActive);\n } }, inputs: { toggleable: \"toggleable\", primary: \"primary\", look: \"look\", role: \"role\", togglable: \"togglable\", selected: \"selected\", tabIndex: \"tabIndex\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\" }, outputs: { selectedChange: \"selectedChange\", click: \"click\" }, exportAs: [\"kendoButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nButtonDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: KendoButtonService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nButtonDirective.propDecorators = {\n toggleable: [{ type: Input }],\n togglable: [{ type: Input }],\n primary: [{ type: Input }],\n look: [{ type: Input }],\n selected: [{ type: Input }],\n tabIndex: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n disabled: [{ type: Input }],\n role: [{ type: Input }],\n selectedChange: [{ type: Output }],\n click: [{ type: Output }],\n classButton: [{ type: HostBinding, args: ['class.k-button',] }],\n classPrimary: [{ type: HostBinding, args: ['class.k-primary',] }],\n isFlat: [{ type: HostBinding, args: ['class.k-flat',] }],\n isBare: [{ type: HostBinding, args: ['class.k-bare',] }],\n isOutline: [{ type: HostBinding, args: ['class.k-outline',] }],\n isClear: [{ type: HostBinding, args: ['class.k-button-clear',] }],\n roleSetter: [{ type: HostBinding, args: ['attr.role',] }],\n classDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }],\n classActive: [{ type: HostBinding, args: ['class.k-state-active',] }],\n getDirection: [{ type: HostBinding, args: ['attr.dir',] }],\n onFocus: [{ type: HostListener, args: ['focus',] }],\n onBlur: [{ type: HostListener, args: ['blur',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoButton',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoButton], span[kendoButton]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: KendoButtonService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { toggleable: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], role: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], click: [{\n type: Output\n }], togglable: [{\n type: Input\n }], selected: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], classButton: [{\n type: HostBinding,\n args: ['class.k-button']\n }], classPrimary: [{\n type: HostBinding,\n args: ['class.k-primary']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-outline']\n }], isClear: [{\n type: HostBinding,\n args: ['class.k-button-clear']\n }], roleSetter: [{\n type: HostBinding,\n args: ['attr.role']\n }], classDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], classActive: [{\n type: HostBinding,\n args: ['class.k-state-active']\n }], getDirection: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n onFocus: [{\n type: HostListener,\n args: ['focus']\n }], \n /**\n * @hidden\n */\n onBlur: [{\n type: HostListener,\n args: ['blur']\n }] }); })();\n\n/* tslint:disable:no-null-keyword */\n/* tslint:disable:no-bitwise */\nconst resolvedPromise = Promise.resolve(null);\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst tick = (f) => (resolvedPromise.then(f));\n/**\n * @hidden\n */\nfunction isDocumentNode(container) {\n return container.nodeType === 9;\n}\n/**\n * @hidden\n */\nfunction closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n const matches = Element.prototype.matches ?\n (el, sel) => el.matches(sel)\n : (el, sel) => el.msMatchesSelector(sel);\n let node = element;\n while (node && !isDocumentNode(node)) {\n if (matches(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst tabindex = 'tabindex';\n/**\n * Represents the Kendo UI ButtonGroup component for Angular.\n */\nclass ButtonGroupComponent {\n constructor(service, localization, element) {\n this.service = service;\n this.element = element;\n /**\n * By default, the selection mode of the ButtonGroup is set to `multiple`.\n */\n this.selection = 'multiple';\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug styling_buttongroup %})).\n * The `look` property of the ButtonGroup takes precedence over the `look` property\n * of the individual buttons that are part of the group.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Fires every time keyboard navigation occurs.\n */\n this.navigate = new EventEmitter();\n this._tabIndex = 0;\n this.currentTabIndex = 0;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabIndex(value) {\n this._tabIndex = value;\n this.currentTabIndex = value;\n }\n get tabIndex() {\n return this._tabIndex;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get stretchedClass() {\n return !!this.width;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get getRole() {\n return this.isSelectionSingle() ? 'radiogroup' : 'group';\n }\n get dir() {\n return this.direction;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get wrapperWidth() {\n return this.width;\n }\n get wrapperTabIndex() {\n return this.disabled ? undefined : this.currentTabIndex;\n }\n /**\n * @hidden\n */\n keydown(event) {\n if (!this.disabled) {\n this.navigateFocus(event);\n }\n }\n /**\n * @hidden\n */\n onFocus() {\n this.currentTabIndex = -1;\n const focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const index = focusedIndex === -1 ? 0 : focusedIndex;\n this.focus(this.buttons.filter((_current, i) => {\n return i === index;\n }));\n }\n /**\n * @hidden\n */\n focusout(event) {\n if (event.relatedTarget && event.relatedTarget.parentNode !== this.element.nativeElement) {\n this.defocus(this.buttons.toArray());\n this.currentTabIndex = this.tabIndex;\n }\n }\n ngOnInit() {\n this.service.setButtonLook(this.look);\n this.subscription = this.service.buttonClicked$.subscribe((button) => {\n let newSelectionValue;\n if (this.isSelectionSingle()) {\n newSelectionValue = true;\n this.deactivate(this.buttons.filter(current => current !== button));\n }\n else {\n this.defocus(this.buttons.toArray());\n newSelectionValue = !button.selected;\n }\n if (button.togglable) {\n button.setSelected(newSelectionValue);\n }\n button.setAttribute(tabindex, \"0\");\n });\n }\n ngOnChanges(change) {\n if (isChanged('disabled', change)) {\n this.buttons.forEach((button) => {\n if (isPresent(this.disabled)) {\n button.disabled = this.disabled;\n }\n });\n }\n }\n ngAfterContentInit() {\n this.buttons.forEach((button) => {\n if (button.selected) {\n button.setAttribute(tabindex, \"0\");\n }\n else {\n button.setAttribute(tabindex, \"-1\");\n }\n });\n }\n ngAfterViewChecked() {\n if (this.buttons.length) {\n this.buttons.first.renderer.addClass(this.buttons.first.element, 'k-group-start');\n this.buttons.last.renderer.addClass(this.buttons.last.element, 'k-group-end');\n }\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n this.localizationChangeSubscription.unsubscribe();\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n navigateFocus(event) {\n let focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const firstIndex = 0;\n const lastIndex = this.buttons.length - 1;\n const eventArgs = new PreventableEvent();\n if (event.keyCode === Keys.ArrowRight && focusedIndex < lastIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex + 1;\n }));\n }\n }\n if (event.keyCode === Keys.ArrowLeft && focusedIndex > firstIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex - 1;\n }));\n }\n }\n }\n deactivate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(false);\n button.setAttribute(tabindex, \"-1\");\n });\n }\n activate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(true);\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n defocus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"-1\");\n });\n }\n focus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n verifySettings() {\n if (isDevMode()) {\n if (this.isSelectionSingle() && this.buttons.filter(button => button.selected).length > 1) {\n throw new Error('Having multiple selected buttons with single selection mode is not supported');\n }\n }\n }\n isSelectionSingle() {\n return this.selection === 'single';\n }\n}\nButtonGroupComponent.ɵfac = function ButtonGroupComponent_Factory(t) { return new (t || ButtonGroupComponent)(ɵngcc0.ɵɵdirectiveInject(KendoButtonService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nButtonGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ButtonGroupComponent, selectors: [[\"kendo-buttongroup\"]], contentQueries: function ButtonGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonDirective, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttons = _t);\n } }, hostVars: 18, hostBindings: function ButtonGroupComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function ButtonGroupComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"focus\", function ButtonGroupComponent_focus_HostBindingHandler() { return ctx.onFocus(); })(\"focusout\", function ButtonGroupComponent_focusout_HostBindingHandler($event) { return ctx.focusout($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.getRole)(\"dir\", ctx.dir)(\"aria-disabled\", ctx.ariaDisabled)(\"tabindex\", ctx.wrapperTabIndex);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.wrapperWidth);\n ɵngcc0.ɵɵclassProp(\"k-button-group\", ctx.wrapperClass)(\"k-state-disabled\", ctx.disabledClass)(\"k-button-group-stretched\", ctx.stretchedClass)(\"k-button-group-flat\", ctx.isFlat)(\"k-button-group-bare\", ctx.isBare)(\"k-button-group-outline\", ctx.isOutline);\n } }, inputs: { selection: \"selection\", look: \"look\", tabIndex: \"tabIndex\", disabled: \"disabled\", width: \"width\" }, outputs: { navigate: \"navigate\" }, exportAs: [\"kendoButtonGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 1, vars: 0, template: function ButtonGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nButtonGroupComponent.ctorParameters = () => [\n { type: KendoButtonService },\n { type: LocalizationService },\n { type: ElementRef }\n];\nButtonGroupComponent.propDecorators = {\n disabled: [{ type: Input, args: ['disabled',] }],\n selection: [{ type: Input, args: ['selection',] }],\n width: [{ type: Input, args: ['width',] }],\n look: [{ type: Input }],\n tabIndex: [{ type: Input }],\n navigate: [{ type: Output }],\n buttons: [{ type: ContentChildren, args: [ButtonDirective,] }],\n wrapperClass: [{ type: HostBinding, args: ['class.k-button-group',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n stretchedClass: [{ type: HostBinding, args: ['class.k-button-group-stretched',] }],\n isFlat: [{ type: HostBinding, args: ['class.k-button-group-flat',] }],\n isBare: [{ type: HostBinding, args: ['class.k-button-group-bare',] }],\n isOutline: [{ type: HostBinding, args: ['class.k-button-group-outline',] }],\n getRole: [{ type: HostBinding, args: ['attr.role',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }],\n wrapperWidth: [{ type: HostBinding, args: ['style.width',] }],\n wrapperTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n onFocus: [{ type: HostListener, args: ['focus',] }],\n focusout: [{ type: HostListener, args: ['focusout', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonGroupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoButtonGroup',\n providers: [\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ],\n selector: 'kendo-buttongroup',\n template: `\n \n `\n }]\n }], function () { return [{ type: KendoButtonService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ElementRef }]; }, { selection: [{\n type: Input,\n args: ['selection']\n }], look: [{\n type: Input\n }], navigate: [{\n type: Output\n }], tabIndex: [{\n type: Input\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-button-group']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-button-group-stretched']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-button-group-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-button-group-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-button-group-outline']\n }], getRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], wrapperWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], wrapperTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n onFocus: [{\n type: HostListener,\n args: ['focus']\n }], \n /**\n * @hidden\n */\n focusout: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }], disabled: [{\n type: Input,\n args: ['disabled']\n }], width: [{\n type: Input,\n args: ['width']\n }], buttons: [{\n type: ContentChildren,\n args: [ButtonDirective]\n }] }); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Button directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Button module\n * import { ButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonModule], // import Button module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonModule {\n}\nButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonModule });\nButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonModule_Factory(t) { return new (t || ButtonModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonModule, { declarations: [ButtonDirective], exports: [ButtonDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonDirective],\n exports: [ButtonDirective]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ButtonGroupComponent`—The ButtonGroupComponent component class.\n */\nclass ButtonGroupModule {\n}\nButtonGroupModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonGroupModule });\nButtonGroupModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonGroupModule_Factory(t) { return new (t || ButtonGroupModule)(); }, imports: [[CommonModule, ButtonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonGroupModule, { declarations: function () { return [ButtonGroupComponent]; }, imports: function () { return [CommonModule, ButtonModule]; }, exports: function () { return [ButtonGroupComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonGroupModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonGroupComponent],\n exports: [ButtonGroupComponent],\n imports: [CommonModule, ButtonModule]\n }]\n }], null, null); })();\n\n/* tslint:disable:directive-selector-name */\n/**\n * Used for rendering the list item content.\n *\n * To define the item template, nest a `` tag with the `kendoItemTemplate` directive inside the component tag.\n *\n * For the DropDownButton, use the `kendoDropDownButtonItemTemplate` directive.\n * For the SplitButton, use the `kendoSplitButtonItemTemplate` directive.\n *\n * The template context is set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [{\n * text: 'item1',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }, {\n * text: 'item2',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }]\n * }\n * ```\n *\n * For more examples, refer to the article on the [DropDownList templates]({% slug overview_ddl %}#templates).\n */\nclass ButtonItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nButtonItemTemplateDirective.ɵfac = function ButtonItemTemplateDirective_Factory(t) { return new (t || ButtonItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nButtonItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ButtonItemTemplateDirective, selectors: [[\"\", \"kendoDropDownButtonItemTemplate\", \"\"], [\"\", \"kendoSplitButtonItemTemplate\", \"\"]] });\n/** @nocollapse */\nButtonItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ListComponent {\n constructor() {\n this.onItemClick = new EventEmitter();\n this.onItemBlur = new EventEmitter();\n }\n getText(dataItem) {\n if (dataItem) {\n return this.textField ? dataItem[this.textField] : dataItem.text || dataItem;\n }\n return undefined;\n }\n getIconClasses(dataItem) {\n const icon = dataItem.icon ? 'k-icon k-i-' + dataItem.icon : undefined;\n const classes = {};\n classes[icon || dataItem.iconClass] = true;\n return classes;\n }\n onClick(index) {\n this.onItemClick.emit(index);\n }\n onBlur() {\n this.onItemBlur.emit();\n }\n}\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(); };\nListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-button-list\"]], inputs: { data: \"data\", textField: \"textField\", itemTemplate: \"itemTemplate\" }, outputs: { onItemClick: \"onItemClick\", onItemBlur: \"onItemBlur\" }, decls: 2, vars: 1, consts: [[\"unselectable\", \"on\", 1, \"k-list\", \"k-reset\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\"], [4, \"ngIf\"], [3, \"ngIf\"], [3, \"templateContext\"], [3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-image\", \"alt\", \"\", 3, \"src\", 4, \"ngIf\"], [3, \"ngClass\"], [\"alt\", \"\", 1, \"k-image\", 3, \"src\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_Template, 3, 7, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: function () { return [ɵngcc2.NgForOf, FocusableDirective, ɵngcc2.NgClass, ɵngcc2.NgIf, TemplateContextDirective]; }, encapsulation: 2 });\nListComponent.propDecorators = {\n data: [{ type: Input }],\n textField: [{ type: Input }],\n itemTemplate: [{ type: Input }],\n onItemClick: [{ type: Output }],\n onItemBlur: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-button-list',\n template: `\n
      \n
    • \n \n \n \n \n \n {{ getText(dataItem) }}\n \n
    • \n
    \n `\n }]\n }], function () { return []; }, { onItemClick: [{\n type: Output\n }], onItemBlur: [{\n type: Output\n }], data: [{\n type: Input\n }], textField: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FocusService {\n constructor() {\n this.onFocus = new EventEmitter();\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n resetFocus() {\n this.focused = -1;\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n}\nFocusService.ɵfac = function FocusService_Factory(t) { return new (t || FocusService)(); };\nFocusService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusService, factory: FocusService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass FocusableDirective {\n constructor(focusService, elementRef) {\n this.focusService = focusService;\n this.element = elementRef.nativeElement;\n this.subscribeEvents();\n }\n get focusedClassName() {\n return this.focusService.isFocused(this.index);\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.unsubscribeEvents();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.focusSubscription = this.focusService.onFocus.subscribe((index) => {\n if (this.index === index) {\n this.element.focus();\n }\n });\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.focusSubscription) {\n this.focusSubscription.unsubscribe();\n }\n }\n}\nFocusableDirective.ɵfac = function FocusableDirective_Factory(t) { return new (t || FocusableDirective)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFocusableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FocusableDirective, selectors: [[\"\", \"kendoButtonFocusable\", \"\"]], hostVars: 2, hostBindings: function FocusableDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focusedClassName);\n } }, inputs: { index: \"index\" } });\n/** @nocollapse */\nFocusableDirective.ctorParameters = () => [\n { type: FocusService },\n { type: ElementRef }\n];\nFocusableDirective.propDecorators = {\n index: [{ type: Input }],\n focusedClassName: [{ type: HostBinding, args: ['class.k-state-focused',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoButtonFocusable]'\n }]\n }], function () { return [{ type: FocusService }, { type: ɵngcc0.ElementRef }]; }, { focusedClassName: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], index: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n}\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n/** @nocollapse */\nTemplateContextDirective.ctorParameters = () => [\n { type: ViewContainerRef }\n];\nTemplateContextDirective.propDecorators = {\n templateContext: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n\nconst EXPORTED_DIRECTIVES = [\n ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective\n];\n/**\n * @hidden\n */\nclass ListModule {\n}\nListModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ListModule });\nListModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ListModule_Factory(t) { return new (t || ListModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ListModule, { declarations: function () { return [ListComponent, FocusableDirective, ButtonItemTemplateDirective, TemplateContextDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ListComponent, FocusableDirective, ButtonItemTemplateDirective, TemplateContextDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListModule, [{\n type: NgModule,\n args: [{\n declarations: [EXPORTED_DIRECTIVES],\n exports: [EXPORTED_DIRECTIVES],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nvar KeyEvents;\n(function (KeyEvents) {\n KeyEvents[KeyEvents[\"keydown\"] = 0] = \"keydown\";\n KeyEvents[KeyEvents[\"keypress\"] = 1] = \"keypress\";\n KeyEvents[KeyEvents[\"keyup\"] = 2] = \"keyup\";\n})(KeyEvents || (KeyEvents = {}));\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"EnterPress\"] = 4] = \"EnterPress\";\n NavigationAction[NavigationAction[\"EnterUp\"] = 5] = \"EnterUp\";\n NavigationAction[NavigationAction[\"Tab\"] = 6] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 7] = \"Esc\";\n NavigationAction[NavigationAction[\"Navigate\"] = 8] = \"Navigate\";\n})(NavigationAction || (NavigationAction = {}));\n\n/* tslint:disable:deprecation */\n/**\n * @hidden\n */\nclass ListButton {\n constructor(focusService, navigationService, wrapperRef, _zone, localization, cdr) {\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapperRef = wrapperRef;\n this._zone = _zone;\n this.cdr = cdr;\n this._open = false;\n this._disabled = false;\n this._active = false;\n this._popupSettings = { animate: true, popupClass: '' };\n this.listId = guid();\n this._isFocused = false;\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapper = wrapperRef.nativeElement;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr'));\n this.subscribeEvents();\n }\n get popupClasses() {\n const popupClasses = ['k-list-container', 'k-reset', 'k-group'];\n if (this._popupSettings.popupClass) {\n popupClasses.push(this._popupSettings.popupClass);\n }\n return popupClasses.join(' ');\n }\n get openState() {\n return this._open;\n }\n set openState(open) {\n this._open = open;\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n if (this._disabled) {\n return;\n }\n this.openState = !this.openState;\n if (!this.openState) {\n this.focusService.focus(-1);\n }\n }\n /**\n * @hidden\n */\n onItemClick(index) {\n this.emitItemClickHandler(index);\n setTimeout(() => this.focusWrapper(), 1);\n }\n ngOnDestroy() {\n this.openState = false;\n this.unsubscribeEvents();\n clearTimeout(this.focusFirstTimeout);\n clearTimeout(this.blurTimeout);\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subscribeListItemFocusEvent();\n this.subscribeComponentBlurredEvent();\n this.subscribeNavigationEvents();\n }\n subscribeListItemFocusEvent() {\n this.focusSubscription = this.focusService.onFocus.subscribe(() => {\n this._isFocused = true;\n });\n }\n subscribeComponentBlurredEvent() {\n this._zone.runOutsideAngular(() => {\n this.tabSubscription = this.navigationService.tab.pipe(filter(() => this._isFocused)).subscribe(this.handleTab.bind(this));\n this.componentBlurredSubscription = fromEvent(document, 'click')\n .pipe(filter((event) => !this.wrapperContains(event.target)), filter(() => this._isFocused))\n .subscribe(() => this._zone.run(() => this.blurWrapper()));\n });\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate.subscribe(this.focusService.focus.bind(this.focusService));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(() => {\n this.enterHandler();\n this.focusWrapper();\n });\n this.openSubscription = this.navigationService.open.subscribe(() => {\n if (!this._open) {\n this.togglePopupVisibility();\n this.focusFirstItem();\n }\n else {\n this.focusWrapper();\n }\n });\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(() => this.focusWrapper());\n }\n enterHandler() { } // tslint:disable-line\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.unsubscribe(this.componentBlurredSubscription);\n this.unsubscribe(this.focusSubscription);\n this.unsubscribe(this.navigationSubscription);\n this.unsubscribe(this.enterPressSubscription);\n this.unsubscribe(this.enterUpSubscription);\n this.unsubscribe(this.openSubscription);\n this.unsubscribe(this.closeSubscription);\n this.unsubscribe(this.tabSubscription);\n }\n unsubscribe(subscription) {\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyPressHandler(event) {\n this.keyHandler(event, KeyEvents.keypress);\n }\n /**\n * @hidden\n */\n keyUpHandler(event) {\n this.keyHandler(event, KeyEvents.keyup);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this._disabled) {\n return;\n }\n let focused = this.focusService.focused || 0;\n const eventData = event;\n const action = this.navigationService.process({\n altKey: eventData.altKey,\n current: focused,\n keyCode: eventData.keyCode,\n keyEvent: keyEvent,\n max: this._data ? this._data.length - 1 : 0,\n min: 0\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n (action !== NavigationAction.Enter || (action === NavigationAction.Enter && this._open))) {\n if (event.keyCode === Keys.Space && action === NavigationAction.EnterUp) {\n this._open = false;\n }\n else {\n eventData.preventDefault();\n }\n }\n }\n emitItemClickHandler(index) {\n const dataItem = this._data[index];\n if (this._itemClick) {\n this._itemClick.emit(dataItem);\n }\n if (dataItem && dataItem.click && !dataItem.disabled) {\n dataItem.click(dataItem);\n }\n }\n focusFirstItem() {\n if (this._data && isPresent(this._data[0])) {\n this.focusFirstTimeout = setTimeout(() => this.focusService.focus(0), 1);\n }\n }\n focusWrapper() {\n if (this._open) {\n this.togglePopupVisibility();\n this.focusButton();\n }\n }\n wrapperContains(element) {\n return this.wrapper === element || this.wrapper.contains(element);\n }\n blurWrapper(emit = true) {\n if (this._open) {\n this.togglePopupVisibility();\n }\n this._isFocused = false;\n if (emit) {\n this._blur.emit();\n this.cdr.markForCheck();\n }\n }\n focusButton() {\n if (this.button) {\n this.button.nativeElement.focus();\n }\n }\n handleTab() {\n this.focusButton();\n this.blurWrapper(false);\n }\n}\nListButton.ɵfac = function ListButton_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nListButton.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ListButton });\n\n\n/**\n * @hidden\n */\nconst NAVIGATION_CONFIG = new InjectionToken('navigation.config');\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(config) {\n this.navigate = new EventEmitter();\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.enterpress = new EventEmitter();\n this.enterup = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.useLeftRightArrows = config.useLeftRightArrows;\n }\n process(args) {\n const keyCode = args.keyCode;\n const keyEvent = args.keyEvent;\n let index;\n let action = NavigationAction.Undefined;\n if (keyEvent === KeyEvents.keypress) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterPress;\n }\n }\n else if (keyEvent === KeyEvents.keyup) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterUp;\n }\n }\n else {\n if (args.altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (args.altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (this.isEnter(keyCode)) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp || (this.useLeftRightArrows && keyCode === Keys.ArrowLeft)) {\n index = this.next({\n current: args.current,\n start: args.max,\n end: args.min,\n step: -1\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.ArrowDown || (this.useLeftRightArrows && keyCode === Keys.ArrowRight)) {\n index = this.next({\n current: args.current,\n start: args.min,\n end: args.max,\n step: 1\n });\n action = NavigationAction.Navigate;\n }\n }\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(index);\n }\n return action;\n }\n isEnter(keyCode) {\n return keyCode === Keys.Enter || keyCode === Keys.Space;\n }\n next(args) {\n if (!isPresent(args.current)) {\n return args.start;\n }\n else {\n return args.current !== args.end ? args.current + args.step : args.end;\n }\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(NAVIGATION_CONFIG)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [NAVIGATION_CONFIG,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [NAVIGATION_CONFIG]\n }] }]; }, null); })();\n\n/* tslint:disable:no-access-missing-member */\nconst NAVIGATION_SETTINGS = {\n useLeftRightArrows: true\n};\nconst ɵ0 = NAVIGATION_SETTINGS;\nconst NAVIGATION_SETTINGS_PROVIDER = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0\n};\n/**\n * Represents the Kendo UI SplitButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * Paste\n * `\n * })\n *\n * class AppComponent {\n * public data: Array = [{\n * text: 'Keep Text Only',\n * icon: 'paste-plain-text',\n * click: () => { console.log('Keep Text Only click handler'); }\n * }, {\n * text: 'Paste as HTML',\n * icon: 'paste-as-html'\n * }, {\n * text: 'Paste Markdown',\n * icon: 'paste-markdown'\n * }, {\n * text: 'Set Default Paste'\n * }];\n *\n * public onSplitButtonClick(dataItem: any): void {\n * console.log('Paste');\n * }\n *\n * public onSplitButtonItemClick(dataItem: any): void {\n * if (dataItem) {\n * console.log(dataItem.text);\n * }\n * }\n * }\n * ```\n */\nclass SplitButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Sets the text of the SplitButton.\n */\n this.text = '';\n /**\n * Defines an icon to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.icon = '';\n /**\n * Defines an icon with a custom CSS class to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.iconClass = '';\n /**\n * Defines the location of an image to be displayed next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.imageUrl = '';\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Specifies the name of the [font icon]({% slug icons %}#toc-list-of-font-icons) that will\n * be rendered for the button which opens the popup.\n */\n this.arrowButtonIcon = 'arrow-s';\n /**\n * Fires each time the user clicks the main button.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonClick(): void {\n * console.log('SplitButton click');\n * }\n * }\n * ```\n *\n */\n this.buttonClick = new EventEmitter();\n /**\n * Fires each time the user clicks on the drop-down list. The event data contains the data item bound to the clicked list item.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonItemClick(dataItem?: string): void {\n * if (dataItem) {\n * console.log(dataItem);\n * }\n * }\n * }\n * ```\n *\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the SplitButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the SplitButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n this.listId = guid();\n /**\n * @hidden\n */\n this.activeArrow = false;\n this.buttonText = '';\n this.lockFocus = false;\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * When set to `true`, disables a SplitButton item\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n set disabled(value) {\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Configures the popup of the SplitButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the data of the SplitButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? -1 : this.tabIndex;\n }\n set isFocused(value) {\n this._isFocused = value;\n }\n get isFocused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get ariaLabel() {\n return `${this.buttonText} splitbutton`;\n }\n /**\n * @hidden\n */\n onButtonFocus() {\n if (!this.isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n onArrowButtonClick() {\n this.lockFocus = true;\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n toggleButtonActiveState(enable) {\n this._active = enable;\n }\n /**\n * @hidden\n */\n toggleArrowButtonActiveState(enable) {\n this.activeArrow = enable;\n }\n /**\n * @hidden\n */\n onButtonClick() {\n this.lockFocus = true;\n this.buttonClick.emit();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen && !this.lockFocus) {\n this.blurWrapper();\n }\n this.lockFocus = false;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this._active = false;\n if (event.keyCode !== Keys.Space) {\n this.keyUpHandler(event);\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.updateButtonText();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('text')) {\n this.updateButtonText();\n }\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n super.togglePopupVisibility();\n if (isDocumentAvailable() && this.lockFocus) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return (this.wrapper === element || this.wrapper.contains(element) || (this.popupRef && this.popupRef.popupElement.contains(element)));\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the SplitButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the SplitButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => this._toggle(open === undefined ? !this._open : open));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n enterHandler() {\n if (this.disabled) {\n return;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n else {\n this.buttonClick.emit();\n }\n }\n updateButtonText() {\n if (isDocumentAvailable()) {\n let innerText = this.wrapper.innerText\n .split('\\n')\n .join('')\n .trim();\n //setTimout is needed because of `Expression has changed after it was checked.` error;\n setTimeout(() => (this.buttonText = innerText), 0);\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.containerRef : appendTo;\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => (this.openState = false));\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n}\nSplitButtonComponent.ɵfac = function SplitButtonComponent_Factory(t) { return new (t || SplitButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSplitButtonComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SplitButtonComponent, selectors: [[\"kendo-splitbutton\"]], contentQueries: function SplitButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function SplitButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c4, true);\n ɵngcc0.ɵɵstaticViewQuery(_c5, true, ElementRef);\n ɵngcc0.ɵɵstaticViewQuery(_c6, true);\n ɵngcc0.ɵɵstaticViewQuery(_c7, true, ViewContainerRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.arrowButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);\n } }, hostVars: 9, hostBindings: function SplitButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function SplitButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function SplitButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function SplitButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.isFocused)(\"k-widget\", ctx.widgetClasses)(\"k-split-button\", ctx.widgetClasses)(\"k-button-group\", ctx.widgetClasses);\n } }, inputs: { text: \"text\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", look: \"look\", tabIndex: \"tabIndex\", arrowButtonIcon: \"arrowButtonIcon\", disabled: \"disabled\", popupSettings: \"popupSettings\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\", arrowButtonClass: \"arrowButtonClass\" }, outputs: { buttonClick: \"buttonClick\", itemClick: \"itemClick\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendoSplitButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c8, decls: 10, vars: 22, consts: [[\"kendoButton\", \"\", \"role\", \"listbox\", \"type\", \"button\", 3, \"look\", \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"focus\", \"click\", \"blur\", \"mousedown\", \"mouseup\"], [\"button\", \"\"], [\"kendoButton\", \"\", \"type\", \"button\", 3, \"disabled\", \"icon\", \"look\", \"tabindex\", \"ngClass\", \"click\", \"mousedown\", \"mouseup\"], [\"arrowButton\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"]], template: function SplitButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"focus\", function SplitButtonComponent_Template_button_focus_0_listener() { return ctx.onButtonFocus(); })(\"click\", function SplitButtonComponent_Template_button_click_0_listener() { return ctx.onButtonClick(); })(\"blur\", function SplitButtonComponent_Template_button_blur_0_listener() { return ctx.onButtonBlur(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_0_listener() { return ctx.toggleButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_0_listener() { return ctx.toggleButtonActiveState(false); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵprojection(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"button\", 2, 3);\n ɵngcc0.ɵɵlistener(\"click\", function SplitButtonComponent_Template_button_click_4_listener() { return ctx.onArrowButtonClick(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_4_listener() { return ctx.toggleArrowButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_4_listener() { return ctx.toggleArrowButtonActiveState(false); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, SplitButtonComponent_ng_template_6_Template, 1, 5, \"ng-template\", null, 4, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(8, null, 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"look\", ctx.look)(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId)(\"aria-label\", ctx.ariaLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \"\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.activeArrow);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"icon\", ctx.arrowButtonIcon)(\"look\", ctx.look)(\"tabindex\", -1)(\"ngClass\", ctx.arrowButtonClass);\n } }, directives: [ButtonDirective, ɵngcc2.NgClass, ListComponent], encapsulation: 2 });\n/** @nocollapse */\nSplitButtonComponent.ctorParameters = () => [\n { type: FocusService },\n { type: NavigationService },\n { type: ElementRef },\n { type: NgZone },\n { type: PopupService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nSplitButtonComponent.propDecorators = {\n text: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n look: [{ type: Input }],\n disabled: [{ type: Input }],\n popupSettings: [{ type: Input }],\n tabIndex: [{ type: Input }],\n textField: [{ type: Input }],\n data: [{ type: Input }],\n buttonClass: [{ type: Input }],\n arrowButtonClass: [{ type: Input }],\n arrowButtonIcon: [{ type: Input }],\n buttonClick: [{ type: Output }],\n itemClick: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n itemTemplate: [{ type: ContentChild, args: [ButtonItemTemplateDirective,] }],\n button: [{ type: ViewChild, args: ['button', { static: true },] }],\n arrowButton: [{ type: ViewChild, args: ['arrowButton', { static: true, read: ElementRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { static: true },] }],\n containerRef: [{ type: ViewChild, args: ['container', { read: ViewContainerRef, static: true },] }],\n isFocused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n widgetClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-split-button',] }, { type: HostBinding, args: ['class.k-button-group',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n keypress: [{ type: HostListener, args: ['keypress', ['$event'],] }],\n keyup: [{ type: HostListener, args: ['keyup', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ],\n selector: 'kendo-splitbutton',\n template: `\n \n {{ text }}\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], arrowButtonIcon: [{\n type: Input\n }], buttonClick: [{\n type: Output\n }], itemClick: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], disabled: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], isFocused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-split-button']\n }, {\n type: HostBinding,\n args: ['class.k-button-group']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], \n /**\n * @hidden\n */\n keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], arrowButtonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], arrowButton: [{\n type: ViewChild,\n args: ['arrowButton', { static: true, read: ElementRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], containerRef: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `SplitButtonComponent`—The SplitButtonComponent component class.\n */\nclass SplitButtonModule {\n}\nSplitButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SplitButtonModule });\nSplitButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SplitButtonModule_Factory(t) { return new (t || SplitButtonModule)(); }, imports: [[CommonModule, PopupModule, ButtonModule, ListModule], ListModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SplitButtonModule, { declarations: function () { return [SplitButtonComponent]; }, imports: function () { return [CommonModule, PopupModule, ButtonModule, ListModule]; }, exports: function () { return [SplitButtonComponent, ListModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [SplitButtonComponent],\n exports: [SplitButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ButtonModule, ListModule]\n }]\n }], null, null); })();\n\n/* tslint:disable:no-access-missing-member */\nconst NAVIGATION_SETTINGS$1 = {\n useLeftRightArrows: true\n};\nconst ɵ0$1 = NAVIGATION_SETTINGS$1;\nconst NAVIGATION_SETTINGS_PROVIDER$1 = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0$1\n};\n/**\n * Represents the Kendo UI DropDownButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * User Settings\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [{\n * text: 'My Profile'\n * }, {\n * text: 'Friend Requests'\n * }, {\n * text: 'Account Settings'\n * }, {\n * text: 'Support'\n * }, {\n * text: 'Log Out'\n * }];\n * }\n * ```\n */\nclass DropDownButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Defines the name of an existing icon in a Kendo UI theme.\n */\n this.icon = '';\n /**\n * Defines the list of CSS classes which are used for styling the Button with custom icons.\n */\n this.iconClass = '';\n /**\n * Defines a URL for styling the button with a custom image.\n */\n this.imageUrl = '';\n /**\n * Adds visual weight to the default button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Fires each time the user clicks on a drop-down list item. The event data contains the data item bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the DropDownButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the DropDownButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n this.listId = guid();\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * Configures the popup of the DropDownButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the disabled state of the DropDownButton.\n */\n set disabled(value) {\n if (value && this.openState) {\n this.openState = false;\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets or gets the data of the DropDownButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get focused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this.keyUpHandler(event);\n this._active = false;\n }\n /**\n * @hidden\n */\n mousedown(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = true;\n }\n /**\n * @hidden\n */\n mouseup(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = false;\n }\n /**\n * @hidden\n */\n openPopup() {\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen) {\n this.blurWrapper();\n }\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the DropDownButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => (this._toggle((open === undefined) ? !this._open : open)));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this._disabled && !this._isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return this.wrapper === element\n || this.wrapper.contains(element)\n || (this.popupRef && this.popupRef.popupElement.contains(element));\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate\n .subscribe(this.onArrowKeyNavigate.bind(this));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(this.onNavigationEnterUp.bind(this));\n this.openSubscription = this.navigationService.open.subscribe(this.onNavigationOpen.bind(this));\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this));\n }\n onNavigationEnterUp() {\n if (!this._disabled && !this.openState) {\n this._active = false;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n this.togglePopupVisibility();\n if (!this.openState && isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n onNavigationOpen() {\n if (!this._disabled && !this.openState) {\n this.togglePopupVisibility();\n }\n }\n onNavigationClose() {\n if (this.openState) {\n this.togglePopupVisibility();\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n _toggle(open) {\n if (this._open === open) {\n return;\n }\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.openState = false);\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n}\nDropDownButtonComponent.ɵfac = function DropDownButtonComponent_Factory(t) { return new (t || DropDownButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDropDownButtonComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DropDownButtonComponent, selectors: [[\"kendo-dropdownbutton\"]], contentQueries: function DropDownButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function DropDownButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c4, true);\n ɵngcc0.ɵɵstaticViewQuery(_c9, true);\n ɵngcc0.ɵɵstaticViewQuery(_c6, true);\n ɵngcc0.ɵɵstaticViewQuery(_c7, true, ViewContainerRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttonList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n } }, hostVars: 7, hostBindings: function DropDownButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function DropDownButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function DropDownButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function DropDownButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); })(\"mousedown\", function DropDownButtonComponent_mousedown_HostBindingHandler($event) { return ctx.mousedown($event); })(\"mouseup\", function DropDownButtonComponent_mouseup_HostBindingHandler($event) { return ctx.mouseup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focused)(\"k-widget\", ctx.widgetClasses)(\"k-dropdown-button\", ctx.widgetClasses);\n } }, inputs: { icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", primary: \"primary\", look: \"look\", tabIndex: \"tabIndex\", popupSettings: \"popupSettings\", disabled: \"disabled\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\" }, outputs: { itemClick: \"itemClick\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoDropDownButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c8, decls: 7, vars: 14, consts: [[\"kendoButton\", \"\", \"role\", \"menu\", \"type\", \"button\", 3, \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"look\", \"primary\", \"click\", \"focus\", \"blur\"], [\"button\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"], [\"buttonList\", \"\"]], template: function DropDownButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownButtonComponent_Template_button_click_0_listener() { return ctx.openPopup(); })(\"focus\", function DropDownButtonComponent_Template_button_focus_0_listener() { return ctx.handleFocus(); })(\"blur\", function DropDownButtonComponent_Template_button_blur_0_listener() { return ctx.onButtonBlur(); });\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, DropDownButtonComponent_ng_template_3_Template, 2, 5, \"ng-template\", null, 2, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(5, null, 3);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass)(\"look\", ctx.look)(\"primary\", ctx.primary);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId);\n } }, directives: [ButtonDirective, ɵngcc2.NgClass, ListComponent], encapsulation: 2 });\n/** @nocollapse */\nDropDownButtonComponent.ctorParameters = () => [\n { type: FocusService },\n { type: NavigationService },\n { type: ElementRef },\n { type: NgZone },\n { type: PopupService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nDropDownButtonComponent.propDecorators = {\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n popupSettings: [{ type: Input }],\n textField: [{ type: Input }],\n disabled: [{ type: Input }],\n data: [{ type: Input }],\n primary: [{ type: Input }],\n look: [{ type: Input }],\n buttonClass: [{ type: Input }],\n tabIndex: [{ type: Input }],\n itemClick: [{ type: Output }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n focused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n widgetClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-dropdown-button',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n itemTemplate: [{ type: ContentChild, args: [ButtonItemTemplateDirective,] }],\n button: [{ type: ViewChild, args: ['button', { static: true },] }],\n buttonList: [{ type: ViewChild, args: ['buttonList', { static: true },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { static: true },] }],\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef, static: true },] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n keypress: [{ type: HostListener, args: ['keypress', ['$event'],] }],\n keyup: [{ type: HostListener, args: ['keyup', ['$event'],] }],\n mousedown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],\n mouseup: [{ type: HostListener, args: ['mouseup', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropDownButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ],\n selector: 'kendo-dropdownbutton',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], popupSettings: [{\n type: Input\n }], disabled: [{\n type: Input\n }], data: [{\n type: Input\n }], focused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dropdown-button']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], \n /**\n * @hidden\n */\n keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], \n /**\n * @hidden\n */\n mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], \n /**\n * @hidden\n */\n mouseup: [{\n type: HostListener,\n args: ['mouseup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], buttonList: [{\n type: ViewChild,\n args: ['buttonList', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownButtonComponent`—The DropDownButtonComponent component class.\n */\nclass DropDownButtonModule {\n}\nDropDownButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DropDownButtonModule });\nDropDownButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DropDownButtonModule_Factory(t) { return new (t || DropDownButtonModule)(); }, imports: [[CommonModule, PopupModule, ListModule, ButtonModule], ListModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownButtonModule, { declarations: function () { return [DropDownButtonComponent]; }, imports: function () { return [CommonModule, PopupModule, ListModule, ButtonModule]; }, exports: function () { return [DropDownButtonComponent, ListModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropDownButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [DropDownButtonComponent],\n exports: [DropDownButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ListModule, ButtonModule]\n }]\n }], null, null); })();\n\n/**\n * Displays a Chip that represents an input, attribute or an action.\n */\nclass ChipComponent {\n constructor(element, renderer, ngZone, localizationService) {\n this.element = element;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localizationService = localizationService;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `filled`\n * * `outlined`\n */\n this.look = 'filled';\n /**\n * Specifies the selected state of the Chip.\n */\n this.selected = false;\n /**\n * Specifies if the Chip will be removable or not.\n * If the property is set to `true`, the Chip renders a remove icon.\n */\n this.removable = false;\n /**\n * Specifies the Chip type.\n *\n * The possible values are:\n * - `none` (default)\n * - `success`\n * - `error`\n * - `warning`\n * - `info`\n */\n this.type = 'none';\n /**\n * If set to `true`, the Chip will be disabled.\n */\n this.disabled = false;\n /**\n * Fires each time the user clicks the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.tabIndex = 0;\n this.hostClass = true;\n this.focused = false;\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get outlineClass() {\n return this.look === 'outlined';\n }\n get filledClass() {\n return this.look === 'filled';\n }\n get hasIconClass() {\n return this.icon || this.iconClass ? true : false;\n }\n get disabledClass() {\n return this.disabled;\n }\n get selectedClass() {\n return this.selected;\n }\n get focusedClass() {\n return this.focused;\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n if (this.detachDomEvents) {\n this.detachDomEvents();\n }\n }\n ngAfterViewInit() {\n const chip = this.element.nativeElement;\n const typeClass = this.typeClass();\n if (this.type !== 'none') {\n this.renderer.addClass(chip, typeClass);\n }\n this.attachElementEventHandlers(chip);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n if (this.iconClass) {\n return `${this.iconClass}`;\n }\n }\n /**\n * @hidden\n */\n get selectedIconClasses() {\n if (this.selectedIcon) {\n return `${this.selectedIcon}`;\n }\n return `k-icon k-i-check`;\n }\n /**\n * @hidden\n */\n get removeIconClasses() {\n if (this.removeIcon) {\n return `${this.removeIcon}`;\n }\n return `k-icon k-i-close-circle`;\n }\n /**\n * @hidden\n */\n typeClass() {\n return {\n 'none': '',\n 'success': 'k-chip-success',\n 'warning': 'k-chip-warning',\n 'error': 'k-chip-error',\n 'info': 'k-chip-info'\n }[this.type];\n }\n /**\n * Focuses the Chip component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.focus();\n }\n }\n /**\n * Blurs the Chip component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.blur();\n }\n }\n /**\n * @hidden\n */\n onRemoveClick(e) {\n if (this.removable) {\n this.remove.emit({ sender: this, originalEvent: e });\n }\n }\n attachElementEventHandlers(chip) {\n this.ngZone.runOutsideAngular(() => {\n const focusListener = this.renderer.listen(chip, 'focus', () => {\n this.renderer.addClass(chip, 'k-chip-focused');\n });\n const blurListener = this.renderer.listen(chip, 'blur', () => {\n this.renderer.removeClass(chip, 'k-chip-focused');\n });\n this.detachDomEvents = () => {\n focusListener();\n blurListener();\n };\n });\n }\n}\nChipComponent.ɵfac = function ChipComponent_Factory(t) { return new (t || ChipComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChipComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ChipComponent, selectors: [[\"kendo-chip\"]], hostVars: 16, hostBindings: function ChipComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndex)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-chip\", ctx.hostClass)(\"k-chip-outline\", ctx.outlineClass)(\"k-chip-filled\", ctx.filledClass)(\"k-chip-has-icon\", ctx.hasIconClass)(\"k-chip-disabled\", ctx.disabledClass)(\"k-chip-selected\", ctx.selectedClass)(\"k-chip-focused\", ctx.focusedClass);\n } }, inputs: { look: \"look\", selected: \"selected\", removable: \"removable\", type: \"type\", disabled: \"disabled\", label: \"label\", icon: \"icon\", iconClass: \"iconClass\", selectedIcon: \"selectedIcon\", removeIcon: \"removeIcon\" }, outputs: { remove: \"remove\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ])], ngContentSelectors: _c8, decls: 7, vars: 5, consts: [[1, \"k-selected-icon-wrapper\"], [\"class\", \"k-selected-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-chip-icon\", 3, \"ngClass\", 4, \"ngIf\"], [1, \"k-chip-content\"], [\"class\", \"k-chip-label\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-remove-icon\", 3, \"click\", 4, \"ngIf\"], [1, \"k-selected-icon\", 3, \"ngClass\"], [1, \"k-chip-icon\", 3, \"ngClass\"], [1, \"k-chip-label\"], [1, \"k-remove-icon\", 3, \"click\"], [3, \"ngClass\"]], template: function ChipComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, ChipComponent_span_1_Template, 1, 1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ChipComponent_span_2_Template, 1, 1, \"span\", 2);\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, ChipComponent_span_4_Template, 2, 1, \"span\", 4);\n ɵngcc0.ɵɵtemplate(5, ChipComponent_ng_content_5_Template, 1, 0, \"ng-content\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ChipComponent_span_6_Template, 2, 1, \"span\", 6);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.selected);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon || ctx.iconClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.removable);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgClass], encapsulation: 2 });\n/** @nocollapse */\nChipComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone },\n { type: LocalizationService }\n];\nChipComponent.propDecorators = {\n look: [{ type: Input }],\n label: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n selected: [{ type: Input }],\n selectedIcon: [{ type: Input }],\n removable: [{ type: Input }],\n removeIcon: [{ type: Input }],\n type: [{ type: Input }],\n disabled: [{ type: Input }],\n remove: [{ type: Output }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n hostClass: [{ type: HostBinding, args: ['class.k-chip',] }],\n outlineClass: [{ type: HostBinding, args: ['class.k-chip-outline',] }],\n filledClass: [{ type: HostBinding, args: ['class.k-chip-filled',] }],\n hasIconClass: [{ type: HostBinding, args: ['class.k-chip-has-icon',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-chip-disabled',] }],\n selectedClass: [{ type: HostBinding, args: ['class.k-chip-selected',] }],\n focusedClass: [{ type: HostBinding, args: ['class.k-chip-focused',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip',\n template: `\n \n \n \n \n\n \n \n\n \n \n {{ label }}\n \n \n \n\n \n \n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.LocalizationService }]; }, { look: [{\n type: Input\n }], selected: [{\n type: Input\n }], removable: [{\n type: Input\n }], type: [{\n type: Input\n }], disabled: [{\n type: Input\n }], remove: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-chip']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], outlineClass: [{\n type: HostBinding,\n args: ['class.k-chip-outline']\n }], filledClass: [{\n type: HostBinding,\n args: ['class.k-chip-filled']\n }], hasIconClass: [{\n type: HostBinding,\n args: ['class.k-chip-has-icon']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-chip-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['class.k-chip-selected']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-chip-focused']\n }], label: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], selectedIcon: [{\n type: Input\n }], removeIcon: [{\n type: Input\n }] }); })();\n\nclass ChipListComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClass = true;\n /**\n * Sets the selection mode of the ChipList.\n *\n * The available values are:\n * * `none` (default)\n * * `single`\n * * `multiple`\n */\n this.selection = 'none';\n /**\n * Fires each time when the ChipList selection is changed.\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks on the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get single() {\n return this.selection === 'single';\n }\n get multiple() {\n return this.selection === 'multiple';\n }\n /**\n * @hidden\n */\n onClick($event) {\n const target = $event.target;\n const isRemoveClicked = closest(target, '.k-remove-icon');\n const clickedChip = closest(target, '.k-chip');\n const chip = this.chips.find((chip) => clickedChip === chip.element.nativeElement);\n if (isRemoveClicked && clickedChip) {\n const removeEventArgs = { sender: this, originalEvent: $event, removedChip: chip };\n this.remove.emit(removeEventArgs);\n }\n if (this.selection !== 'none' && clickedChip && !isRemoveClicked) {\n this.setSelection(chip);\n }\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n selectedChips() {\n return this.chips.reduce((acc, cur, idx) => { return cur.selected ? acc.concat(idx) : acc; }, []);\n }\n /**\n * Updates the selection on click of a Chip. Emits events.\n */\n setSelection(chip) {\n if (this.selection === 'single') {\n this.clearSelection(chip);\n }\n chip.selected = !chip.selected;\n this.selectedChange.emit(this.selectedChips());\n }\n clearSelection(chip) {\n this.chips.forEach((c) => {\n if (chip !== c) {\n c.selected = false;\n }\n });\n }\n}\nChipListComponent.ɵfac = function ChipListComponent_Factory(t) { return new (t || ChipListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChipListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ChipListComponent, selectors: [[\"kendo-chip-list\"]], contentQueries: function ChipListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ChipComponent, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.chips = _t);\n } }, hostVars: 7, hostBindings: function ChipListComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ChipListComponent_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-chip-list\", ctx.hostClass)(\"k-selection-single\", ctx.single)(\"k-selection-multiple\", ctx.multiple);\n } }, inputs: { selection: \"selection\" }, outputs: { selectedChange: \"selectedChange\", remove: \"remove\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ])], ngContentSelectors: _c8, decls: 1, vars: 0, template: function ChipListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nChipListComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nChipListComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-chip-list',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n selection: [{ type: Input }],\n selectedChange: [{ type: Output }],\n remove: [{ type: Output }],\n chips: [{ type: ContentChildren, args: [ChipComponent,] }],\n single: [{ type: HostBinding, args: ['class.k-selection-single',] }],\n multiple: [{ type: HostBinding, args: ['class.k-selection-multiple',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip-list',\n template: `\n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-chip-list']\n }], selection: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], single: [{\n type: HostBinding,\n args: ['class.k-selection-single']\n }], multiple: [{\n type: HostBinding,\n args: ['class.k-selection-multiple']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], chips: [{\n type: ContentChildren,\n args: [ChipComponent]\n }] }); })();\n\nconst exportedModules = [\n ChipComponent,\n ChipListComponent\n];\nconst declarations = [\n ...exportedModules\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Chip and ChipList components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Chip module\n * import { ChipModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ChipModule], // import Chip module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nclass ChipModule {\n}\nChipModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ChipModule });\nChipModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ChipModule_Factory(t) { return new (t || ChipModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ChipModule, { declarations: function () { return [ChipComponent, ChipListComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ChipComponent, ChipListComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Buttons components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Buttons module\n * import { ButtonsModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonsModule], // import Buttons module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonsModule {\n}\nButtonsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonsModule });\nButtonsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonsModule_Factory(t) { return new (t || ButtonsModule)(); }, imports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonsModule, { exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonsModule, [{\n type: NgModule,\n args: [{\n exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { KendoButtonService, FocusService, FocusableDirective, ButtonItemTemplateDirective, ListButton, ListComponent, ListModule, TemplateContextDirective, NAVIGATION_CONFIG, NavigationService, ButtonDirective, ButtonDirective as Button, ButtonGroupComponent, ButtonGroupComponent as ButtonGroup, ButtonGroupModule, ButtonModule, ButtonsModule, SplitButtonComponent, SplitButtonComponent as SplitButton, SplitButtonModule, DropDownButtonComponent, DropDownButtonComponent as DropDownButton, DropDownButtonModule, ChipComponent, ChipListComponent, ChipModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs0Q0FhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBaUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1TUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OzhKQXFDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7dUNBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1TEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21IQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyRkF5RUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyRkF3REU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3RUF5Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkFlRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7MEJBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBPcHRpb25hbCwgTmdab25lLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpc0Rldk1vZGUsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBOZ01vZHVsZSwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIEluamVjdGlvblRva2VuLCBJbmplY3QsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLZXlzLCBpc0NoYW5nZWQsIGlzRG9jdW1lbnRBdmFpbGFibGUsIGhhc09ic2VydmVycywgZ3VpZCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWNvbW1vbic7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWwxMG4nO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBvcHVwU2VydmljZSwgUG9wdXBNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1wb3B1cCc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBLZW5kb0J1dHRvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvb2tDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCdkZWZhdWx0Jyk7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tlZCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tlZCQgPSB0aGlzLmJ1dHRvbkNsaWNrZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIGNsaWNrKGJ1dHRvbikge1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrZWQubmV4dChidXR0b24pO1xuICAgIH1cbiAgICBzZXRCdXR0b25Mb29rKGxvb2spIHtcbiAgICAgICAgdGhpcy5idXR0b25Mb29rQ2hhbmdlLm5leHQobG9vayk7XG4gICAgfVxufVxuS2VuZG9CdXR0b25TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCBTUEFOX1RBR19OQU1FID0gJ1NQQU4nO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBLZW5kbyBVSSBCdXR0b24gY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICovXG5jbGFzcyBCdXR0b25EaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIHJlbmRlcmVyLCBzZXJ2aWNlLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb3ZpZGVzIHZpc3VhbCBzdHlsaW5nIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBCdXR0b24gaXMgYWN0aXZlLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCBgdG9nZ2xlYWJsZWAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRvZ2dsZWFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgdmlzdWFsIHdlaWdodCB0byB0aGUgQnV0dG9uIGFuZCBtYWtlcyBpdCBwcmltYXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGFuZ2VzIHRoZSB2aXN1YWwgYXBwZWFyYW5jZSBieSB1c2luZyBhbHRlcm5hdGl2ZSBzdHlsaW5nIG9wdGlvbnNcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlc10oeyUgc2x1ZyBhcHBlYXJhbmNlX2J1dHRvbiAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogW2BCdXR0b25Mb29rYF0oeyUgc2x1ZyBhcGlfYnV0dG9uc19idXR0b25sb29rICV9KSA9IGBmbGF0YCB8IGBvdXRsaW5lYFxuICAgICAgICAgKiAqIGBjbGVhcmBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubG9vayA9ICdkZWZhdWx0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucm9sZSA9ICdidXR0b24nO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiBhIHRvZ2dsZWFibGUgYnV0dG9uIGlzIGNoYW5nZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBldmVudCBhcmd1bWVudCBpcyB0aGUgbmV3IHNlbGVjdGVkIHN0YXRlIChib29sZWFuKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgY2xpY2tzIHRoZSBidXR0b24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0ljb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0ljb25DbGFzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gbG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBhbGlhc1xuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB0b2dnbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZWFibGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgdG9nZ2xhYmxlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlYWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgQnV0dG9uLlxuICAgICAqL1xuICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkIHx8IGZhbHNlO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB0YWJJbmRleChpbmRleCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQudGFiSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnRhYkluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBuYW1lIGZvciBhbiBleGlzdGluZyBpY29uIGluIGEgS2VuZG8gVUkgdGhlbWUuXG4gICAgICogVGhlIGljb24gaXMgcmVuZGVyZWQgaW5zaWRlIHRoZSBCdXR0b24gYnkgYSBgc3Bhbi5rLWljb25gIGVsZW1lbnQuXG4gICAgICovXG4gICAgc2V0IGljb24oaWNvbikge1xuICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgdGhpcy5pY29uU2V0dGVyKGljb24sICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSWNvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xhc3NlcyA9ICdrLWljb24gay1pLScgKyBpY29uO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSWNvbihjbGFzc2VzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0ljb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbk5vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgQ1NTIGNsYXNzJm1kYXNoO29yIG11bHRpcGxlIGNsYXNzZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcyZtZGFzaDtcbiAgICAgKiB3aGljaCBhcmUgYXBwbGllZCB0byBhIGBzcGFuYCBlbGVtZW50IGluc2lkZSB0aGUgQnV0dG9uLiBBbGxvd3MgdGhlIHVzYWdlIG9mIGN1c3RvbSBpY29ucy5cbiAgICAgKi9cbiAgICBzZXQgaWNvbkNsYXNzKGljb25DbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKGljb25DbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuaWNvblNldHRlcihpY29uQ2xhc3NOYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ljb25DbGFzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJY29uKGljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzSWNvbkNsYXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUljb25Ob2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIFVSTCB3aGljaCBpcyB1c2VkIGZvciBhbiBgaW1nYCBlbGVtZW50IGluc2lkZSB0aGUgQnV0dG9uLlxuICAgICAqIFRoZSBVUkwgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJZiByZWxhdGl2ZSwgaXQgaXMgZXZhbHVhdGVkIHdpdGggcmVsYXRpb24gdG8gdGhlIHdlYiBwYWdlIFVSTC5cbiAgICAgKi9cbiAgICBzZXQgaW1hZ2VVcmwoaW1hZ2VVcmwpIHtcbiAgICAgICAgaWYgKGltYWdlVXJsKSB7XG4gICAgICAgICAgICB0aGlzLmljb25TZXR0ZXIoaW1hZ2VVcmwsIHRoaXMuYWRkSW1nSWNvbi5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSW1hZ2VOb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgaXQgZGlzYWJsZXMgdGhlIEJ1dHRvbi5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50LCAnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGlzRm9jdXNlZChpc0ZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy50b2dnbGVDbGFzcygnay1zdGF0ZS1mb2N1c2VkJywgaXNGb2N1c2VkKTtcbiAgICAgICAgdGhpcy5fZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICB9XG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWQ7XG4gICAgfVxuICAgIGdldCBjbGFzc0J1dHRvbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBjbGFzc1ByaW1hcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaW1hcnk7XG4gICAgfVxuICAgIGdldCBpc0ZsYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdmbGF0JztcbiAgICB9XG4gICAgZ2V0IGlzQmFyZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vayA9PT0gJ2JhcmUnO1xuICAgIH1cbiAgICBnZXQgaXNPdXRsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnb3V0bGluZSc7XG4gICAgfVxuICAgIGdldCBpc0NsZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnY2xlYXInO1xuICAgIH1cbiAgICBnZXQgcm9sZVNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgICB9XG4gICAgZ2V0IGNsYXNzRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBjbGFzc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGdldCBnZXREaXJlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQmx1cigpIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGlzU3BhbiA9IHRoaXMuZWxlbWVudC50YWdOYW1lID09PSBTUEFOX1RBR19OQU1FO1xuICAgICAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkxvb2tDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuYnV0dG9uTG9va0NoYW5nZVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigobG9vaykgPT4gbG9vayAhPT0gJ2RlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChsb29rKSA9PiB0aGlzLmxvb2sgPSBsb29rKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3JvbGUnKSAmJiB0aGlzLnRvZ2dsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVBcmlhUHJlc3NlZCh0aGlzLnRvZ2dsZWFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgdGhpcy5yb2xlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCwgJ2NsaWNrJywgdGhpcy5fb25CdXR0b25DbGljay5iaW5kKHRoaXMpKSk7XG4gICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCwgJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNTcGFuICYmIChldmVudC5rZXlDb2RlID09PSBLZXlzLlNwYWNlIHx8IGV2ZW50LmtleUNvZGUgPT09IEtleXMuRW50ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQnV0dG9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2UpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCgndG9nZ2xhYmxlJywgY2hhbmdlKSB8fCBpc0NoYW5nZWQoJ3RvZ2dsZWFibGUnLCBjaGFuZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUFyaWFQcmVzc2VkKHRoaXMudG9nZ2xlYWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLnNldEljb25UZXh0Q2xhc3NlcygpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZU5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmljb25Ob2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IG51bGw7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgdGhpcy5idXR0b25Mb29rQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkxvb2tDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWZlclRpbWVvdXQpO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb3JFYWNoKHVuYmluZEhhbmRsZXIgPT4gdW5iaW5kSGFuZGxlcigpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgQnV0dG9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIEJ1dHRvbiBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogSW50ZXJuYWwgc2V0dGVyIHRoYXQgdHJpZ2dlcnMgc2VsZWN0ZWRDaGFuZ2VcbiAgICAgKi9cbiAgICBzZXRTZWxlY3RlZCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5zZWxlY3RlZCAhPT0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMudG9nZ2xlQ2xhc3MoJ2stc3RhdGUtYWN0aXZlJywgdGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIGlmIChjaGFuZ2VkICYmIGhhc09ic2VydmVycyh0aGlzLnNlbGVjdGVkQ2hhbmdlKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9nZ2xlQXJpYVByZXNzZWQoc2hvdWxkU2V0KSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNldCkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzVGV4dCgpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQpLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEltZ0ljb24oaW1hZ2VVcmwpIHtcbiAgICAgICAgbGV0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOb2RlKSB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmltYWdlTm9kZSwgJ3NyYycsIGltYWdlVXJsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VOb2RlID0gcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmltYWdlTm9kZSwgJ3NyYycsIGltYWdlVXJsKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW1hZ2VOb2RlLCAnY2xhc3NOYW1lJywgJ2staW1hZ2UnKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmltYWdlTm9kZSwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLnByZXBlbmRDaGlsZCh0aGlzLmltYWdlTm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkSWNvbihjbGFzc05hbWVzKSB7XG4gICAgICAgIGxldCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XG4gICAgICAgIGlmICh0aGlzLmljb25Ob2RlKSB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmljb25Ob2RlLCAnY2xhc3NOYW1lJywgY2xhc3NOYW1lcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmljb25Ob2RlID0gcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5pY29uTm9kZSwgJ2NsYXNzTmFtZScsIGNsYXNzTmFtZXMpO1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaWNvbk5vZGUsICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5wcmVwZW5kQ2hpbGQodGhpcy5pY29uTm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGVuZENoaWxkKG5vZGUpIHtcbiAgICAgICAgdGhpcy5kZWZlcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlciAmJiBub2RlICE9PSB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCwgbm9kZSwgdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmZXIoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWZlclRpbWVvdXQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGljb25TZXR0ZXIoaWNvbiwgaW5zZXJ0SWNvbikge1xuICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgaW5zZXJ0SWNvbihpY29uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEljb25UZXh0Q2xhc3NlcygpO1xuICAgIH1cbiAgICByZW1vdmVJbWFnZU5vZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTm9kZSAmJiB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5pbWFnZU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudCwgdGhpcy5pbWFnZU5vZGUpO1xuICAgICAgICAgICAgdGhpcy5pbWFnZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUljb25Ob2RlKCkge1xuICAgICAgICBpZiAodGhpcy5pY29uTm9kZSAmJiB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5pY29uTm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLmljb25Ob2RlKTtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUljb25Ob2RlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJY29uICYmICF0aGlzLmlzSWNvbkNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUljb25Ob2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0SWNvblRleHRDbGFzc2VzKCkge1xuICAgICAgICBjb25zdCBoYXNJY29uID0gdGhpcy5pc0ljb24gfHwgdGhpcy5pc0ljb25DbGFzcyB8fCB0aGlzLmltYWdlTm9kZTtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9IHRoaXMuaGFzVGV4dCgpO1xuICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzKCdrLWJ1dHRvbi1pY29uJywgaGFzSWNvbiAmJiAhaGFzVGV4dCk7XG4gICAgICAgIHRoaXMudG9nZ2xlQ2xhc3MoJ2stYnV0dG9uLWljb250ZXh0JywgaGFzSWNvbiAmJiBoYXNUZXh0KTtcbiAgICB9XG4gICAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lLCBhZGQpIHtcbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfb25CdXR0b25DbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuY2xpY2sodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50b2dnbGFibGUgJiYgIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCghdGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5CdXR0b25EaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvQnV0dG9uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdidXR0b25ba2VuZG9CdXR0b25dLCBzcGFuW2tlbmRvQnV0dG9uXScgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5CdXR0b25EaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEtlbmRvQnV0dG9uU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuQnV0dG9uRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvZ2dsZWFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvZ2dsYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcHJpbWFyeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9vazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGltYWdlVXJsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm9sZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWRDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbGljazogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsYXNzQnV0dG9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbicsXSB9XSxcbiAgICBjbGFzc1ByaW1hcnk6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstcHJpbWFyeScsXSB9XSxcbiAgICBpc0ZsYXQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmxhdCcsXSB9XSxcbiAgICBpc0JhcmU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYmFyZScsXSB9XSxcbiAgICBpc091dGxpbmU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstb3V0bGluZScsXSB9XSxcbiAgICBpc0NsZWFyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1jbGVhcicsXSB9XSxcbiAgICByb2xlU2V0dGVyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgY2xhc3NEaXNhYmxlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLWRpc2FibGVkJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XSxcbiAgICBjbGFzc0FjdGl2ZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1hY3RpdmUnLF0gfV0sXG4gICAgZ2V0RGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnYmx1cicsXSB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlICovXG5jb25zdCByZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNQcmVzZW50ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRpY2sgPSAoZikgPT4gKHJlc29sdmVkUHJvbWlzZS50aGVuKGYpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBpc0RvY3VtZW50Tm9kZShjb250YWluZXIpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLm5vZGVUeXBlID09PSA5O1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBpZiAoZWxlbWVudC5jbG9zZXN0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA/XG4gICAgICAgIChlbCwgc2VsKSA9PiBlbC5tYXRjaGVzKHNlbClcbiAgICAgICAgOiAoZWwsIHNlbCkgPT4gZWwubXNNYXRjaGVzU2VsZWN0b3Ioc2VsKTtcbiAgICBsZXQgbm9kZSA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKG5vZGUgJiYgIWlzRG9jdW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgIGlmIChtYXRjaGVzKG5vZGUsIHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBhIHNwZWNpZmllZCBldmVudC5cbiAgICAgKiBJbiB0aGlzIHdheSwgdGhlIHNvdXJjZSBjb21wb25lbnQgc3VwcHJlc3NlcyB0aGUgYnVpbHQtaW4gYmVoYXZpb3IgdGhhdCBmb2xsb3dzIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgcHJldmVudGVkIGJ5IGFueSBvZiBpdHMgc3Vic2NyaWJlcnMsIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkZWZhdWx0IGFjdGlvbiB3YXMgcHJldmVudGVkLiBPdGhlcndpc2UsIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZlbnRlZDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB0YWJpbmRleCA9ICd0YWJpbmRleCc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIEJ1dHRvbkdyb3VwIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqL1xuY2xhc3MgQnV0dG9uR3JvdXBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UsIGxvY2FsaXphdGlvbiwgZWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIHNlbGVjdGlvbiBtb2RlIG9mIHRoZSBCdXR0b25Hcm91cCBpcyBzZXQgdG8gYG11bHRpcGxlYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gJ211bHRpcGxlJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoYW5nZXMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIGJ5IHVzaW5nIGFsdGVybmF0aXZlIHN0eWxpbmcgb3B0aW9uc1xuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzXSh7JSBzbHVnIHN0eWxpbmdfYnV0dG9uZ3JvdXAgJX0pKS5cbiAgICAgICAgICogVGhlIGBsb29rYCBwcm9wZXJ0eSBvZiB0aGUgQnV0dG9uR3JvdXAgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBgbG9va2AgcHJvcGVydHlcbiAgICAgICAgICogb2YgdGhlIGluZGl2aWR1YWwgYnV0dG9ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBncm91cC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIGBmbGF0YFxuICAgICAgICAgKiAqIGBvdXRsaW5lYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb29rID0gJ2RlZmF1bHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZXZlcnkgdGltZSBrZXlib2FyZCBuYXZpZ2F0aW9uIG9jY3Vycy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IGxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBbYHRhYkluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzZXQgdGFiSW5kZXgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiSW5kZXggPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCB3cmFwcGVyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBzdHJldGNoZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy53aWR0aDtcbiAgICB9XG4gICAgZ2V0IGlzRmxhdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vayA9PT0gJ2ZsYXQnO1xuICAgIH1cbiAgICBnZXQgaXNCYXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnYmFyZSc7XG4gICAgfVxuICAgIGdldCBpc091dGxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdvdXRsaW5lJztcbiAgICB9XG4gICAgZ2V0IGdldFJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VsZWN0aW9uU2luZ2xlKCkgPyAncmFkaW9ncm91cCcgOiAnZ3JvdXAnO1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIGdldCBhcmlhRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgd3JhcHBlcldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgICB9XG4gICAgZ2V0IHdyYXBwZXJUYWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0aGlzLmN1cnJlbnRUYWJJbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRm9jdXMoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkZvY3VzKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWJJbmRleCA9IC0xO1xuICAgICAgICBjb25zdCBmb2N1c2VkSW5kZXggPSB0aGlzLmJ1dHRvbnMudG9BcnJheSgpLmZpbmRJbmRleChjdXJyZW50ID0+IGN1cnJlbnQuZWxlbWVudC50YWJJbmRleCAhPT0gLTEpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGZvY3VzZWRJbmRleCA9PT0gLTEgPyAwIDogZm9jdXNlZEluZGV4O1xuICAgICAgICB0aGlzLmZvY3VzKHRoaXMuYnV0dG9ucy5maWx0ZXIoKF9jdXJyZW50LCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gaW5kZXg7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZvY3Vzb3V0KGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQucGFyZW50Tm9kZSAhPT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmb2N1cyh0aGlzLmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gdGhpcy50YWJJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNldEJ1dHRvbkxvb2sodGhpcy5sb29rKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuYnV0dG9uQ2xpY2tlZCQuc3Vic2NyaWJlKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdTZWxlY3Rpb25WYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uU2luZ2xlKCkpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlKHRoaXMuYnV0dG9ucy5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50ICE9PSBidXR0b24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmb2N1cyh0aGlzLmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25WYWx1ZSA9ICFidXR0b24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYnV0dG9uLnRvZ2dsYWJsZSkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRTZWxlY3RlZChuZXdTZWxlY3Rpb25WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKHRhYmluZGV4LCBcIjBcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2UpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCgnZGlzYWJsZWQnLCBjaGFuZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmRpc2FibGVkKSkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5idXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1dHRvbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiMFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiLTFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMuZmlyc3QucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5idXR0b25zLmZpcnN0LmVsZW1lbnQsICdrLWdyb3VwLXN0YXJ0Jyk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnMubGFzdC5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmJ1dHRvbnMubGFzdC5lbGVtZW50LCAnay1ncm91cC1lbmQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICB0aGlzLnZlcmlmeVNldHRpbmdzKCk7XG4gICAgfVxuICAgIG5hdmlnYXRlRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgbGV0IGZvY3VzZWRJbmRleCA9IHRoaXMuYnV0dG9ucy50b0FycmF5KCkuZmluZEluZGV4KGN1cnJlbnQgPT4gY3VycmVudC5lbGVtZW50LnRhYkluZGV4ICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSAwO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmJ1dHRvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0gbmV3IFByZXZlbnRhYmxlRXZlbnQoKTtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMuQXJyb3dSaWdodCAmJiBmb2N1c2VkSW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGUuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICAgICAgaWYgKCFldmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZm9jdXModGhpcy5idXR0b25zLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cyh0aGlzLmJ1dHRvbnMuZmlsdGVyKChfY3VycmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSBmb2N1c2VkSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5BcnJvd0xlZnQgJiYgZm9jdXNlZEluZGV4ID4gZmlyc3RJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmb2N1cyh0aGlzLmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKHRoaXMuYnV0dG9ucy5maWx0ZXIoKF9jdXJyZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IGZvY3VzZWRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoYnV0dG9ucykge1xuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgYnV0dG9uLnNldFNlbGVjdGVkKGZhbHNlKTtcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiLTFcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhY3RpdmF0ZShidXR0b25zKSB7XG4gICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBidXR0b24uc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKHRhYmluZGV4LCBcIjBcIik7XG4gICAgICAgICAgICBidXR0b24uZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZm9jdXMoYnV0dG9ucykge1xuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSh0YWJpbmRleCwgXCItMVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZvY3VzKGJ1dHRvbnMpIHtcbiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiMFwiKTtcbiAgICAgICAgICAgIGJ1dHRvbi5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmVyaWZ5U2V0dGluZ3MoKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TaW5nbGUoKSAmJiB0aGlzLmJ1dHRvbnMuZmlsdGVyKGJ1dHRvbiA9PiBidXR0b24uc2VsZWN0ZWQpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhdmluZyBtdWx0aXBsZSBzZWxlY3RlZCBidXR0b25zIHdpdGggc2luZ2xlIHNlbGVjdGlvbiBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1NlbGVjdGlvblNpbmdsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uID09PSAnc2luZ2xlJztcbiAgICB9XG59XG5CdXR0b25Hcm91cENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9CdXR0b25Hcm91cCcsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIEtlbmRvQnV0dG9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmJ1dHRvbmdyb3VwJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWJ1dHRvbmdyb3VwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJba2VuZG9CdXR0b25dXCI+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQnV0dG9uR3JvdXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBLZW5kb0J1dHRvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfVxuXTtcbkJ1dHRvbkdyb3VwQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydkaXNhYmxlZCcsXSB9XSxcbiAgICBzZWxlY3Rpb246IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3NlbGVjdGlvbicsXSB9XSxcbiAgICB3aWR0aDogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnd2lkdGgnLF0gfV0sXG4gICAgbG9vazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5hdmlnYXRlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgYnV0dG9uczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQnV0dG9uRGlyZWN0aXZlLF0gfV0sXG4gICAgd3JhcHBlckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1ncm91cCcsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dLFxuICAgIHN0cmV0Y2hlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1ncm91cC1zdHJldGNoZWQnLF0gfV0sXG4gICAgaXNGbGF0OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1ncm91cC1mbGF0JyxdIH1dLFxuICAgIGlzQmFyZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1idXR0b24tZ3JvdXAtYmFyZScsXSB9XSxcbiAgICBpc091dGxpbmU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uLWdyb3VwLW91dGxpbmUnLF0gfV0sXG4gICAgZ2V0Um9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGRpcjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgYXJpYURpc2FibGVkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtZGlzYWJsZWQnLF0gfV0sXG4gICAgd3JhcHBlcldpZHRoOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS53aWR0aCcsXSB9XSxcbiAgICB3cmFwcGVyVGFiSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGFiaW5kZXgnLF0gfV0sXG4gICAga2V5ZG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleWRvd24nLCBbJyRldmVudCddLF0gfV0sXG4gICAgb25Gb2N1czogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIGZvY3Vzb3V0OiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnZm9jdXNvdXQnLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZXMnXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBCdXR0b24gZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIEJ1dHRvbiBtb2R1bGVcbiAqIGltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWJ1dHRvbnMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBCdXR0b25Nb2R1bGVdLCAvLyBpbXBvcnQgQnV0dG9uIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQnV0dG9uTW9kdWxlIHtcbn1cbkJ1dHRvbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQnV0dG9uRGlyZWN0aXZlXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbQnV0dG9uRGlyZWN0aXZlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYEJ1dHRvbkdyb3VwQ29tcG9uZW50YCZtZGFzaDtUaGUgQnV0dG9uR3JvdXBDb21wb25lbnQgY29tcG9uZW50IGNsYXNzLlxuICovXG5jbGFzcyBCdXR0b25Hcm91cE1vZHVsZSB7XG59XG5CdXR0b25Hcm91cE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQnV0dG9uR3JvdXBDb21wb25lbnRdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtCdXR0b25Hcm91cENvbXBvbmVudF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnV0dG9uTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpkaXJlY3RpdmUtc2VsZWN0b3ItbmFtZSAqL1xuLyoqXG4gKiBVc2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgaXRlbSBjb250ZW50LlxuICpcbiAqIFRvIGRlZmluZSB0aGUgaXRlbSB0ZW1wbGF0ZSwgbmVzdCBhIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvPENvbXBvbmVudE5hbWU+SXRlbVRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLlxuICpcbiAqIEZvciB0aGUgRHJvcERvd25CdXR0b24sIHVzZSB0aGUgYGtlbmRvRHJvcERvd25CdXR0b25JdGVtVGVtcGxhdGVgIGRpcmVjdGl2ZS5cbiAqIEZvciB0aGUgU3BsaXRCdXR0b24sIHVzZSB0aGUgYGtlbmRvU3BsaXRCdXR0b25JdGVtVGVtcGxhdGVgIGRpcmVjdGl2ZS5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0YSBpdGVtLCB1c2UgdGhlIGBsZXQtZGF0YUl0ZW1gIGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLXNwbGl0YnV0dG9uIFtkYXRhXT1cImxpc3RJdGVtc1wiPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvU3BsaXRCdXR0b25JdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICA8c3Bhbj57e2RhdGFJdGVtfX0gb3B0aW9uPC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLXNwbGl0YnV0dG9uPlxuICogIDxrZW5kby1kcm9wZG93bmJ1dHRvbiBbZGF0YV09XCJsaXN0SXRlbXNcIj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0Ryb3BEb3duQnV0dG9uSXRlbVRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgPHNwYW4+e3tkYXRhSXRlbX19IG9wdGlvbjwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1kcm9wZG93bmJ1dHRvbj5cbiAqIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgbGlzdEl0ZW1zOiBBcnJheTxhbnk+ID0gW3tcbiAqICAgICAgdGV4dDogJ2l0ZW0xJyxcbiAqICAgICAgaWNvbjogJ3JlZnJlc2gnLFxuICogICAgICBkaXNhYmxlZDogZmFsc2UsXG4gKiAgICAgIGNsaWNrOiAoZGF0YUl0ZW06IGFueSkgPT4ge1xuICogICAgICAgICAgLy9hY3Rpb25cbiAqICAgICAgfVxuICogIH0sIHtcbiAqICAgICAgdGV4dDogJ2l0ZW0yJyxcbiAqICAgICAgaWNvbjogJ3JlZnJlc2gnLFxuICogICAgICBkaXNhYmxlZDogZmFsc2UsXG4gKiAgICAgIGNsaWNrOiAoZGF0YUl0ZW06IGFueSkgPT4ge1xuICogICAgICAgICAgLy9hY3Rpb25cbiAqICAgICAgfVxuICogIH1dXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gdGhlIFtEcm9wRG93bkxpc3QgdGVtcGxhdGVzXSh7JSBzbHVnIG92ZXJ2aWV3X2RkbCAlfSN0ZW1wbGF0ZXMpLlxuICovXG5jbGFzcyBCdXR0b25JdGVtVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5CdXR0b25JdGVtVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0Ryb3BEb3duQnV0dG9uSXRlbVRlbXBsYXRlXSxba2VuZG9TcGxpdEJ1dHRvbkl0ZW1UZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJ1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMaXN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5vbkl0ZW1CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBnZXRUZXh0KGRhdGFJdGVtKSB7XG4gICAgICAgIGlmIChkYXRhSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dEZpZWxkID8gZGF0YUl0ZW1bdGhpcy50ZXh0RmllbGRdIDogZGF0YUl0ZW0udGV4dCB8fCBkYXRhSXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXRJY29uQ2xhc3NlcyhkYXRhSXRlbSkge1xuICAgICAgICBjb25zdCBpY29uID0gZGF0YUl0ZW0uaWNvbiA/ICdrLWljb24gay1pLScgKyBkYXRhSXRlbS5pY29uIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjbGFzc2VzID0ge307XG4gICAgICAgIGNsYXNzZXNbaWNvbiB8fCBkYXRhSXRlbS5pY29uQ2xhc3NdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICAgIG9uQ2xpY2soaW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkl0ZW1DbGljay5lbWl0KGluZGV4KTtcbiAgICB9XG4gICAgb25CbHVyKCkge1xuICAgICAgICB0aGlzLm9uSXRlbUJsdXIuZW1pdCgpO1xuICAgIH1cbn1cbkxpc3RDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWJ1dHRvbi1saXN0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dWwgY2xhc3M9XCJrLWxpc3Qgay1yZXNldFwiIHVuc2VsZWN0YWJsZT1cIm9uXCI+XG4gICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgdW5zZWxlY3RhYmxlPVwib25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICBrZW5kb0J1dHRvbkZvY3VzYWJsZVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhSXRlbSBvZiBkYXRhOyBsZXQgaW5kZXggPSBpbmRleDtcIlxuICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydrLWl0ZW0nOiB0cnVlLCAnay1zdGF0ZS1kaXNhYmxlZCc6IGRhdGFJdGVtLmRpc2FibGVkfVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkYXRhSXRlbS5kaXNhYmxlZCA/IHRydWUgOiBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW1UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiBpdGVtVGVtcGxhdGU/LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBkYXRhSXRlbVxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWl0ZW1UZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YUl0ZW0uaWNvbiB8fCBkYXRhSXRlbS5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SWNvbkNsYXNzZXMoZGF0YUl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhSXRlbS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJkYXRhSXRlbS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFRleHQoZGF0YUl0ZW0pIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5MaXN0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRleHRGaWVsZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbVRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvbkl0ZW1DbGljazogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uSXRlbUJsdXI6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZvY3VzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgaXNGb2N1c2VkKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gdGhpcy5mb2N1c2VkO1xuICAgIH1cbiAgICBmb2N1cyhpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gaW5kZXg7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGluZGV4KTtcbiAgICB9XG4gICAgcmVzZXRGb2N1cygpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gLTE7XG4gICAgfVxuICAgIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VkSW5kZXg7XG4gICAgfVxuICAgIHNldCBmb2N1c2VkKGluZGV4KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGluZGV4KTtcbiAgICB9XG59XG5Gb2N1c1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGb2N1c2FibGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGZvY3VzU2VydmljZSwgZWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmZvY3VzU2VydmljZSA9IGZvY3VzU2VydmljZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cbiAgICBnZXQgZm9jdXNlZENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNTZXJ2aWNlLmlzRm9jdXNlZCh0aGlzLmluZGV4KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuICAgIHN1YnNjcmliZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb2N1c1NlcnZpY2Uub25Gb2N1cy5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuc3Vic2NyaWJlRXZlbnRzKCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5Gb2N1c2FibGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0J1dHRvbkZvY3VzYWJsZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZvY3VzYWJsZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZvY3VzU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9XG5dO1xuRm9jdXNhYmxlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkQ2xhc3NOYW1lOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWZvY3VzZWQnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gdmlld0NvbnRhaW5lclJlZjtcbiAgICB9XG4gICAgc2V0IHRlbXBsYXRlQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmluc2VydGVkVmlld1JlZikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh0aGlzLnZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzLmluc2VydGVkVmlld1JlZikpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRlZFZpZXdSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0ZWRWaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0LnRlbXBsYXRlUmVmLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW3RlbXBsYXRlQ29udGV4dF0nIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFZpZXdDb250YWluZXJSZWYgfVxuXTtcblRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0ZW1wbGF0ZUNvbnRleHQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBFWFBPUlRFRF9ESVJFQ1RJVkVTID0gW1xuICAgIExpc3RDb21wb25lbnQsXG4gICAgRm9jdXNhYmxlRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBUZW1wbGF0ZUNvbnRleHREaXJlY3RpdmVcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTGlzdE1vZHVsZSB7XG59XG5MaXN0TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtFWFBPUlRFRF9ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbRVhQT1JURURfRElSRUNUSVZFU10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBLZXlFdmVudHM7XG4oZnVuY3Rpb24gKEtleUV2ZW50cykge1xuICAgIEtleUV2ZW50c1tLZXlFdmVudHNbXCJrZXlkb3duXCJdID0gMF0gPSBcImtleWRvd25cIjtcbiAgICBLZXlFdmVudHNbS2V5RXZlbnRzW1wia2V5cHJlc3NcIl0gPSAxXSA9IFwia2V5cHJlc3NcIjtcbiAgICBLZXlFdmVudHNbS2V5RXZlbnRzW1wia2V5dXBcIl0gPSAyXSA9IFwia2V5dXBcIjtcbn0pKEtleUV2ZW50cyB8fCAoS2V5RXZlbnRzID0ge30pKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBOYXZpZ2F0aW9uQWN0aW9uO1xuKGZ1bmN0aW9uIChOYXZpZ2F0aW9uQWN0aW9uKSB7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiVW5kZWZpbmVkXCJdID0gMF0gPSBcIlVuZGVmaW5lZFwiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIk9wZW5cIl0gPSAxXSA9IFwiT3BlblwiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIkNsb3NlXCJdID0gMl0gPSBcIkNsb3NlXCI7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiRW50ZXJcIl0gPSAzXSA9IFwiRW50ZXJcIjtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJFbnRlclByZXNzXCJdID0gNF0gPSBcIkVudGVyUHJlc3NcIjtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJFbnRlclVwXCJdID0gNV0gPSBcIkVudGVyVXBcIjtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJUYWJcIl0gPSA2XSA9IFwiVGFiXCI7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiRXNjXCJdID0gN10gPSBcIkVzY1wiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIk5hdmlnYXRlXCJdID0gOF0gPSBcIk5hdmlnYXRlXCI7XG59KShOYXZpZ2F0aW9uQWN0aW9uIHx8IChOYXZpZ2F0aW9uQWN0aW9uID0ge30pKTtcblxuLyogdHNsaW50OmRpc2FibGU6ZGVwcmVjYXRpb24gKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMaXN0QnV0dG9uIHtcbiAgICBjb25zdHJ1Y3Rvcihmb2N1c1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCB3cmFwcGVyUmVmLCBfem9uZSwgbG9jYWxpemF0aW9uLCBjZHIpIHtcbiAgICAgICAgdGhpcy5mb2N1c1NlcnZpY2UgPSBmb2N1c1NlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy53cmFwcGVyUmVmID0gd3JhcHBlclJlZjtcbiAgICAgICAgdGhpcy5fem9uZSA9IF96b25lO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5fb3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IHsgYW5pbWF0ZTogdHJ1ZSwgcG9wdXBDbGFzczogJycgfTtcbiAgICAgICAgdGhpcy5saXN0SWQgPSBndWlkKCk7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvY3VzU2VydmljZSA9IGZvY3VzU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLndyYXBwZXIgPSB3cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiAodGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuICAgIGdldCBwb3B1cENsYXNzZXMoKSB7XG4gICAgICAgIGNvbnN0IHBvcHVwQ2xhc3NlcyA9IFsnay1saXN0LWNvbnRhaW5lcicsICdrLXJlc2V0JywgJ2stZ3JvdXAnXTtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwU2V0dGluZ3MucG9wdXBDbGFzcykge1xuICAgICAgICAgICAgcG9wdXBDbGFzc2VzLnB1c2godGhpcy5fcG9wdXBTZXR0aW5ncy5wb3B1cENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9wdXBDbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9XG4gICAgZ2V0IG9wZW5TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW47XG4gICAgfVxuICAgIHNldCBvcGVuU3RhdGUob3Blbikge1xuICAgICAgICB0aGlzLl9vcGVuID0gb3BlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvZ2dsZVBvcHVwVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuU3RhdGUgPSAhdGhpcy5vcGVuU3RhdGU7XG4gICAgICAgIGlmICghdGhpcy5vcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzKC0xKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25JdGVtQ2xpY2soaW5kZXgpIHtcbiAgICAgICAgdGhpcy5lbWl0SXRlbUNsaWNrSGFuZGxlcihpbmRleCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c1dyYXBwZXIoKSwgMSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzRmlyc3RUaW1lb3V0KTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NyaWJlRXZlbnRzKCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlTGlzdEl0ZW1Gb2N1c0V2ZW50KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlQ29tcG9uZW50Qmx1cnJlZEV2ZW50KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlTmF2aWdhdGlvbkV2ZW50cygpO1xuICAgIH1cbiAgICBzdWJzY3JpYmVMaXN0SXRlbUZvY3VzRXZlbnQoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24gPSB0aGlzLmZvY3VzU2VydmljZS5vbkZvY3VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Vic2NyaWJlQ29tcG9uZW50Qmx1cnJlZEV2ZW50KCkge1xuICAgICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFiU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS50YWIucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5faXNGb2N1c2VkKSkuc3Vic2NyaWJlKHRoaXMuaGFuZGxlVGFiLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRCbHVycmVkU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZXZlbnQpID0+ICF0aGlzLndyYXBwZXJDb250YWlucyhldmVudC50YXJnZXQpKSwgZmlsdGVyKCgpID0+IHRoaXMuX2lzRm9jdXNlZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLmJsdXJXcmFwcGVyKCkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN1YnNjcmliZU5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UubmF2aWdhdGUuc3Vic2NyaWJlKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzLmJpbmQodGhpcy5mb2N1c1NlcnZpY2UpKTtcbiAgICAgICAgdGhpcy5lbnRlclVwU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5lbnRlcnVwLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudGVySGFuZGxlcigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1dyYXBwZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3BlblN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2Uub3Blbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9vcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzV3JhcHBlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jbG9zZVN1YnNjcmlwdGlvbiA9IG1lcmdlKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY2xvc2UsIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZXNjKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5mb2N1c1dyYXBwZXIoKSk7XG4gICAgfVxuICAgIGVudGVySGFuZGxlcigpIHsgfSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gICAgdW5zdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzLmNvbXBvbmVudEJsdXJyZWRTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMuZm9jdXNTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5lbnRlclByZXNzU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzLmVudGVyVXBTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMub3BlblN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5jbG9zZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy50YWJTdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZShzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleURvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMua2V5SGFuZGxlcihldmVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXlQcmVzc0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXlIYW5kbGVyKGV2ZW50LCBLZXlFdmVudHMua2V5cHJlc3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5VXBIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMua2V5SGFuZGxlcihldmVudCwgS2V5RXZlbnRzLmtleXVwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleUhhbmRsZXIoZXZlbnQsIGtleUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmb2N1c2VkID0gdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZCB8fCAwO1xuICAgICAgICBjb25zdCBldmVudERhdGEgPSBldmVudDtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5wcm9jZXNzKHtcbiAgICAgICAgICAgIGFsdEtleTogZXZlbnREYXRhLmFsdEtleSxcbiAgICAgICAgICAgIGN1cnJlbnQ6IGZvY3VzZWQsXG4gICAgICAgICAgICBrZXlDb2RlOiBldmVudERhdGEua2V5Q29kZSxcbiAgICAgICAgICAgIGtleUV2ZW50OiBrZXlFdmVudCxcbiAgICAgICAgICAgIG1heDogdGhpcy5fZGF0YSA/IHRoaXMuX2RhdGEubGVuZ3RoIC0gMSA6IDAsXG4gICAgICAgICAgICBtaW46IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhY3Rpb24gIT09IE5hdmlnYXRpb25BY3Rpb24uVW5kZWZpbmVkICYmXG4gICAgICAgICAgICBhY3Rpb24gIT09IE5hdmlnYXRpb25BY3Rpb24uVGFiICYmXG4gICAgICAgICAgICAoYWN0aW9uICE9PSBOYXZpZ2F0aW9uQWN0aW9uLkVudGVyIHx8IChhY3Rpb24gPT09IE5hdmlnYXRpb25BY3Rpb24uRW50ZXIgJiYgdGhpcy5fb3BlbikpKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5TcGFjZSAmJiBhY3Rpb24gPT09IE5hdmlnYXRpb25BY3Rpb24uRW50ZXJVcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV2ZW50RGF0YS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRJdGVtQ2xpY2tIYW5kbGVyKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRhdGFJdGVtID0gdGhpcy5fZGF0YVtpbmRleF07XG4gICAgICAgIGlmICh0aGlzLl9pdGVtQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1DbGljay5lbWl0KGRhdGFJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YUl0ZW0gJiYgZGF0YUl0ZW0uY2xpY2sgJiYgIWRhdGFJdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBkYXRhSXRlbS5jbGljayhkYXRhSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNGaXJzdEl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhICYmIGlzUHJlc2VudCh0aGlzLl9kYXRhWzBdKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXMoMCksIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvY3VzV3JhcHBlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd3JhcHBlckNvbnRhaW5zKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlciA9PT0gZWxlbWVudCB8fCB0aGlzLndyYXBwZXIuY29udGFpbnMoZWxlbWVudCk7XG4gICAgfVxuICAgIGJsdXJXcmFwcGVyKGVtaXQgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZW1pdCkge1xuICAgICAgICAgICAgdGhpcy5fYmx1ci5lbWl0KCk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb2N1c0J1dHRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlVGFiKCkge1xuICAgICAgICB0aGlzLmZvY3VzQnV0dG9uKCk7XG4gICAgICAgIHRoaXMuYmx1cldyYXBwZXIoZmFsc2UpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE5BVklHQVRJT05fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuKCduYXZpZ2F0aW9uLmNvbmZpZycpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICB0aGlzLm5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLm9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZW50ZXJwcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5lbnRlcnVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5lc2MgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudXNlTGVmdFJpZ2h0QXJyb3dzID0gY29uZmlnLnVzZUxlZnRSaWdodEFycm93cztcbiAgICB9XG4gICAgcHJvY2VzcyhhcmdzKSB7XG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBhcmdzLmtleUNvZGU7XG4gICAgICAgIGNvbnN0IGtleUV2ZW50ID0gYXJncy5rZXlFdmVudDtcbiAgICAgICAgbGV0IGluZGV4O1xuICAgICAgICBsZXQgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5VbmRlZmluZWQ7XG4gICAgICAgIGlmIChrZXlFdmVudCA9PT0gS2V5RXZlbnRzLmtleXByZXNzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VudGVyKGtleUNvZGUpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5FbnRlclByZXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleUV2ZW50ID09PSBLZXlFdmVudHMua2V5dXApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW50ZXIoa2V5Q29kZSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLkVudGVyVXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJncy5hbHRLZXkgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd0Rvd24pIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLk9wZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmdzLmFsdEtleSAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93VXApIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLkNsb3NlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5pc0VudGVyKGtleUNvZGUpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5FbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleUNvZGUgPT09IEtleXMuRXNjYXBlKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5Fc2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXlDb2RlID09PSBLZXlzLlRhYikge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uVGFiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwIHx8ICh0aGlzLnVzZUxlZnRSaWdodEFycm93cyAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93TGVmdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQ6IGFyZ3MuY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGFyZ3MubWF4LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IGFyZ3MubWluLFxuICAgICAgICAgICAgICAgICAgICBzdGVwOiAtMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uTmF2aWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93RG93biB8fCAodGhpcy51c2VMZWZ0UmlnaHRBcnJvd3MgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1JpZ2h0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDogYXJncy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogYXJncy5taW4sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogYXJncy5tYXgsXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IDFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLk5hdmlnYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gIT09IE5hdmlnYXRpb25BY3Rpb24uVW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzW05hdmlnYXRpb25BY3Rpb25bYWN0aW9uXS50b0xvd2VyQ2FzZSgpXS5lbWl0KGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cbiAgICBpc0VudGVyKGtleUNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGtleUNvZGUgPT09IEtleXMuRW50ZXIgfHwga2V5Q29kZSA9PT0gS2V5cy5TcGFjZTtcbiAgICB9XG4gICAgbmV4dChhcmdzKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGFyZ3MuY3VycmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3MuY3VycmVudCAhPT0gYXJncy5lbmQgPyBhcmdzLmN1cnJlbnQgKyBhcmdzLnN0ZXAgOiBhcmdzLmVuZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbk5hdmlnYXRpb25TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5OYXZpZ2F0aW9uU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbTkFWSUdBVElPTl9DT05GSUcsXSB9XSB9XG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXIgKi9cbmNvbnN0IE5BVklHQVRJT05fU0VUVElOR1MgPSB7XG4gICAgdXNlTGVmdFJpZ2h0QXJyb3dzOiB0cnVlXG59O1xuY29uc3QgybUwID0gTkFWSUdBVElPTl9TRVRUSU5HUztcbmNvbnN0IE5BVklHQVRJT05fU0VUVElOR1NfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogTkFWSUdBVElPTl9DT05GSUcsXG4gICAgdXNlVmFsdWU6IMm1MFxufTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgU3BsaXRCdXR0b24gY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tc3BsaXRidXR0b24gW2RhdGFdPVwiZGF0YVwiIFtpY29uXT1cIidwYXN0ZSdcIlxuICogICAgICAoaXRlbUNsaWNrKT1cIm9uU3BsaXRCdXR0b25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gKiAgICAgIChidXR0b25DbGljayk9XCJvblNwbGl0QnV0dG9uQ2xpY2soKVwiPlBhc3RlPC9rZW5kby1zcGxpdGJ1dHRvbj5cbiAqIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IEFycmF5PGFueT4gPSBbe1xuICogICAgICAgdGV4dDogJ0tlZXAgVGV4dCBPbmx5JyxcbiAqICAgICAgIGljb246ICdwYXN0ZS1wbGFpbi10ZXh0JyxcbiAqICAgICAgIGNsaWNrOiAoKSA9PiB7IGNvbnNvbGUubG9nKCdLZWVwIFRleHQgT25seSBjbGljayBoYW5kbGVyJyk7IH1cbiAqICAgfSwge1xuICogICAgICAgdGV4dDogJ1Bhc3RlIGFzIEhUTUwnLFxuICogICAgICAgaWNvbjogJ3Bhc3RlLWFzLWh0bWwnXG4gKiAgIH0sIHtcbiAqICAgICAgIHRleHQ6ICdQYXN0ZSBNYXJrZG93bicsXG4gKiAgICAgICBpY29uOiAncGFzdGUtbWFya2Rvd24nXG4gKiAgIH0sIHtcbiAqICAgICAgIHRleHQ6ICdTZXQgRGVmYXVsdCBQYXN0ZSdcbiAqICAgfV07XG4gKlxuICogICBwdWJsaWMgb25TcGxpdEJ1dHRvbkNsaWNrKGRhdGFJdGVtOiBhbnkpOiB2b2lkIHtcbiAqICAgICAgIGNvbnNvbGUubG9nKCdQYXN0ZScpO1xuICogICB9XG4gKlxuICogICBwdWJsaWMgb25TcGxpdEJ1dHRvbkl0ZW1DbGljayhkYXRhSXRlbTogYW55KTogdm9pZCB7XG4gKiAgICAgICBpZiAoZGF0YUl0ZW0pIHtcbiAqICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhSXRlbS50ZXh0KTtcbiAqICAgICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIFNwbGl0QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgTGlzdEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZm9jdXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgd3JhcHBlclJlZiwgem9uZSwgcG9wdXBTZXJ2aWNlLCBlbFJlZiwgbG9jYWxpemF0aW9uLCBjZHIpIHtcbiAgICAgICAgc3VwZXIoZm9jdXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgd3JhcHBlclJlZiwgem9uZSwgbG9jYWxpemF0aW9uLCBjZHIpO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5lbFJlZiA9IGVsUmVmO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgU3BsaXRCdXR0b24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRleHQgPSAnJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgYW4gaWNvbiB0byBiZSByZW5kZXJlZCBuZXh0IHRvIHRoZSBidXR0b24gdGV4dFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGFiaW5kaW5nX3NwbGl0YnV0dG9uICV9I3RvYy1hcnJheXMtb2YtY29tcGxleC1kYXRhKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmljb24gPSAnJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgYW4gaWNvbiB3aXRoIGEgY3VzdG9tIENTUyBjbGFzcyB0byBiZSByZW5kZXJlZCBuZXh0IHRvIHRoZSBidXR0b24gdGV4dFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGFiaW5kaW5nX3NwbGl0YnV0dG9uICV9I3RvYy1hcnJheXMtb2YtY29tcGxleC1kYXRhKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmljb25DbGFzcyA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgYW4gaW1hZ2UgdG8gYmUgZGlzcGxheWVkIG5leHQgdG8gdGhlIGJ1dHRvbiB0ZXh0XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfc3BsaXRidXR0b24gJX0jdG9jLWFycmF5cy1vZi1jb21wbGV4LWRhdGEpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSAnJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoYW5nZXMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIGJ5IHVzaW5nIGFsdGVybmF0aXZlIHN0eWxpbmcgb3B0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIGBmbGF0YFxuICAgICAgICAgKiAqIGBvdXRsaW5lYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb29rID0gJ2RlZmF1bHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBbYHRhYkluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBbZm9udCBpY29uXSh7JSBzbHVnIGljb25zICV9I3RvYy1saXN0LW9mLWZvbnQtaWNvbnMpIHRoYXQgd2lsbFxuICAgICAgICAgKiBiZSByZW5kZXJlZCBmb3IgdGhlIGJ1dHRvbiB3aGljaCBvcGVucyB0aGUgcG9wdXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFycm93QnV0dG9uSWNvbiA9ICdhcnJvdy1zJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBjbGlja3MgdGhlIG1haW4gYnV0dG9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgICAgICogICAgICAgIDxrZW5kby1zcGxpdGJ1dHRvbiAoYnV0dG9uQ2xpY2spPVwib25TcGxpdEJ1dHRvbkNsaWNrKClcIiBbZGF0YV09XCJkYXRhXCI+XG4gICAgICAgICAqICAgICAgICAgICAgUmVwbHlcbiAgICAgICAgICogICAgICAgIDwva2VuZG8tc3BsaXRidXR0b24+XG4gICAgICAgICAqICAgIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICAgcHVibGljIGRhdGE6IEFycmF5PGFueT4gPSBbJ1JlcGx5IEFsbCcsICdGb3J3YXJkJywgJ1JlcGx5ICYgRGVsZXRlJ107XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIHB1YmxpYyBvblNwbGl0QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgICAqICAgICAgY29uc29sZS5sb2coJ1NwbGl0QnV0dG9uIGNsaWNrJyk7XG4gICAgICAgICAqICAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBkcm9wLWRvd24gbGlzdC4gVGhlIGV2ZW50IGRhdGEgY29udGFpbnMgdGhlIGRhdGEgaXRlbSBib3VuZCB0byB0aGUgY2xpY2tlZCBsaXN0IGl0ZW0uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgICAgICogICAgICAgIDxrZW5kby1zcGxpdGJ1dHRvbiAoaXRlbUNsaWNrKT1cIm9uU3BsaXRCdXR0b25JdGVtQ2xpY2soJGV2ZW50KVwiIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgICAgICogICAgICAgICAgUmVwbHlcbiAgICAgICAgICogICAgICA8L2tlbmRvLXNwbGl0YnV0dG9uPlxuICAgICAgICAgKiAgICBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgIHB1YmxpYyBkYXRhOiBBcnJheTxhbnk+ID0gWydSZXBseSBBbGwnLCAnRm9yd2FyZCcsICdSZXBseSAmIERlbGV0ZSddO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgIHB1YmxpYyBvblNwbGl0QnV0dG9uSXRlbUNsaWNrKGRhdGFJdGVtPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgICAqICAgICAgICBpZiAoZGF0YUl0ZW0pIHtcbiAgICAgICAgICogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhSXRlbSk7XG4gICAgICAgICAqICAgICAgIH1cbiAgICAgICAgICogICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIFNwbGl0QnV0dG9uIGdldHMgZm9jdXNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgU3BsaXRCdXR0b24gZ2V0cyBibHVycmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBvcGVuLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5saXN0SWQgPSBndWlkKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZUFycm93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmxvY2tGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pdGVtQ2xpY2sgPSB0aGlzLml0ZW1DbGljaztcbiAgICAgICAgdGhpcy5fYmx1ciA9IHRoaXMub25CbHVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIGRpc2FibGVzIGEgU3BsaXRCdXR0b24gaXRlbVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfc3BsaXRidXR0b24gJX0jdG9jLWFycmF5cy1vZi1jb21wbGV4LWRhdGEpKS5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIHBvcHVwIG9mIHRoZSBTcGxpdEJ1dHRvbi5cbiAgICAgKlxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICogLSBgYW5pbWF0ZTogQm9vbGVhbmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGFuaW1hdGlvbi4gQnkgZGVmYXVsdCwgdGhlIG9wZW4gYW5kIGNsb3NlIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAgICogLSBgcG9wdXBDbGFzczogU3RyaW5nYCZtZGFzaDtTcGVjaWZpZXMgYSBsaXN0IG9mIENTUyBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgdG8gc3R5bGUgdGhlIHBvcHVwLlxuICAgICAqIC0gYGFwcGVuZFRvOiBcInJvb3RcIiB8IFwiY29tcG9uZW50XCIgfCBWaWV3Q29udGFpbmVyUmVmYCZtZGFzaDtTcGVjaWZpZXMgdGhlIGNvbXBvbmVudCB0byB3aGljaCB0aGUgcG9wdXAgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICAgKiAtIGBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiYCZtZGFzaDtTcGVjaWZpZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgc2V0IHBvcHVwU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oeyBhbmltYXRlOiB0cnVlLCBwb3B1cENsYXNzOiAnJyB9LCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIGdldCBwb3B1cFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBTZXR0aW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGF0YSBvZiB0aGUgU3BsaXRCdXR0b24uXG4gICAgICpcbiAgICAgKiA+IFRoZSBkYXRhIGhhcyB0byBiZSBwcm92aWRlZCBpbiBhbiBhcnJheS1saWtlIGxpc3QuXG4gICAgICovXG4gICAgc2V0IGRhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCBbXTtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgb3BlblN0YXRlKG9wZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdChldmVudEFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b2dnbGUob3Blbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgb3BlblN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29tcG9uZW50VGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gLTEgOiB0aGlzLnRhYkluZGV4O1xuICAgIH1cbiAgICBzZXQgaXNGb2N1c2VkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGb2N1c2VkICYmICF0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IHdpZGdldENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYXJpYUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5idXR0b25UZXh0fSBzcGxpdGJ1dHRvbmA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkJ1dHRvbkZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25BcnJvd0J1dHRvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLmxvY2tGb2N1cyA9IHRydWU7XG4gICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGVCdXR0b25BY3RpdmVTdGF0ZShlbmFibGUpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZW5hYmxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlQXJyb3dCdXR0b25BY3RpdmVTdGF0ZShlbmFibGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVBcnJvdyA9IGVuYWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQnV0dG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMubG9ja0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5idXR0b25DbGljay5lbWl0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkJ1dHRvbkJsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4gJiYgIXRoaXMubG9ja0ZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJXcmFwcGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2NrRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXlEb3duSGFuZGxlcihldmVudCk7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLlNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudCkge1xuICAgICAgICB0aGlzLmtleVByZXNzSGFuZGxlcihldmVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXl1cChldmVudCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IEtleXMuU3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMua2V5VXBIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblRleHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3RleHQnKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCdXR0b25UZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvZ2dsZVBvcHVwVmlzaWJpbGl0eSgpIHtcbiAgICAgICAgc3VwZXIudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkgJiYgdGhpcy5sb2NrRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JhcHBlckNvbnRhaW5zKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLndyYXBwZXIgPT09IGVsZW1lbnQgfHwgdGhpcy53cmFwcGVyLmNvbnRhaW5zKGVsZW1lbnQpIHx8ICh0aGlzLnBvcHVwUmVmICYmIHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYW5jaG9yQWxpZ24oKSB7XG4gICAgICAgIGxldCBhbGlnbiA9IHsgaG9yaXpvbnRhbDogdGhpcy5wb3B1cFNldHRpbmdzLmFsaWduIHx8ICdsZWZ0JywgdmVydGljYWw6ICdib3R0b20nIH07XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgIWlzUHJlc2VudCh0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24pKSB7XG4gICAgICAgICAgICBhbGlnbi5ob3Jpem9udGFsID0gJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcG9wdXBBbGlnbigpIHtcbiAgICAgICAgbGV0IGFsaWduID0geyBob3Jpem9udGFsOiB0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24gfHwgJ2xlZnQnLCB2ZXJ0aWNhbDogJ3RvcCcgfTtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyAmJiAhaXNQcmVzZW50KHRoaXMucG9wdXBTZXR0aW5ncy5hbGlnbikpIHtcbiAgICAgICAgICAgIGFsaWduLmhvcml6b250YWwgPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgU3BsaXRCdXR0b24gY29tcG9uZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFNwbGl0QnV0dG9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmx1cldyYXBwZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcG9wdXAuXG4gICAgICogSWYgdGhlIGB0b2dnbGVgIG1ldGhvZCBpcyB1c2VkIHRvIG9wZW4gb3IgY2xvc2UgdGhlIHBvcHVwLCB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyB3aWxsIG5vdCBiZSBmaXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVuIC0gVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUob3Blbikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRpY2soKCkgPT4gdGhpcy5fdG9nZ2xlKG9wZW4gPT09IHVuZGVmaW5lZCA/ICF0aGlzLl9vcGVuIDogb3BlbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG9wZW4gc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIGdldCBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5TdGF0ZTtcbiAgICB9XG4gICAgZW50ZXJIYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wZW5TdGF0ZSkge1xuICAgICAgICAgICAgbGV0IGZvY3VzZWQgPSB0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkO1xuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChmb2N1c2VkKSAmJiBmb2N1c2VkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEl0ZW1DbGlja0hhbmRsZXIoZm9jdXNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVCdXR0b25UZXh0KCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICBsZXQgaW5uZXJUZXh0ID0gdGhpcy53cmFwcGVyLmlubmVyVGV4dFxuICAgICAgICAgICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgICAgLy9zZXRUaW1vdXQgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgYEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuYCBlcnJvcjtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuYnV0dG9uVGV4dCA9IGlubmVyVGV4dCksIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhcHBlbmRUbygpIHtcbiAgICAgICAgY29uc3QgeyBhcHBlbmRUbyB9ID0gdGhpcy5wb3B1cFNldHRpbmdzO1xuICAgICAgICBpZiAoIWFwcGVuZFRvIHx8IGFwcGVuZFRvID09PSAncm9vdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvID09PSAnY29tcG9uZW50JyA/IHRoaXMuY29udGFpbmVyUmVmIDogYXBwZW5kVG87XG4gICAgfVxuICAgIF90b2dnbGUob3Blbikge1xuICAgICAgICB0aGlzLl9vcGVuID0gb3BlbjtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVQb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLmVsUmVmLFxuICAgICAgICAgICAgYW5jaG9yQWxpZ246IHRoaXMuYW5jaG9yQWxpZ24sXG4gICAgICAgICAgICBhbmltYXRlOiB0aGlzLnBvcHVwU2V0dGluZ3MuYW5pbWF0ZSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiB0aGlzLmFwcGVuZFRvLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5wb3B1cFRlbXBsYXRlLFxuICAgICAgICAgICAgcG9wdXBBbGlnbjogdGhpcy5wb3B1cEFsaWduLFxuICAgICAgICAgICAgcG9wdXBDbGFzczogdGhpcy5wb3B1cENsYXNzZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBBbmNob3JWaWV3cG9ydExlYXZlLnN1YnNjcmliZSgoKSA9PiAodGhpcy5vcGVuU3RhdGUgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLnBvcHVwUmVmLnBvcHVwT3Blbi5zdWJzY3JpYmUodGhpcy5mb2N1c0ZpcnN0SXRlbS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgZGVzdHJveVBvcHVwKCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5TcGxpdEJ1dHRvbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9TcGxpdEJ1dHRvbicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIEZvY3VzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIE5BVklHQVRJT05fU0VUVElOR1NfUFJPVklERVIsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5zcGxpdGJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zcGxpdGJ1dHRvbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAga2VuZG9CdXR0b25cbiAgICAgICAgICAgICNidXR0b25cbiAgICAgICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2xvb2tdPVwibG9va1wiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiY29tcG9uZW50VGFiSW5kZXhcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtpY29uXT1cImljb25cIlxuICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICBbaWNvbkNsYXNzXT1cImljb25DbGFzc1wiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIm9uQnV0dG9uRm9jdXMoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljaygpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQnV0dG9uQmx1cigpXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwidG9nZ2xlQnV0dG9uQWN0aXZlU3RhdGUodHJ1ZSlcIlxuICAgICAgICAgICAgKG1vdXNldXApPVwidG9nZ2xlQnV0dG9uQWN0aXZlU3RhdGUoZmFsc2UpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuU3RhdGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJsaXN0SWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyB0ZXh0IH19PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAga2VuZG9CdXR0b25cbiAgICAgICAgICAgICNhcnJvd0J1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYWN0aXZlQXJyb3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtpY29uXT1cImFycm93QnV0dG9uSWNvblwiXG4gICAgICAgICAgICBbbG9va109XCJsb29rXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJhcnJvd0J1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFycm93QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cInRvZ2dsZUFycm93QnV0dG9uQWN0aXZlU3RhdGUodHJ1ZSlcIlxuICAgICAgICAgICAgKG1vdXNldXApPVwidG9nZ2xlQXJyb3dCdXR0b25BY3RpdmVTdGF0ZShmYWxzZSlcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wdXBUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1idXR0b24tbGlzdFxuICAgICAgICAgICAgICAgIFtpZF09XCJsaXN0SWRcIlxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgIFt0ZXh0RmllbGRdPVwidGV4dEZpZWxkXCJcbiAgICAgICAgICAgICAgICBbaXRlbVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgKG9uSXRlbUNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImtleURvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJrZXlQcmVzc0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cImtleVVwSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kaXJdPVwiZGlyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tYnV0dG9uLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNwbGl0QnV0dG9uQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRm9jdXNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5TcGxpdEJ1dHRvbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpY29uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGltYWdlVXJsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb29rOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBTZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRleHRGaWVsZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYnV0dG9uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFycm93QnV0dG9uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFycm93QnV0dG9uSWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYnV0dG9uQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBpdGVtQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICBvcGVuOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBpdGVtVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0J1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGJ1dHRvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2J1dHRvbicsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBhcnJvd0J1dHRvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2Fycm93QnV0dG9uJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSxdIH1dLFxuICAgIHBvcHVwVGVtcGxhdGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydwb3B1cFRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGNvbnRhaW5lclJlZjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBpc0ZvY3VzZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZm9jdXNlZCcsXSB9XSxcbiAgICB3aWRnZXRDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3BsaXQtYnV0dG9uJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1idXR0b24tZ3JvdXAnLF0gfV0sXG4gICAgZGlyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBrZXlkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5ZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBrZXlwcmVzczogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleXByZXNzJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIGtleXVwOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5dXAnLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFRoZSBleHBvcnRlZCBwYWNrYWdlIG1vZHVsZS5cbiAqXG4gKiBUaGUgcGFja2FnZSBleHBvcnRzOlxuICogLSBgU3BsaXRCdXR0b25Db21wb25lbnRgJm1kYXNoO1RoZSBTcGxpdEJ1dHRvbkNvbXBvbmVudCBjb21wb25lbnQgY2xhc3MuXG4gKi9cbmNsYXNzIFNwbGl0QnV0dG9uTW9kdWxlIHtcbn1cblNwbGl0QnV0dG9uTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtTcGxpdEJ1dHRvbkNvbXBvbmVudF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1NwbGl0QnV0dG9uQ29tcG9uZW50LCBMaXN0TW9kdWxlXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQb3B1cE1vZHVsZSwgQnV0dG9uTW9kdWxlLCBMaXN0TW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXIgKi9cbmNvbnN0IE5BVklHQVRJT05fU0VUVElOR1MkMSA9IHtcbiAgICB1c2VMZWZ0UmlnaHRBcnJvd3M6IHRydWVcbn07XG5jb25zdCDJtTAkMSA9IE5BVklHQVRJT05fU0VUVElOR1MkMTtcbmNvbnN0IE5BVklHQVRJT05fU0VUVElOR1NfUFJPVklERVIkMSA9IHtcbiAgICBwcm92aWRlOiBOQVZJR0FUSU9OX0NPTkZJRyxcbiAgICB1c2VWYWx1ZTogybUwJDFcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIERyb3BEb3duQnV0dG9uIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWRyb3Bkb3duYnV0dG9uIFtkYXRhXT1cImRhdGFcIj5cbiAqICAgIFVzZXIgU2V0dGluZ3NcbiAqICA8L2tlbmRvLWRyb3Bkb3duYnV0dG9uPlxuICogYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBBcnJheTxhbnk+ID0gW3tcbiAqICAgICAgIHRleHQ6ICdNeSBQcm9maWxlJ1xuICogICB9LCB7XG4gKiAgICAgICB0ZXh0OiAnRnJpZW5kIFJlcXVlc3RzJ1xuICogICB9LCB7XG4gKiAgICAgICB0ZXh0OiAnQWNjb3VudCBTZXR0aW5ncydcbiAqICAgfSwge1xuICogICAgICAgdGV4dDogJ1N1cHBvcnQnXG4gKiAgIH0sIHtcbiAqICAgICAgIHRleHQ6ICdMb2cgT3V0J1xuICogICB9XTtcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBEcm9wRG93bkJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIExpc3RCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGZvY3VzU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UsIHdyYXBwZXJSZWYsIHpvbmUsIHBvcHVwU2VydmljZSwgZWxSZWYsIGxvY2FsaXphdGlvbiwgY2RyKSB7XG4gICAgICAgIHN1cGVyKGZvY3VzU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UsIHdyYXBwZXJSZWYsIHpvbmUsIGxvY2FsaXphdGlvbiwgY2RyKTtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgaWNvbiBpbiBhIEtlbmRvIFVJIHRoZW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pY29uID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBsaXN0IG9mIENTUyBjbGFzc2VzIHdoaWNoIGFyZSB1c2VkIGZvciBzdHlsaW5nIHRoZSBCdXR0b24gd2l0aCBjdXN0b20gaWNvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmljb25DbGFzcyA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyBhIFVSTCBmb3Igc3R5bGluZyB0aGUgYnV0dG9uIHdpdGggYSBjdXN0b20gaW1hZ2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmltYWdlVXJsID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIHZpc3VhbCB3ZWlnaHQgdG8gdGhlIGRlZmF1bHQgYnV0dG9uIGFuZCBtYWtlcyBpdCBwcmltYXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wcmltYXJ5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGFuZ2VzIHRoZSB2aXN1YWwgYXBwZWFyYW5jZSBieSB1c2luZyBhbHRlcm5hdGl2ZSBzdHlsaW5nIG9wdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBgZmxhdGBcbiAgICAgICAgICogKiBgb3V0bGluZWBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubG9vayA9ICdkZWZhdWx0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgW2B0YWJJbmRleGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgpIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBjbGlja3Mgb24gYSBkcm9wLWRvd24gbGlzdCBpdGVtLiBUaGUgZXZlbnQgZGF0YSBjb250YWlucyB0aGUgZGF0YSBpdGVtIGJvdW5kIHRvIHRoZSBjbGlja2VkIGxpc3QgaXRlbS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIGNsb3NlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gY2xvc2UuXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gb3Blbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIERyb3BEb3duQnV0dG9uIGdldHMgZm9jdXNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgRHJvcERvd25CdXR0b24gZ2V0cyBibHVycmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIHRoaXMubGlzdElkID0gZ3VpZCgpO1xuICAgICAgICB0aGlzLl9pdGVtQ2xpY2sgPSB0aGlzLml0ZW1DbGljaztcbiAgICAgICAgdGhpcy5fYmx1ciA9IHRoaXMub25CbHVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBwb3B1cCBvZiB0aGUgRHJvcERvd25CdXR0b24uXG4gICAgICpcbiAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICAgICAqIC0gYGFuaW1hdGU6IEJvb2xlYW5gJm1kYXNoO0NvbnRyb2xzIHRoZSBwb3B1cCBhbmltYXRpb24uIEJ5IGRlZmF1bHQsIHRoZSBvcGVuIGFuZCBjbG9zZSBhbmltYXRpb25zIGFyZSBlbmFibGVkLlxuICAgICAqIC0gYHBvcHVwQ2xhc3M6IFN0cmluZ2AmbWRhc2g7U3BlY2lmaWVzIGEgbGlzdCBvZiBDU1MgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIHRvIHN0eWxlIHRoZSBwb3B1cC5cbiAgICAgKiAtIGBhcHBlbmRUbzogXCJyb290XCIgfCBcImNvbXBvbmVudFwiIHwgVmlld0NvbnRhaW5lclJlZmAmbWRhc2g7U3BlY2lmaWVzIHRoZSBjb21wb25lbnQgdG8gd2hpY2ggdGhlIHBvcHVwIHdpbGwgYmUgYXBwZW5kZWQuXG4gICAgICogLSBgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIiB8IFwicmlnaHRcImAmbWRhc2g7U3BlY2lmaWVzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHNldCBwb3B1cFNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHsgYW5pbWF0ZTogdHJ1ZSwgcG9wdXBDbGFzczogJycgfSwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBnZXQgcG9wdXBTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwU2V0dGluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBEcm9wRG93bkJ1dHRvbi5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMub3BlblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGRhdGEgb2YgdGhlIERyb3BEb3duQnV0dG9uLlxuICAgICAqXG4gICAgICogPiBUaGUgZGF0YSBoYXMgdG8gYmUgcHJvdmlkZWQgaW4gYW4gYXJyYXktbGlrZSBsaXN0LlxuICAgICAqL1xuICAgIHNldCBkYXRhKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgfHwgW107XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBvcGVuU3RhdGUob3Blbikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uZW1pdChldmVudEFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RvZ2dsZShvcGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBvcGVuU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNvbXBvbmVudFRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICgtMSkgOiB0aGlzLnRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgYXBwZW5kVG8oKSB7XG4gICAgICAgIGNvbnN0IHsgYXBwZW5kVG8gfSA9IHRoaXMucG9wdXBTZXR0aW5ncztcbiAgICAgICAgaWYgKCFhcHBlbmRUbyB8fCBhcHBlbmRUbyA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBlbmRUbyA9PT0gJ2NvbXBvbmVudCcgPyB0aGlzLmNvbnRhaW5lciA6IGFwcGVuZFRvO1xuICAgIH1cbiAgICBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRm9jdXNlZCAmJiAhdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCB3aWRnZXRDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXlEb3duSGFuZGxlcihldmVudCk7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLlNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXlwcmVzcyhldmVudCkge1xuICAgICAgICB0aGlzLmtleVByZXNzSGFuZGxlcihldmVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXl1cChldmVudCkge1xuICAgICAgICB0aGlzLmtleVVwSGFuZGxlcihldmVudCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbW91c2Vkb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbW91c2V1cChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvcGVuUG9wdXAoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkJ1dHRvbkJsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cldyYXBwZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFuY2hvckFsaWduKCkge1xuICAgICAgICBsZXQgYWxpZ24gPSB7IGhvcml6b250YWw6IHRoaXMucG9wdXBTZXR0aW5ncy5hbGlnbiB8fCAnbGVmdCcsIHZlcnRpY2FsOiAnYm90dG9tJyB9O1xuICAgICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdydGwnICYmICFpc1ByZXNlbnQodGhpcy5wb3B1cFNldHRpbmdzLmFsaWduKSkge1xuICAgICAgICAgICAgYWxpZ24uaG9yaXpvbnRhbCA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHBvcHVwQWxpZ24oKSB7XG4gICAgICAgIGxldCBhbGlnbiA9IHsgaG9yaXpvbnRhbDogdGhpcy5wb3B1cFNldHRpbmdzLmFsaWduIHx8ICdsZWZ0JywgdmVydGljYWw6ICd0b3AnIH07XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgIWlzUHJlc2VudCh0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24pKSB7XG4gICAgICAgICAgICBhbGlnbi5ob3Jpem9udGFsID0gJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIERyb3BEb3duQnV0dG9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBEcm9wRG93bkJ1dHRvbiBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLmJsdXJXcmFwcGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveVBvcHVwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBvcHVwLlxuICAgICAqIElmIHRoZSBgdG9nZ2xlYCBtZXRob2QgaXMgdXNlZCB0byBvcGVuIG9yIGNsb3NlIHRoZSBwb3B1cCwgdGhlIGBvcGVuYCBhbmQgYGNsb3NlYCBldmVudHMgd2lsbCBub3QgYmUgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlbiAtIFRoZSBzdGF0ZSBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgdG9nZ2xlKG9wZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aWNrKCgpID0+ICh0aGlzLl90b2dnbGUoKG9wZW4gPT09IHVuZGVmaW5lZCkgPyAhdGhpcy5fb3BlbiA6IG9wZW4pKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3BlbiBzdGF0ZSBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlblN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgIXRoaXMuX2lzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5faXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyYXBwZXJDb250YWlucyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXIgPT09IGVsZW1lbnRcbiAgICAgICAgICAgIHx8IHRoaXMud3JhcHBlci5jb250YWlucyhlbGVtZW50KVxuICAgICAgICAgICAgfHwgKHRoaXMucG9wdXBSZWYgJiYgdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpO1xuICAgIH1cbiAgICBzdWJzY3JpYmVOYXZpZ2F0aW9uRXZlbnRzKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm5hdmlnYXRlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25BcnJvd0tleU5hdmlnYXRlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmVudGVyVXBTdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVudGVydXAuc3Vic2NyaWJlKHRoaXMub25OYXZpZ2F0aW9uRW50ZXJVcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5vcGVuLnN1YnNjcmliZSh0aGlzLm9uTmF2aWdhdGlvbk9wZW4uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuY2xvc2VTdWJzY3JpcHRpb24gPSBtZXJnZSh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmNsb3NlLCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVzYykuc3Vic2NyaWJlKHRoaXMub25OYXZpZ2F0aW9uQ2xvc2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG9uTmF2aWdhdGlvbkVudGVyVXAoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgIXRoaXMub3BlblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBmb2N1c2VkID0gdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZDtcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoZm9jdXNlZCkgJiYgZm9jdXNlZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRJdGVtQ2xpY2tIYW5kbGVyKGZvY3VzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgICAgIGlmICghdGhpcy5vcGVuU3RhdGUgJiYgaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25OYXZpZ2F0aW9uT3BlbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiAhdGhpcy5vcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25OYXZpZ2F0aW9uQ2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZW5TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25BcnJvd0tleU5hdmlnYXRlKGluZGV4KSB7XG4gICAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzKGluZGV4KTtcbiAgICB9XG4gICAgX3RvZ2dsZShvcGVuKSB7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuID09PSBvcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3BlbiA9IG9wZW47XG4gICAgICAgIHRoaXMuZGVzdHJveVBvcHVwKCk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlUG9wdXAoKSB7XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLnBvcHVwU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgIGFuY2hvcjogdGhpcy5lbFJlZixcbiAgICAgICAgICAgIGFuY2hvckFsaWduOiB0aGlzLmFuY2hvckFsaWduLFxuICAgICAgICAgICAgYW5pbWF0ZTogdGhpcy5wb3B1cFNldHRpbmdzLmFuaW1hdGUsXG4gICAgICAgICAgICBhcHBlbmRUbzogdGhpcy5hcHBlbmRUbyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMucG9wdXBUZW1wbGF0ZSxcbiAgICAgICAgICAgIHBvcHVwQWxpZ246IHRoaXMucG9wdXBBbGlnbixcbiAgICAgICAgICAgIHBvcHVwQ2xhc3M6IHRoaXMucG9wdXBDbGFzc2VzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvcHVwUmVmLnBvcHVwQW5jaG9yVmlld3BvcnRMZWF2ZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vcGVuU3RhdGUgPSBmYWxzZSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBPcGVuLnN1YnNjcmliZSh0aGlzLmZvY3VzRmlyc3RJdGVtLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBkZXN0cm95UG9wdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbkRyb3BEb3duQnV0dG9uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0Ryb3BEb3duQnV0dG9uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgRm9jdXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTkFWSUdBVElPTl9TRVRUSU5HU19QUk9WSURFUiQxLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uZHJvcGRvd25idXR0b24nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZHJvcGRvd25idXR0b24nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxidXR0b24ga2VuZG9CdXR0b24gI2J1dHRvblxuICAgICAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiY29tcG9uZW50VGFiSW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICBbaWNvbkNsYXNzXT1cImljb25DbGFzc1wiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Qb3B1cCgpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQnV0dG9uQmx1cigpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuU3RhdGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJsaXN0SWRcIlxuICAgICAgICAgICAgW2xvb2tdPVwibG9va1wiXG4gICAgICAgICAgICBbcHJpbWFyeV09XCJwcmltYXJ5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wdXBUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1idXR0b24tbGlzdFxuICAgICAgICAgICAgICAgICNidXR0b25MaXN0XG4gICAgICAgICAgICAgICAgW2lkXT1cImxpc3RJZFwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJ0ZXh0RmllbGRcIlxuICAgICAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAob25JdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImtleVByZXNzSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwia2V5VXBIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpcl09XCJkaXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1idXR0b24tbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRHJvcERvd25CdXR0b25Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGb2N1c1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcbkRyb3BEb3duQnV0dG9uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW1hZ2VVcmw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBvcHVwU2V0dGluZ3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRleHRGaWVsZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByaW1hcnk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvb2s6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJ1dHRvbkNsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbUNsaWNrOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb3BlbjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsb3NlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb25Gb2N1czogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIG9uQmx1cjogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2JsdXInLF0gfV0sXG4gICAgZm9jdXNlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1mb2N1c2VkJyxdIH1dLFxuICAgIHdpZGdldENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kcm9wZG93bi1idXR0b24nLF0gfV0sXG4gICAgZGlyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBpdGVtVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0J1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGJ1dHRvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2J1dHRvbicsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBidXR0b25MaXN0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYnV0dG9uTGlzdCcsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBwb3B1cFRlbXBsYXRlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsncG9wdXBUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjb250YWluZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAga2V5ZG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleWRvd24nLCBbJyRldmVudCddLF0gfV0sXG4gICAga2V5cHJlc3M6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydrZXlwcmVzcycsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBrZXl1cDogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleXVwJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIG1vdXNlZG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ21vdXNlZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBtb3VzZXVwOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnbW91c2V1cCcsIFsnJGV2ZW50J10sXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBEcm9wRG93bkJ1dHRvbkNvbXBvbmVudGAmbWRhc2g7VGhlIERyb3BEb3duQnV0dG9uQ29tcG9uZW50IGNvbXBvbmVudCBjbGFzcy5cbiAqL1xuY2xhc3MgRHJvcERvd25CdXR0b25Nb2R1bGUge1xufVxuRHJvcERvd25CdXR0b25Nb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0Ryb3BEb3duQnV0dG9uQ29tcG9uZW50XSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbRHJvcERvd25CdXR0b25Db21wb25lbnQsIExpc3RNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFBvcHVwTW9kdWxlLCBMaXN0TW9kdWxlLCBCdXR0b25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogRGlzcGxheXMgYSBDaGlwIHRoYXQgcmVwcmVzZW50cyBhbiBpbnB1dCwgYXR0cmlidXRlIG9yIGFuIGFjdGlvbi5cbiAqL1xuY2xhc3MgQ2hpcENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgcmVuZGVyZXIsIG5nWm9uZSwgbG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2hhbmdlcyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UgYnkgdXNpbmcgYWx0ZXJuYXRpdmUgc3R5bGluZyBvcHRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogYGZpbGxlZGBcbiAgICAgICAgICogKiBgb3V0bGluZWRgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvb2sgPSAnZmlsbGVkJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIENoaXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIENoaXAgd2lsbCBiZSByZW1vdmFibGUgb3Igbm90LlxuICAgICAgICAgKiBJZiB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIENoaXAgcmVuZGVycyBhIHJlbW92ZSBpY29uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZW1vdmFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgQ2hpcCB0eXBlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogLSBgbm9uZWAgKGRlZmF1bHQpXG4gICAgICAgICAqIC0gYHN1Y2Nlc3NgXG4gICAgICAgICAqIC0gYGVycm9yYFxuICAgICAgICAgKiAtIGB3YXJuaW5nYFxuICAgICAgICAgKiAtIGBpbmZvYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlID0gJ25vbmUnO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIENoaXAgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBjbGlja3MgdGhlIHJlbW92ZSBpY29uIG9mIHRoZSBDaGlwLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGxvY2FsaXphdGlvblNlcnZpY2UucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICB9XG4gICAgZ2V0IG91dGxpbmVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vayA9PT0gJ291dGxpbmVkJztcbiAgICB9XG4gICAgZ2V0IGZpbGxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnZmlsbGVkJztcbiAgICB9XG4gICAgZ2V0IGhhc0ljb25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbiB8fCB0aGlzLmljb25DbGFzcyA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGdldCBmb2N1c2VkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRldGFjaERvbUV2ZW50cykge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hEb21FdmVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IGNoaXAgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHlwZUNsYXNzID0gdGhpcy50eXBlQ2xhc3MoKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNoaXAsIHR5cGVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRhY2hFbGVtZW50RXZlbnRIYW5kbGVycyhjaGlwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpY29uQ2xhc3NlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuaWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGBrLWljb24gay1pLSR7dGhpcy5pY29ufWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5pY29uQ2xhc3N9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHNlbGVjdGVkSWNvbkNsYXNzZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0ZWRJY29ufWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBrLWljb24gay1pLWNoZWNrYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCByZW1vdmVJY29uQ2xhc3NlcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMucmVtb3ZlSWNvbn1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgay1pY29uIGstaS1jbG9zZS1jaXJjbGVgO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdHlwZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ25vbmUnOiAnJyxcbiAgICAgICAgICAgICdzdWNjZXNzJzogJ2stY2hpcC1zdWNjZXNzJyxcbiAgICAgICAgICAgICd3YXJuaW5nJzogJ2stY2hpcC13YXJuaW5nJyxcbiAgICAgICAgICAgICdlcnJvcic6ICdrLWNoaXAtZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nOiAnay1jaGlwLWluZm8nXG4gICAgICAgIH1bdGhpcy50eXBlXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgQ2hpcCBjb21wb25lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIENoaXAgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25SZW1vdmVDbGljayhlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW92YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7IHNlbmRlcjogdGhpcywgb3JpZ2luYWxFdmVudDogZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hFbGVtZW50RXZlbnRIYW5kbGVycyhjaGlwKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihjaGlwLCAnZm9jdXMnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhjaGlwLCAnay1jaGlwLWZvY3VzZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYmx1ckxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oY2hpcCwgJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhjaGlwLCAnay1jaGlwLWZvY3VzZWQnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hEb21FdmVudHMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9jdXNMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIGJsdXJMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuQ2hpcENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2hpcCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJrLXNlbGVjdGVkLWljb24td3JhcHBlclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLXNlbGVjdGVkLWljb25cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkSWNvbkNsYXNzZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpY29uIHx8IGljb25DbGFzc1wiXG4gICAgICAgICAgICBjbGFzcz1cImstY2hpcC1pY29uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImljb25DbGFzc2VzXCJcbiAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWNoaXAtY29udGVudFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWNoaXAtbGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIWxhYmVsXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLXJlbW92ZS1pY29uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUNsaWNrKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJyZW1vdmVJY29uQ2xhc3Nlc1wiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIGAsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5jaGlwJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DaGlwQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkNoaXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgbG9vazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGVkSWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVtb3ZhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW1vdmVJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0eXBlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVtb3ZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGFiaW5kZXgnLF0gfV0sXG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAnLF0gfV0sXG4gICAgb3V0bGluZUNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAtb3V0bGluZScsXSB9XSxcbiAgICBmaWxsZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jaGlwLWZpbGxlZCcsXSB9XSxcbiAgICBoYXNJY29uQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hpcC1oYXMtaWNvbicsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAtZGlzYWJsZWQnLF0gfV0sXG4gICAgc2VsZWN0ZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jaGlwLXNlbGVjdGVkJyxdIH1dLFxuICAgIGZvY3VzZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jaGlwLWZvY3VzZWQnLF0gfV0sXG4gICAgZGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XVxufTtcblxuY2xhc3MgQ2hpcExpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlID0gbG9jYWxpemF0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgc2VsZWN0aW9uIG1vZGUgb2YgdGhlIENoaXBMaXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogYG5vbmVgIChkZWZhdWx0KVxuICAgICAgICAgKiAqIGBzaW5nbGVgXG4gICAgICAgICAqICogYG11bHRpcGxlYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSAnbm9uZSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgd2hlbiB0aGUgQ2hpcExpc3Qgc2VsZWN0aW9uIGlzIGNoYW5nZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgcmVtb3ZlIGljb24gb2YgdGhlIENoaXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb25TZXJ2aWNlLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIGdldCBzaW5nbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbiA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuICAgIGdldCBtdWx0aXBsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uID09PSAnbXVsdGlwbGUnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljaygkZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldDtcbiAgICAgICAgY29uc3QgaXNSZW1vdmVDbGlja2VkID0gY2xvc2VzdCh0YXJnZXQsICcuay1yZW1vdmUtaWNvbicpO1xuICAgICAgICBjb25zdCBjbGlja2VkQ2hpcCA9IGNsb3Nlc3QodGFyZ2V0LCAnLmstY2hpcCcpO1xuICAgICAgICBjb25zdCBjaGlwID0gdGhpcy5jaGlwcy5maW5kKChjaGlwKSA9PiBjbGlja2VkQ2hpcCA9PT0gY2hpcC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNSZW1vdmVDbGlja2VkICYmIGNsaWNrZWRDaGlwKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVFdmVudEFyZ3MgPSB7IHNlbmRlcjogdGhpcywgb3JpZ2luYWxFdmVudDogJGV2ZW50LCByZW1vdmVkQ2hpcDogY2hpcCB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUuZW1pdChyZW1vdmVFdmVudEFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPT0gJ25vbmUnICYmIGNsaWNrZWRDaGlwICYmICFpc1JlbW92ZUNsaWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGNoaXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdGVkQ2hpcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaXBzLnJlZHVjZSgoYWNjLCBjdXIsIGlkeCkgPT4geyByZXR1cm4gY3VyLnNlbGVjdGVkID8gYWNjLmNvbmNhdChpZHgpIDogYWNjOyB9LCBbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGlvbiBvbiBjbGljayBvZiBhIENoaXAuIEVtaXRzIGV2ZW50cy5cbiAgICAgKi9cbiAgICBzZXRTZWxlY3Rpb24oY2hpcCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKGNoaXApO1xuICAgICAgICB9XG4gICAgICAgIGNoaXAuc2VsZWN0ZWQgPSAhY2hpcC5zZWxlY3RlZDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRDaGlwcygpKTtcbiAgICB9XG4gICAgY2xlYXJTZWxlY3Rpb24oY2hpcCkge1xuICAgICAgICB0aGlzLmNoaXBzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlwICE9PSBjKSB7XG4gICAgICAgICAgICAgICAgYy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5DaGlwTGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2hpcC1saXN0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmNoaXAtbGlzdCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2hpcExpc3RDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5DaGlwTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hpcC1saXN0JyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgc2VsZWN0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHJlbW92ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNoaXBzOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDaGlwQ29tcG9uZW50LF0gfV0sXG4gICAgc2luZ2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXNlbGVjdGlvbi1zaW5nbGUnLF0gfV0sXG4gICAgbXVsdGlwbGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2VsZWN0aW9uLW11bHRpcGxlJyxdIH1dLFxuICAgIG9uQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydjbGljaycsIFsnJGV2ZW50J10sXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzID0gW1xuICAgIENoaXBDb21wb25lbnQsXG4gICAgQ2hpcExpc3RDb21wb25lbnRcbl07XG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbXG4gICAgLi4uZXhwb3J0ZWRNb2R1bGVzXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgQ2hpcCBhbmQgQ2hpcExpc3QgY29tcG9uZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBDaGlwIG1vZHVsZVxuICogaW1wb3J0IHsgQ2hpcE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWJ1dHRvbnMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBDaGlwTW9kdWxlXSwgLy8gaW1wb3J0IENoaXAgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2hpcE1vZHVsZSB7XG59XG5DaGlwTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtkZWNsYXJhdGlvbnNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXNdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZXMnXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBCdXR0b25zIGNvbXBvbmVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgQnV0dG9ucyBtb2R1bGVcbiAqIGltcG9ydCB7IEJ1dHRvbnNNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1idXR0b25zJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgQnV0dG9uc01vZHVsZV0sIC8vIGltcG9ydCBCdXR0b25zIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQnV0dG9uc01vZHVsZSB7XG59XG5CdXR0b25zTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbQnV0dG9uR3JvdXBNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgU3BsaXRCdXR0b25Nb2R1bGUsIERyb3BEb3duQnV0dG9uTW9kdWxlLCBDaGlwTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IEtlbmRvQnV0dG9uU2VydmljZSwgRm9jdXNTZXJ2aWNlLCBGb2N1c2FibGVEaXJlY3RpdmUsIEJ1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgTGlzdEJ1dHRvbiwgTGlzdENvbXBvbmVudCwgTGlzdE1vZHVsZSwgVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLCBOQVZJR0FUSU9OX0NPTkZJRywgTmF2aWdhdGlvblNlcnZpY2UsIEJ1dHRvbkRpcmVjdGl2ZSwgQnV0dG9uRGlyZWN0aXZlIGFzIEJ1dHRvbiwgQnV0dG9uR3JvdXBDb21wb25lbnQsIEJ1dHRvbkdyb3VwQ29tcG9uZW50IGFzIEJ1dHRvbkdyb3VwLCBCdXR0b25Hcm91cE1vZHVsZSwgQnV0dG9uTW9kdWxlLCBCdXR0b25zTW9kdWxlLCBTcGxpdEJ1dHRvbkNvbXBvbmVudCwgU3BsaXRCdXR0b25Db21wb25lbnQgYXMgU3BsaXRCdXR0b24sIFNwbGl0QnV0dG9uTW9kdWxlLCBEcm9wRG93bkJ1dHRvbkNvbXBvbmVudCwgRHJvcERvd25CdXR0b25Db21wb25lbnQgYXMgRHJvcERvd25CdXR0b24sIERyb3BEb3duQnV0dG9uTW9kdWxlLCBDaGlwQ29tcG9uZW50LCBDaGlwTGlzdENvbXBvbmVudCwgQ2hpcE1vZHVsZSB9O1xuIl19","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty, yoda */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\nimport * as geo from \"../geometry\";\nimport * as PDF from \"../pdf\";\nimport { arabicToRoman, createPromise, measureText, mergeSort } from '../util';\nimport { parseColor as utils_parseColor, support, template as compileTemplate } from \"../common\";\nimport { Path, Text, Group, Image, Circle, LinearGradient } from \"../drawing\";\n\nconst browser = support.browser || {};\n/*\n\n XXX: to test:\n\n - cloneNodes function:\n - drawing document containing canvas with page breaking\n - drawing document with named radio -s (should not clear selection)\n - IE9/IE10 don't support el.dataset; do they copy user data?\n\n - repeating table headers/footers on page breaking\n\n - forceBreak, keepTogether\n\n - avoidLinks\n\n */\n\n/* -----[ local vars ]----- */\n\nfunction slice(thing) {\n return Array.prototype.slice.call(thing);\n}\n\nvar KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n\nvar IMAGE_CACHE = {};\n\nvar nodeInfo = {};\nnodeInfo._root = nodeInfo;\n\n/* -----[ Custom Text node to speed up rendering in PDF ]----- */\n\nconst inBrowser = typeof window !== 'undefined';\nconst microsoft = inBrowser ? browser.msie || browser.edge : false;\n\nclass TextRect extends Text {\n constructor(str, rect, options) {\n super(str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n rect() {\n // this is the crux of it: we can avoid a call to\n // measure(), which is what the base class does, since we\n // already know the rect. measure() is s-l-o-w.\n return this._pdfRect;\n }\n rawBBox() {\n // also let's avoid creating a new rectangle.\n return this._pdfRect;\n }\n}\n\nfunction addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += \" \" + cls;\n }\n}\n\nfunction removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function(a, word){\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(\" \");\n }\n}\n\nfunction setCSS(el, styles) {\n Object.keys(styles).forEach(function(key){\n el.style[key] = styles[key];\n });\n}\n\nvar matches = typeof Element !== \"undefined\" && Element.prototype && (function(p){\n if (p.matches) {\n return function(el, selector) { return el.matches(selector); };\n }\n if (p.webkitMatchesSelector) {\n return function(el, selector) { return el.webkitMatchesSelector(selector); };\n }\n if (p.mozMatchesSelector) {\n return function(el, selector) { return el.mozMatchesSelector(selector); };\n }\n if (p.msMatchesSelector) {\n return function(el, selector) { return el.msMatchesSelector(selector); };\n }\n return function(s) {\n\treturn [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n})(Element.prototype);\n\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n // IE: stringifying rather than simply comparing with `document`,\n // which is not iframe-proof and fails in editor export —\n // https://github.com/telerik/kendo/issues/6721\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 /* Element */ && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n}\n\n// clone nodes ourselves, so that we redraw (DOM or\n// jQuery clone will not)\nvar cloneNodes = (function($){\n if ($) {\n // if we have Kendo and jQuery, use this version as it will\n // maintain proper links between cloned element and Kendo\n // widgets (i.e. it clones jQuery data(), which isn't the same\n // as element's data attributes).\n // https://github.com/telerik/kendo-ui-core/issues/2750\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1 /* Element */) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext(\"2d\").drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n // drop the name attributes so that we don't affect the selection of the\n // original nodes (i.e. checked status of radio buttons) when we insert our copy\n // into the DOM. https://github.com/telerik/kendo/issues/5409\n clone.removeAttribute(\"id\");\n clone.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n clone.value = el.value;\n }\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n // the no-jQuery version\n return function cloneNodes(el) {\n const clone = (function dive(node){\n const clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (let i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n })(el);\n\n // re-draw canvases - https://github.com/telerik/kendo/issues/4872\n const canvases = el.querySelectorAll(\"canvas\");\n if (canvases.length) {\n slice(clone.querySelectorAll(\"canvas\")).forEach((canvas, i) => {\n canvas.getContext(\"2d\").drawImage(canvases[i], 0, 0);\n });\n }\n\n // remove \"name\" attributes from elements -\n // https://github.com/telerik/kendo/issues/5409\n const orig = el.querySelectorAll(\"input, select, textarea, option\");\n slice(clone.querySelectorAll(\"input, select, textarea, option\")).forEach((el, i) => {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n\n return clone;\n };\n }\n})(typeof window !== \"undefined\" && window.kendo && window.kendo.jQuery);\n\nfunction getXY(thing) {\n if (typeof thing == \"number\") {\n return { x: thing, y: thing };\n }\n if (Array.isArray(thing)) {\n return { x: thing[0], y: thing[1] };\n }\n return { x: thing.x, y: thing.y };\n}\n\nfunction drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n\n if (!element) {\n return promise.reject(\"No element to export\");\n }\n\n if (typeof window.getComputedStyle != \"function\") {\n throw new Error(\"window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");\n }\n\n PDF.defineFont(getFontFaces(element.ownerDocument));\n\n var scale = getXY(options.scale || 1);\n\n function doOne(element) {\n var group = new Group();\n\n // translate to start of page\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n (-pos.left * scale.x),\n (-pos.top * scale.y)\n ]);\n\n nodeInfo._clipbox = false;\n nodeInfo._matrix = geo.Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = \"a\";\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n\n addClass(element, \"k-pdf-export\");\n renderElement(element, group);\n removeClass(element, \"k-pdf-export\");\n\n return group;\n }\n\n cacheImages(element, function(){\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != \"auto\";\n var paperOptions = PDF.getPaperOptions(function(key, def){\n if (key == \"paperSize\") {\n // PDF.getPaperOptions croaks on \"auto\", just pass dummy A4 as we might\n // still be interested in margins.\n return hasPaperSize ? options[key] : \"A4\";\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = { left: 0, top: 0, right: 0, bottom: 0 };\n }\n\n // we want paper size and margin to be unaffected by\n // scaling in the output, so we have to reverse-scale\n // before our calculations begin.\n if (pageWidth) { pageWidth /= scale.x; }\n if (pageHeight) { pageHeight /= scale.y; }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n\n var group = new Group({\n pdf: {\n multiPage : true,\n paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\",\n _ignoreMargin : hasMargin // HACK! see exportPDF in pdf/drawing.js\n }\n });\n handlePageBreaks(\n function(x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next(){\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function() {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n // XXX: should we also fail() the deferred object?\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n })();\n } else {\n x.pages.forEach(function(page){\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n },\n element,\n forceBreak,\n pageWidth ? pageWidth - margin.left - margin.right : null,\n pageHeight ? pageHeight - margin.top - margin.bottom : null,\n margin,\n options\n );\n } else {\n promise.resolve(doOne(element));\n }\n });\n\n function makeTemplate(template) {\n if (template != null) {\n if (typeof template == \"string\") {\n template = compileTemplate(template.replace(/^\\s+|\\s+$/g, \"\"));\n }\n if (typeof template == \"function\") {\n return function(data) {\n var el = template(data);\n if (el && typeof el == \"string\") {\n var div = document.createElement(\"div\");\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n // assumed DOM element\n return function() {\n return template.cloneNode(true);\n };\n }\n }\n\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement(\"KENDO-PDF-DOCUMENT\");\n var adjust = 0;\n\n // make sure elements are at the end (Grid widget\n // places TFOOT before TBODY, tricking our algorithm to\n // insert a page break right after the header).\n // https://github.com/telerik/kendo/issues/4699\n slice(copy.querySelectorAll(\"tfoot\")).forEach(function(tfoot){\n tfoot.parentNode.appendChild(tfoot);\n });\n\n // remember the index of each LI from an ordered list.\n // we'll use it to reconstruct the proper numbering.\n slice(copy.querySelectorAll(\"ol\")).forEach(function(ol){\n slice(ol.children).forEach(function(li, index){\n li.setAttribute(\"kendo-split-index\", index);\n });\n });\n\n setCSS(container, {\n display : \"block\",\n position : \"absolute\",\n boxSizing : \"content-box\",\n left : \"-10000px\",\n top : \"-10000px\"\n });\n\n if (pageWidth) {\n // subtle: if we don't set the width *and* margins here, the layout in this\n // container will be different from the one in our final page elements, and we'll\n // split at the wrong places.\n setCSS(container, {\n width : pageWidth + \"px\",\n paddingLeft : margin.left + \"px\",\n paddingRight : margin.right + \"px\"\n });\n\n // when the first element has a margin-top (i.e. a

    ) the page will be\n // inadvertently enlarged by that number (the browser will report the container's\n // bounding box top to start at the element's top, rather than including its\n // margin). Adding overflow: hidden seems to fix it.\n //\n // to understand the difference, try the following snippets in your browser:\n //\n // 1.
    \n //

    Foo

    \n //
    \n //\n // 2.
    \n //

    Foo

    \n //
    \n //\n // this detail is not important when automatic page breaking is not requested, hence\n // doing it only if pageWidth is defined.\n setCSS(copy, { overflow: \"hidden\" });\n }\n\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n\n // we need the timeouts here, so that images dimensions are\n // properly computed in DOM when we start our thing.\n if (options.beforePageBreak) {\n setTimeout(function(){\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n\n function doPageBreak() {\n if (forceBreak != \"-\" || pageHeight) {\n splitElement(copy);\n }\n\n {\n let page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n\n if (template) {\n pages.forEach(function(page, i){\n const el = template({\n element : page,\n pageNum : i + 1,\n totalPages : pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n\n cacheImages(pages, function() {\n // Even though we already cached images, they simply won't be available\n // immediately in the newly created DOM. Previously we'd allow a 10ms timeout,\n // but that's arbitrary and clearly not working in all cases\n // (https://github.com/telerik/kendo/issues/5399), so this function will wait\n // for their .complete attribute.\n whenImagesAreActuallyLoaded(pages, function(){\n callback({ pages: pages, container: container });\n });\n });\n }\n\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n\n return (el.getAttribute(\"data-kendo-chart\") ||\n /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName));\n }\n\n function splitElement(element) {\n if (element.tagName == \"TABLE\") {\n setCSS(element, { tableLayout: \"fixed\" });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n var bottomBorder = parseFloat(getPropertyValue(style, \"border-bottom-width\"));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1 /* Element */) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n // we're in \"manual breaks mode\"\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), \"position\"))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n // element starts on next page, break before anyway.\n breakAtElement(el);\n }\n else if (fall) {\n // elements ends up on next page, or possibly doesn't fit on a page at\n // all. break before it anyway if it's an or , otherwise\n // attempt to split.\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n }\n else {\n splitElement(el);\n }\n }\n else if (el.nodeType == 3 /* Text */ && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 /* comment */ ||\n first.nodeType == 8 /* processing instruction */) {\n return true;\n }\n if (first.nodeType == 3 /* text */) {\n // if whitespace only we can probably consider it's first\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, \"table\");\n colgroup = table && table.querySelector(\"colgroup\");\n if (options.repeatHeaders) {\n thead = table && table.querySelector(\"thead\");\n\n // If we break page in a Kendo Grid, repeat its header. This ugly hack is\n // necessary because a scrollable grid will keep the header in a separate\n // element from its content.\n //\n // XXX: This is likely to break as soon as the widget HTML is modified.\n grid = closest(el, \".k-grid.k-widget\");\n if (grid && grid.querySelector(\".k-auto-scrollable\")) {\n gridHead = grid.querySelector(\".k-grid-header\");\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, \"table\"); // that's the
    on next page!\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, \".k-grid.k-widget\");\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n\n function makePage() {\n var page = doc.createElement(\"KENDO-PDF-PAGE\");\n setCSS(page, {\n display : \"block\",\n boxSizing: \"content-box\",\n width : pageWidth ? (pageWidth + \"px\") : \"auto\",\n padding : (margin.top + \"px \" +\n margin.right + \"px \" +\n margin.bottom + \"px \" +\n margin.left + \"px\"),\n\n // allow absolutely positioned elements to be relative to current page\n position : \"relative\",\n\n // without the following we might affect layout of subsequent pages\n height : pageHeight ? (pageHeight + \"px\") : \"auto\",\n overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\n clear : \"both\"\n });\n\n // debug\n // $(\"
    \").css({\n // position : \"absolute\",\n // left : margin.left,\n // top : margin.top,\n // width : pageWidth,\n // height : pageHeight,\n // boxSizing : \"border-box\",\n // background: \"rgba(255, 255, 0, 0.5)\"\n // //border : \"1px solid red\"\n // }).appendTo(page);\n\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n // I'd say an element with dimensions zero fits on current page.\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return (box.height > available) ? 3\n : (box.top - top > available) ? 1\n : (box.bottom - top > available) ? 2\n : 0;\n }\n\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return; // the whole text fits on current page\n }\n\n var nextnode = node;\n if (fall == 1) {\n // starts on next page, break before anyway.\n if (isFirst) {\n // avoid leaving an empty

    ,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n }\n else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, (min + pos) >> 1, pos);\n } else {\n return findEOP(pos, (pos + max) >> 1, max);\n }\n })(0, len >> 1, len);\n\n if (!/\\S/.test(range.toString()) && isFirst) {\n // avoid leaving an empty

    ,

  • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n // This is only needed for IE, but it feels cleaner to do it anyway. Without\n // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\n nextnode = node.splitText(range.endOffset);\n\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n\n splitText(nextnode);\n }\n\n function preventBulletOnListItem(el) {\n // set a hint on continued LI elements, to tell the\n // renderer not to draw the bullet again.\n // https://github.com/telerik/kendo-ui-core/issues/2732\n var li = closest(el, \"li\");\n if (li) {\n li.setAttribute(\"kendo-no-bullet\", \"1\");\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n\n return promise;\n}\n\n// This is needed for the Spreadsheet print functionality. Since\n// there we only need to draw text, this cuts through the ceremony\n// of drawDOM/renderElement and renders the text node directly.\nfunction drawText(element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = geo.Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3 /* Text */) {\n // avoid the penalty of renderElement\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n}\n\nvar parseBackgroundImage = (function(){\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n //var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n\n var cache1 = {}, cache2 = {};\n\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n\n function read_stop() {\n var color = utils_parseColor(input, true);\n var length, percent;\n if (color) {\n let match =\n /^#[0-9a-f]+/i.exec(input) ||\n /^rgba?\\(.*?\\)/i.exec(input) ||\n /^..*?\\b/.exec(input); // maybe named color\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return { color: color, length: length, percent: percent };\n }\n }\n\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n\n if (read(tok_popen)) {\n // 1. [ || to , ]?\n angle = read(tok_angle);\n if (angle == \"0\") {\n angle = \"0deg\"; // Edge\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n }\n else {\n to1 = read(tok_keyword);\n if (to1 == \"to\") {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == \"0%\") {\n to1 = \"left\";\n } else if (x == \"100%\") {\n to1 = \"right\";\n }\n if (y == \"0%\") {\n to2 = \"top\";\n } else if (y == \"100%\") {\n to2 = \"bottom\";\n }\n read(tok_comma);\n }\n\n // 2. color stops\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n\n return {\n type : \"linear\",\n angle : angle,\n to : to1 && to2 ? to1 + \" \" + to2 : to1 ? to1 : to2 ? to2 : null,\n stops : stops,\n reverse : reverse\n };\n }\n }\n\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, \"\");\n read(tok_pclose);\n return { type: \"url\", url: url };\n }\n }\n\n var tok;\n\n if ((tok = read(tok_linear_gradient))) {\n tok = read_linear_gradient(tok);\n }\n else if ((tok = read(tok_url))) {\n tok = read_url();\n }\n\n return (cache1[orig] = tok || { type: \"none\" });\n }\n\n return function(input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return (cache2[input] = splitProperty(input).map(parse));\n };\n})();\n\nvar splitProperty = (function(){\n var cache = {};\n return function(input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n\n var cacheKey = input + separator;\n\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n\n var ret = [];\n var last = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n\n function looking_at(rx) {\n return (m = rx.exec(input.substr(pos)));\n }\n\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, \"\");\n }\n\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n }\n else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n pos += 2;\n }\n else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n }\n else if (in_string == \"'\" && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n }\n else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n }\n else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last) {\n ret.push(trim(input.substring(last, pos)));\n last = pos + m[0].length;\n }\n pos += m[0].length;\n }\n else {\n pos++;\n }\n }\n if (last < pos) {\n ret.push(trim(input.substring(last, pos)));\n }\n return (cache[cacheKey] = ret);\n };\n})();\n\nvar getFontURL = (function(cache){\n return function(el){\n // XXX: for IE we get here the whole cssText of the rule,\n // because the computedStyle.src is empty. Next time we need\n // to fix these regexps we better write a CSS parser. :-\\\n var url = cache[el];\n if (!url) {\n var m;\n if ((m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el))) {\n url = cache[el] = m[2];\n } else if ((m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el))) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n})(Object.create(null));\n\nvar getFontHeight = (function(cache){\n return function(font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = measureText(\"Mapq\", { font: font }).height;\n }\n return height;\n };\n})(Object.create(null));\n\nfunction getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {}\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, \"src\");\n if (src) {\n return splitProperty(src).reduce(function(a, el){\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n // Internet Explorer\n // XXX: this is gross. should work though for valid CSS.\n var font = getFontURL(rule.cssText);\n return font ? [ font ] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3: // CSSImportRule\n doStylesheet(r.styleSheet);\n break;\n case 5: // CSSFontFaceRule\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, \"font-family\"));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, \"font-weight\"));\n var italic = \"italic\" == getPropertyValue(style, \"font-style\");\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n // We get full resolved absolute URLs in Chrome, but sadly\n // not in Firefox.\n if (!(/^data:/i.test(url))) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, \"\") + url;\n }\n }\n names.forEach(function(name){\n name = name.replace(/^(['\"]?)(.*?)\\1$/, \"$2\"); // it's quoted\n if (bold) {\n name += \"|bold\";\n }\n if (italic) {\n name += \"|italic\";\n }\n result[name] = url;\n });\n }\n}\n\nfunction hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction getCounter(name) {\n name = \"_counter_\" + name;\n return nodeInfo[name];\n}\n\nfunction getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = \"_counter_\" + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n}\n\nfunction incCounter(name, inc) {\n var p = nodeInfo;\n name = \"_counter_\" + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n}\n\nfunction resetCounter(name, val) {\n name = \"_counter_\" + name;\n nodeInfo[name] = val == null ? 0 : val;\n}\n\nfunction doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n}\n\nfunction updateCounters(style) {\n var counterReset = getPropertyValue(style, \"counter-reset\");\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, \"counter-increment\");\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n}\n\nfunction parseColor(str, css) {\n var color = utils_parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n}\n\nfunction whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function(el){\n var images = el.querySelectorAll(\"img\");\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n}\n\nfunction cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element){\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(\n getPropertyValue(\n getComputedStyle(element), \"background-image\"\n )\n ).forEach(function(bg){\n if (bg.type == \"url\") {\n add(bg.url);\n }\n });\n\n if (element.children) {\n slice(element.children).forEach(dive);\n }\n }\n\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function(url){\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!(/^data:/i.test(url))) {\n img.crossOrigin = \"Anonymous\";\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function() {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n}\n\nfunction alphaNumeral(n) {\n var result = \"\";\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n}\n\nfunction pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, \"text-decoration\");\n if (decoration && decoration != \"none\") {\n var color = getPropertyValue(style, \"color\");\n decoration.split(/\\s+/g).forEach(function(name){\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n}\n\nfunction popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n}\n\nfunction updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = geo.Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n}\n\nfunction emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n}\n\nfunction createsStackingContext(style) {\n function prop(name) { return getPropertyValue(style, name); }\n if (prop(\"transform\") != \"none\" ||\n prop(\"position\") != \"static\" ||\n prop(\"z-index\") != \"auto\" ||\n prop(\"opacity\") < 1) {\n return true;\n }\n}\n\nfunction getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n}\n\nfunction getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === \"\") {\n if (browser.webkit) {\n val = style.getPropertyValue(\"-webkit-\" + prop );\n } else if (browser.mozilla) {\n val = style.getPropertyValue(\"-moz-\" + prop );\n } else if (browser.opera) {\n val = style.getPropertyValue(\"-o-\" + prop);\n } else if (microsoft) {\n val = style.getPropertyValue(\"-ms-\" + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === \"\")) {\n return defa;\n } else {\n return val;\n }\n}\n\nfunction pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty(\"-webkit-\" + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty(\"-moz-\" + prop, value, important);\n } else if (browser.opera) {\n style.setProperty(\"-o-\" + prop, value, important);\n } else if (microsoft) {\n style.setProperty(\"-ms-\" + prop, value, important);\n prop = \"ms\" + prop.replace(/(^|-)([a-z])/g, function(s, p1, p2){\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n}\n\nfunction getBorder(style, side) {\n side = \"border-\" + side;\n return {\n width: parseFloat(getPropertyValue(style, side + \"-width\")),\n style: getPropertyValue(style, side + \"-style\"),\n color: parseColor(getPropertyValue(style, side + \"-color\"), true)\n };\n}\n\nfunction saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n}\n\nfunction getBorderRadius(style, side) {\n var r = getPropertyValue(style, \"border-\" + side + \"-radius\").split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({ x: r[0], y: r[1] });\n}\n\nfunction getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, \"border-*-width\", element);\n box = innerBox(box, \"padding-*\", element);\n return box;\n}\n\nfunction innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == \"string\") {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\n wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\n wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\n wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\n }\n else if (typeof prop == \"number\") {\n wt = wr = wb = wl = prop;\n }\n return {\n top : box.top + wt,\n right : box.right - wr,\n bottom : box.bottom - wb,\n left : box.left + wl,\n width : box.right - box.left - wr - wl,\n height : box.bottom - box.top - wb - wt\n };\n}\n\nfunction getTransform(style) {\n var transform = getPropertyValue(style, \"transform\");\n if (transform == \"none\") {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform);\n if (matrix) {\n var origin = getPropertyValue(style, \"transform-origin\");\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n}\n\nfunction radiansToDegrees(radians) {\n return ((180 * radians) / Math.PI) % 360;\n}\n\nfunction parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n }\n else if (/rad$/.test(angle)) {\n return num;\n }\n else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n }\n else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n}\n\nfunction setTransform(shape, m) {\n m = new geo.Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n}\n\nfunction setClipping(shape, clipPath) {\n shape.clip(clipPath);\n}\n\nfunction addArcToPath(path, x, y, options) {\n var points = new geo.Arc([ x, y ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n}\n\nfunction sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n}\n\nfunction adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n // adjust border radiuses such that the sum of adjacent\n // radiuses is not bigger than the length of the side.\n // seems the correct algorithm is variant (3) from here:\n // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n\n var f = Math.min(\n box.width / (tl_x + tr_x),\n box.height / (tr_y + br_y),\n box.width / (br_x + bl_x),\n box.height / (bl_y + tl_y)\n );\n\n if (f < 1) {\n tl_x *= f; tl_y *= f;\n tr_x *= f; tr_y *= f;\n br_x *= f; br_y *= f;\n bl_x *= f; bl_y *= f;\n }\n\n return {\n tl: { x: tl_x, y: tl_y },\n tr: { x: tr_x, y: tr_y },\n br: { x: br_x, y: br_y },\n bl: { x: bl_x, y: bl_y }\n };\n}\n\nfunction elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n\n var rTL = getBorderRadius(style, \"top-left\");\n var rTR = getBorderRadius(style, \"top-right\");\n var rBL = getBorderRadius(style, \"bottom-left\");\n var rBR = getBorderRadius(style, \"bottom-right\");\n\n if (type == \"padding\" || type == \"content\") {\n var bt = getBorder(style, \"top\");\n var br = getBorder(style, \"right\");\n var bb = getBorder(style, \"bottom\");\n var bl = getBorder(style, \"left\");\n rTL.x -= bl.width; rTL.y -= bt.width;\n rTR.x -= br.width; rTR.y -= bt.width;\n rBR.x -= br.width; rBR.y -= bb.width;\n rBL.x -= bl.width; rBL.y -= bb.width;\n if (type == \"content\") {\n var pt = parseFloat(getPropertyValue(style, \"padding-top\"));\n var pr = parseFloat(getPropertyValue(style, \"padding-right\"));\n var pb = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n var pl = parseFloat(getPropertyValue(style, \"padding-left\"));\n rTL.x -= pl; rTL.y -= pt;\n rTR.x -= pr; rTR.y -= pt;\n rBR.x -= pr; rBR.y -= pb;\n rBL.x -= pl; rBL.y -= pb;\n }\n }\n\n if (typeof type == \"number\") {\n rTL.x -= type; rTL.y -= type;\n rTR.x -= type; rTR.y -= type;\n rBR.x -= type; rBR.y -= type;\n rBL.x -= type; rBL.y -= type;\n }\n\n return roundBox(box, rTL, rTR, rBR, rBL);\n}\n\n// Create a drawing.Path for a rounded rectangle. Receives the\n// bounding box and the border-radiuses in CSS order (top-left,\n// top-right, bottom-right, bottom-left). The radiuses must be\n// objects containing x (horiz. radius) and y (vertical radius).\nfunction roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({ fill: null, stroke: null });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n}\n\nfunction formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case \"decimal-leading-zero\":\n if (str.length < 2) {\n str = \"0\" + str;\n }\n return str;\n case \"lower-roman\":\n return arabicToRoman(val).toLowerCase();\n case \"upper-roman\":\n return arabicToRoman(val).toUpperCase();\n case \"lower-latin\":\n case \"lower-alpha\":\n return alphaNumeral(val - 1);\n case \"upper-latin\":\n case \"upper-alpha\":\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n}\n\nfunction evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, \"$2\");\n return getAllCounters(name).map(function(val){\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function(el){\n var tmp;\n if ((m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el))) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function(s, p){\n return String.fromCharCode(parseInt(p, 16));\n }));\n }\n else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n }\n else if ((m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n }\n else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n result.push(element.getAttribute(m[1]) || \"\");\n }\n else {\n result.push(el);\n }\n });\n return result.join(\"\");\n}\n\nfunction getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n // Status: NEW. Report year: 2002. Current year: 2014.\n // Nice played, Mozillians.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + \": \" + getPropertyValue(style, style[i]));\n }\n return result.join(\";\\n\");\n}\n\nfunction _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n let fake = [];\n function pseudo(kind, place) {\n let style = getComputedStyle(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != \"normal\" && content != \"none\" && style.width != \"0px\") {\n let psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(\":before\", element.firstChild);\n pseudo(\":after\", null);\n if (fake.length > 0) {\n let saveClass = element.className;\n element.className += \" kendo-pdf-hide-pseudo-elements\";\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function(el){ element.removeChild(el); });\n } else {\n _renderElement(element, group);\n }\n}\n\nfunction _renderElement(element, group) {\n var style = getComputedStyle(element);\n\n var top = getBorder(style, \"top\");\n var right = getBorder(style, \"right\");\n var bottom = getBorder(style, \"bottom\");\n var left = getBorder(style, \"left\");\n\n var rTL0 = getBorderRadius(style, \"top-left\");\n var rTR0 = getBorderRadius(style, \"top-right\");\n var rBL0 = getBorderRadius(style, \"bottom-left\");\n var rBR0 = getBorderRadius(style, \"bottom-right\");\n\n var dir = getPropertyValue(style, \"direction\");\n\n var backgroundColor = getPropertyValue(style, \"background-color\");\n backgroundColor = parseColor(backgroundColor);\n\n var backgroundImage = parseBackgroundImage( getPropertyValue(style, \"background-image\") );\n var backgroundRepeat = splitProperty( getPropertyValue(style, \"background-repeat\") );\n var backgroundPosition = splitProperty( getPropertyValue(style, \"background-position\") );\n var backgroundOrigin = splitProperty( getPropertyValue(style, \"background-origin\") );\n var backgroundSize = splitProperty( getPropertyValue(style, \"background-size\") );\n\n // IE shrinks the text with text-overflow: ellipsis,\n // apparently because the returned bounding box for the range\n // is limited to the visible area minus space for the dots,\n // instead of being the full width of the text.\n //\n // https://github.com/telerik/kendo/issues/5232\n // https://github.com/telerik/kendo-ui-core/issues/1868\n //\n // We have to test it here rather than in renderText because\n // text-overflow: ellipsis could be set on a parent element (not\n // necessarily the one containing the text); in this case,\n // getComputedStyle(elementWithTheText) will return \"clip\", not\n // \"ellipsis\" (which is probably a bug, but oh well...)\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow; // computed style\n if (textOverflow == \"ellipsis\") {\n saveTextOverflow = element.style.textOverflow; // own style.\n element.style.textOverflow = \"clip\";\n }\n }\n\n if (browser.msie && browser.version < 10) {\n // IE9 hacks. getPropertyValue won't return the correct\n // value. Sucks that we have to do it here, I'd prefer to\n // move it in getPropertyValue, but we don't have the\n // element.\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n\n var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n // CSS \"clip\" property - if present, replace the group with a\n // new one which is clipped. This must happen before drawing\n // the borders and background.\n (function(){\n var clip = getPropertyValue(style, \"clip\");\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == \"auto\" ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == \"auto\" ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == \"auto\" ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == \"auto\" ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path()\n .moveTo(left, top)\n .lineTo(right, top)\n .lineTo(right, bottom)\n .lineTo(left, bottom)\n .close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n })();\n\n var boxes, i, cells;\n var display = getPropertyValue(style, \"display\");\n\n if (display == \"table-row\") {\n // because of rowspan/colspan, we shouldn't draw background of table row elements on the\n // box given by its getBoundingClientRect, because if we do we risk overwritting a\n // previously rendered cell. https://github.com/telerik/kendo/issues/4881\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n // Workaround the missing borders in Chrome! getClientRects() boxes contains values\n // rounded to integer. getBoundingClientRect() appears to work fine. We still need\n // getClientRects() to support cases where there are more boxes (continued inline\n // elements that might have border/background).\n boxes = [ element.getBoundingClientRect() ];\n }\n }\n\n // This function workarounds another Chrome bug, where boxes returned for a table with\n // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\n // such case anyway, but with this is better than without it.\n boxes = adjustBoxes(boxes);\n\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n\n // Render links as separate groups. We can't use boxes returned by element's getClientRects\n // because if display type is \"inline\" (default for ), boxes will not include the height of\n // images inside. https://github.com/telerik/kendo-ui-core/issues/3359\n if (element.tagName == \"A\" && element.href && !/^#?$/.test(element.getAttribute(\"href\"))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n const r = document.createRange();\n r.selectNodeContents(element);\n slice(r.getClientRects()).forEach(function(box){\n const g = new Group();\n g._pdfLink = {\n url : element.href,\n top : box.top,\n right : box.right,\n bottom : box.bottom,\n left : box.left\n };\n group.append(g);\n });\n }\n }\n\n if (boxes.length > 0 && display == \"list-item\" && !element.getAttribute(\"kendo-no-bullet\")) {\n drawBullet(boxes[0]);\n }\n\n // overflow: hidden/auto - if present, replace the group with\n // a new one clipped by the inner box.\n (function(){\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, \"padding\");\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow\"))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-x\"))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-y\"))) {\n clipit();\n }\n })();\n\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n\n if (microsoft && textOverflow == \"ellipsis\") {\n element.style.textOverflow = saveTextOverflow;\n }\n\n return group; // only utility functions after this line.\n\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, \"border-collapse\") == \"collapse\") {\n var tableBorderLeft = getBorder(table.style, \"left\").width;\n var tableBorderTop = getBorder(table.style, \"top\").width;\n // check if we need to adjust\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes; // nope\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice(boxes).map(function(box){\n return {\n left : box.left + tableBorderLeft,\n top : box.top + tableBorderTop,\n right : box.right + tableBorderLeft,\n bottom : box.bottom + tableBorderTop,\n height : box.height,\n width : box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n\n // this function will be called to draw each border. it\n // draws starting at origin and the resulted path must be\n // translated/rotated to be placed in the proper position.\n //\n // arguments are named as if it draws the top border:\n //\n // - `len` the length of the edge\n // - `Wtop` the width of the edge (i.e. border-top-width)\n // - `Wleft` the width of the left edge (border-left-width)\n // - `Wright` the width of the right edge\n // - `rl` and `rl` -- the border radius on the left and right\n // (objects containing x and y, for horiz/vertical radius)\n // - `transform` -- transformation to apply\n //\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform) {\n if (Wtop <= 0) {\n return;\n }\n\n var path, edge = new Group();\n setTransform(edge, transform);\n group.append(edge);\n\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n\n // draw main border. this is the area without the rounded corners\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0)\n .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n .lineTo(len - Math.max(rr.x, Wright), Wtop)\n .lineTo(Math.max(rl.x, Wleft), Wtop)\n .close();\n\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n }\n\n if (rr.x) {\n drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n }\n\n // draws one round corner, starting at origin (needs to be\n // translated/rotated to be placed properly).\n function drawRoundCorner(Wright, r, transform) {\n var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n // not sanitizing this one, because negative values\n // are useful to fill the box correctly.\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n\n setTransform(path, transform);\n\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n }\n else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop)\n .lineTo(0, Wtop);\n }\n else {\n path.lineTo(ri.x, Wtop)\n .lineTo(ri.x, 0);\n }\n\n edge.append(path.close());\n }\n }\n\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top)\n .lineTo(box.right, box.top)\n .lineTo(box.right, box.bottom)\n .lineTo(box.left, box.bottom)\n .close();\n background.append(path);\n }\n\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(\n background, box,\n backgroundImage[i],\n backgroundRepeat[i % backgroundRepeat.length],\n backgroundPosition[i % backgroundPosition.length],\n backgroundOrigin[i % backgroundOrigin.length],\n backgroundSize[i % backgroundSize.length]\n );\n }\n }\n\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || (background == \"none\")) {\n return;\n }\n\n if (background.type == \"url\") {\n // SVG taints the canvas, can't draw it.\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function(group, rect){\n group.append(new Image(background.url, rect));\n });\n }\n } else if (background.type == \"linear\") {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n\n // for background-origin: border-box the box is already appropriate\n var orgBox = box;\n if (backgroundOrigin == \"content-box\") {\n orgBox = innerBox(orgBox, \"border-*-width\", element);\n orgBox = innerBox(orgBox, \"padding-*\", element);\n } else if (backgroundOrigin == \"padding-box\") {\n orgBox = innerBox(orgBox, \"border-*-width\", element);\n }\n\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == \"contain\") {\n f = Math.min(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else if (backgroundSize == \"cover\") {\n f = Math.max(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else {\n var size = backgroundSize.split(/\\s+/g);\n // compute width\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n // compute height\n if (size.length == 1 || size[1] == \"auto\") {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n\n var pos = String(backgroundPosition);\n\n // IE sometimes reports single-word positions\n // https://github.com/telerik/kendo-ui-core/issues/2786\n //\n // it seems to switch to percentages when the horizontal\n // position is not \"center\", therefore we don't handle\n // multi-word cases here. All other browsers return\n // percentages or pixels instead of keywords. At least\n // for now...\n switch (pos) {\n case \"bottom\" : pos = \"50% 100%\"; break;\n case \"top\" : pos = \"50% 0\"; break;\n case \"left\" : pos = \"0 50%\"; break;\n case \"right\" : pos = \"100% 50%\"; break;\n case \"center\" : pos = \"50% 50%\"; break;\n }\n\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = \"50%\";\n }\n\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n\n var rect = new geo.Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n // XXX: background-repeat could be implemented more\n // efficiently as a fill pattern (at least for PDF\n // output, probably SVG too).\n\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n\n if (backgroundRepeat == \"no-repeat\") {\n renderBG(group, rect);\n }\n else if (backgroundRepeat == \"repeat-x\") {\n rewX();\n repeatX();\n }\n else if (backgroundRepeat == \"repeat-y\") {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n }\n else if (backgroundRepeat == \"repeat\") {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n\n function drawBullet() {\n var listStyleType = getPropertyValue(style, \"list-style-type\");\n if (listStyleType == \"none\") {\n return;\n }\n var listStylePosition = getPropertyValue(style, \"list-style-position\");\n\n function _drawBullet(f) {\n saveStyle(element, function(){\n element.style.position = \"relative\";\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = \"absolute\";\n bullet.style.boxSizing = \"border-box\";\n if (listStylePosition == \"outside\") {\n bullet.style.width = \"6em\";\n bullet.style.left = \"-6.8em\";\n bullet.style.textAlign = \"right\";\n } else {\n bullet.style.left = \"0px\";\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute(\"kendo-split-index\");\n if (k != null) {\n return f(k|0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n\n switch (listStyleType) {\n case \"circle\":\n case \"disc\":\n case \"square\":\n _drawBullet(function(bullet){\n // XXX: the science behind these values is called \"trial and error\".\n bullet.style.fontSize = \"60%\";\n bullet.style.lineHeight = \"200%\";\n bullet.style.paddingRight = \"0.5em\";\n bullet.style.fontFamily = \"DejaVu Serif\";\n bullet.innerHTML = {\n \"disc\" : \"\\u25cf\",\n \"circle\" : \"\\u25ef\",\n \"square\" : \"\\u25a0\"\n }[listStyleType];\n });\n break;\n\n case \"decimal\":\n case \"decimal-leading-zero\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n ++idx;\n if (listStyleType == \"decimal-leading-zero\" && idx < 10) {\n idx = \"0\" + idx;\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n\n case \"lower-roman\":\n case \"upper-roman\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n idx = arabicToRoman(idx + 1);\n if (listStyleType == \"upper-roman\") {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n\n case \"lower-latin\":\n case \"lower-alpha\":\n case \"upper-latin\":\n case \"upper-alpha\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n }\n }\n\n // draws a single border box\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n\n drawBackground(box);\n\n var shouldDrawLeft = (left.width > 0 && ((isFirst && dir == \"ltr\") || (isLast && dir == \"rtl\")));\n var shouldDrawRight = (right.width > 0 && ((isLast && dir == \"ltr\") || (isFirst && dir == \"rtl\")));\n\n // The most general case is that the 4 borders have different widths and border\n // radiuses. The way that is handled is by drawing 3 Paths for each border: the\n // straight line, and two round corners which represent half of the entire rounded\n // corner. To simplify code those shapes are drawed at origin (by the drawEdge\n // function), then translated/rotated into the right position.\n //\n // However, this leads to poor results due to rounding in the simpler cases where\n // borders are straight lines. Therefore we handle a few such cases separately with\n // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\n // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n // web dev is still a ghetto.)\n\n // first, just in case there is no border...\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n\n // START paint borders\n // if all borders have equal colors...\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n // if same widths too, we can draw the whole border by stroking a single path.\n if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n {\n if (shouldDrawLeft && shouldDrawRight) {\n // reduce box by half the border width, so we can draw it by stroking.\n box = innerBox(box, top.width/2);\n\n // adjust the border radiuses, again by top.width/2, and make the path element.\n var path = elementRoundBox(element, box, top.width/2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n\n // if border radiuses are zero and widths are at most one pixel, we can again use simple\n // paths.\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n // alright, 1.9px will do as well. the difference in color blending should not be\n // noticeable.\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n // top border\n if (top.width > 0) {\n group.append(\n new Path({\n stroke: { width: top.width, color: top.color }\n })\n .moveTo(box.left, box.top + top.width/2)\n .lineTo(box.right, box.top + top.width/2)\n );\n }\n\n // bottom border\n if (bottom.width > 0) {\n group.append(\n new Path({\n stroke: { width: bottom.width, color: bottom.color }\n })\n .moveTo(box.left, box.bottom - bottom.width/2)\n .lineTo(box.right, box.bottom - bottom.width/2)\n );\n }\n\n // left border\n if (shouldDrawLeft) {\n group.append(\n new Path({\n stroke: { width: left.width, color: left.color }\n })\n .moveTo(box.left + left.width/2, box.top)\n .lineTo(box.left + left.width/2, box.bottom)\n );\n }\n\n // right border\n if (shouldDrawRight) {\n group.append(\n new Path({\n stroke: { width: right.width, color: right.color }\n })\n .moveTo(box.right - right.width/2, box.top)\n .lineTo(box.right - right.width/2, box.bottom)\n );\n }\n\n return;\n }\n }\n // END paint borders\n\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n\n // top border\n drawEdge(top.color,\n box.width, top.width, left.width, right.width,\n rTL, rTR,\n [ 1, 0, 0, 1, box.left, box.top ]);\n\n // bottom border\n drawEdge(bottom.color,\n box.width, bottom.width, right.width, left.width,\n rBR, rBL,\n [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n // for left/right borders we need to invert the border-radiuses\n function inv(p) {\n return { x: p.y, y: p.x };\n }\n\n // left border\n drawEdge(left.color,\n box.height, left.width, bottom.width, top.width,\n inv(rBL), inv(rTL),\n [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n // right border\n drawEdge(right.color,\n box.height, right.width, top.width, bottom.width,\n inv(rTR), inv(rBR),\n [ 0, 1, -1, 0, box.right, box.top ]);\n }\n}\n\nfunction gradientRenderer(gradient) {\n return function(group, rect) {\n var width = rect.width(), height = rect.height();\n\n switch (gradient.type) {\n case \"linear\":\n\n // figure out the angle.\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case \"top\":\n angle = 0;\n break;\n case \"left\":\n angle = -Math.PI / 2;\n break;\n case \"bottom\":\n angle = Math.PI;\n break;\n case \"right\":\n angle = Math.PI / 2;\n break;\n case \"top left\": case \"left top\":\n angle = -Math.atan2(height, width);\n break;\n case \"top right\": case \"right top\":\n angle = Math.atan2(height, width);\n break;\n case \"bottom left\": case \"left bottom\":\n angle = Math.PI + Math.atan2(height, width);\n break;\n case \"bottom right\": case \"right bottom\":\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n\n // limit the angle between 0..2PI\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n\n // compute gradient's start/end points. here len is the length of the gradient line\n // and x,y is the end point relative to the center of the rectangle in conventional\n // (math) axis direction.\n\n // this is the original (unscaled) length of the gradient line. needed to deal with\n // absolutely positioned color stops. formula from the CSS spec:\n // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n // The math below is pretty simple, but it took a while to figure out. We compute x\n // and y, the *end* of the gradient line. However, we want to transform them into\n // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\n // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n // bottom edge.\n //\n // A naive approach would use the original angle for these calculations. Say we'd\n // like to draw a gradient angled at 45deg in a 100x400 box. When we use\n // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n // scale that to the desired dimensions. The 45deg angle will look more like 70deg\n // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n // the following:\n //\n // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n // identity matrix, the normal of the linear gradient is perpendicular to the\n // gradient vector in object bounding box space (i.e., the abstract coordinate\n // system where (0,0) is at the top/left of the object bounding box and (1,1) is\n // at the bottom/right of the object bounding box). When the object's bounding\n // box is not square, the gradient normal which is initially perpendicular to\n // the gradient vector within object bounding box space may render\n // non-perpendicular relative to the gradient vector in user space. If the\n // gradient vector is parallel to one of the axes of the bounding box, the\n // gradient normal will remain perpendicular. This transformation is due to\n // application of the non-uniform scaling transformation from bounding box space\n // to user space.\n //\n // which is an extremely long and confusing way to tell what I just said above.\n //\n // For this reason we need to apply the reverse scaling to the original angle, so\n // that when it'll finally be rendered it'll actually be at the desired slope. Now\n // I'll let you figure out the math yourself.\n\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len/2 * sin;\n var y = len/2 * cos;\n\n // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n // losing the intended direction of the gradient. The following fixes it.\n if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n x = -x;\n y = -y;\n }\n\n // compute the color stops.\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function(s, i){\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n // fix implicit offsets\n implicit.forEach(function(s, i){\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({ left: right, stop: stop });\n }\n return stop;\n });\n\n var start = [ 0.5 - x, 0.5 + y ];\n var end = [ 0.5 + x, 0.5 - y ];\n\n // finally, draw it.\n group.append(\n Path.fromRect(rect)\n .stroke(null)\n .fill(new LinearGradient({\n start : start,\n end : end,\n stops : stops,\n userSpace : false\n }))\n );\n break;\n case \"radial\":\n // XXX:\n if (window.console && window.console.log) {\n window.console.log(\"Radial gradients are not yet supported in HTML renderer\");\n }\n break;\n }\n };\n}\n\nfunction maybeRenderWidget(element, group) {\n var visual;\n\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr(\"role\"))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n\n if (!visual) {\n return false;\n }\n\n var wrap = new Group();\n wrap.children.push(visual);\n\n var bbox = element.getBoundingClientRect();\n wrap.transform(geo.transform().translate(bbox.left, bbox.top));\n\n group.append(wrap);\n\n return true;\n}\n\nfunction renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new geo.Rect([ box.left, box.top ], [ box.width, box.height ]);\n var image = new Image(url, rect);\n setClipping(image, elementRoundBox(element, box, \"content\"));\n group.append(image);\n}\n\nfunction zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, \"z-index\"));\n var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\n var pa = getPropertyValue(sa, \"position\");\n var pb = getPropertyValue(sb, \"position\");\n if (isNaN(za) && isNaN(zb)) {\n if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\n return 0;\n }\n if (pa == \"static\") {\n return -1;\n }\n if (pb == \"static\") {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n}\n\nfunction isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n}\n\nfunction getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n}\n\nfunction renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, \"color\");\n var box = element.getBoundingClientRect();\n if (element.type == \"checkbox\") {\n group.append(\n Path.fromRect(\n new geo.Rect([ box.left+1, box.top+1 ],\n [ box.width-2, box.height-2 ])\n ).stroke(color, 1)\n );\n if (element.checked) {\n // fill a rectangle inside? looks kinda ugly.\n // group.append(\n // Path.fromRect(\n // new geo.Rect([ box.left+4, box.top+4 ],\n // [ box.width-8, box.height-8])\n // ).fill(color).stroke(null)\n // );\n\n // let's draw a checkmark instead. artistic, eh?\n group.append(\n new Path()\n .stroke(color, 1.2)\n .moveTo(box.left + 0.22 * box.width,\n box.top + 0.55 * box.height)\n .lineTo(box.left + 0.45 * box.width,\n box.top + 0.75 * box.height)\n .lineTo(box.left + 0.78 * box.width,\n box.top + 0.22 * box.width)\n );\n }\n } else {\n group.append(\n new Circle(\n new geo.Circle([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-2, box.height-2) / 2)\n ).stroke(color, 1)\n );\n if (element.checked) {\n group.append(\n new Circle(\n new geo.Circle([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-8, box.height-8) / 2)\n ).fill(color).stroke(null)\n );\n }\n }\n}\n\nfunction renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == \"input\" && (element.type == \"checkbox\" || element.type == \"radio\")) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == \"input\") {\n el.style.whiteSpace = \"pre\";\n }\n if (tag == \"select\" || tag == \"textarea\") {\n el.style.overflow = \"auto\";\n }\n if (tag == \"select\") {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = \"block\"; // IE9 messes up without this\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n\n // must temporarily hide the original element, otherwise it\n // may affect layout of the fake element we want to render.\n element.style.display = \"none\";\n\n renderContents(el, group);\n element.style.display = \"\";\n p.removeChild(el);\n}\n\nfunction renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n // the group that was set in pushNodeInfo might have\n // changed due to clipping/transforms, update it here.\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case \"img\":\n renderImage(element, element.src, group);\n break;\n\n case \"canvas\":\n try {\n renderImage(element, element.toDataURL(\"image/png\"), group);\n } catch (ex) {\n // tainted; can't draw it, ignore.\n }\n break;\n\n case \"textarea\":\n case \"input\":\n case \"select\":\n renderFormField(element, group);\n break;\n\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3: // Text\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1: // Element\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, \"float\");\n var position = getPropertyValue(style, \"position\");\n if (position != \"static\") {\n positioned.push(i);\n }\n else if (floating != \"none\") {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n\n mergeSort(children, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(floats, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(positioned, zIndexSort).forEach(function(el){ renderElement(el, group); });\n }\n}\n\nfunction renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n\n if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n // assume it should not be displayed. the slider's\n // draggable handle displays a Drag text for some reason,\n // having text-indent: -3333px.\n return;\n }\n\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n\n if (!end) {\n return; // whitespace-only node\n }\n\n var fontSize = getPropertyValue(style, \"font-size\");\n var lineHeight = getPropertyValue(style, \"line-height\");\n\n // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n var font = [\n getPropertyValue(style, \"font-style\"),\n getPropertyValue(style, \"font-variant\"),\n getPropertyValue(style, \"font-weight\"),\n fontSize, // no need for line height here; it breaks layout in FF\n getPropertyValue(style, \"font-family\")\n ].join(\" \");\n\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n\n if (fontSize === 0) {\n return;\n }\n\n var color = getPropertyValue(style, \"color\");\n var range = element.ownerDocument.createRange();\n var align = getPropertyValue(style, \"text-align\");\n var isJustified = align == \"justify\";\n var columnCount = getPropertyValue(style, \"column-count\", 1);\n var whiteSpace = getPropertyValue(style, \"white-space\");\n var textTransform = getPropertyValue(style, \"text-transform\");\n\n // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\n // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\n // seems to be a good option.\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n\n // we'll maintain this so we can workaround bugs in Chrome's Range.getClientRects\n // https://github.com/telerik/kendo/issues/5740\n var prevLineBottom = null;\n\n var underline = nodeInfo[\"underline\"];\n var lineThrough = nodeInfo[\"line-through\"];\n var overline = nodeInfo[\"overline\"];\n var hasDecoration = underline || lineThrough || overline;\n\n // doChunk returns true when all text has been rendered\n while (!doChunk()) {}\n\n if (hasDecoration) {\n range.selectNode(node);\n slice(range.getClientRects()).forEach(decorate);\n }\n\n return; // only function declarations after this line\n\n function actuallyGetRangeBoundingRect(range) {\n // XXX: to be revised when this Chrome bug is fixed:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612459\n if (microsoft || browser.chrome) {\n // Workaround browser bugs: IE and Chrome would sometimes\n // return 0 or 1-width rectangles before or after the main\n // one. https://github.com/telerik/kendo/issues/4674\n\n // Actually Chrome 50 got worse, since the rectangles can now have the width of a\n // full character, making it hard to tell whether it's a bogus rectangle or valid\n // selection location. The workaround is to ignore rectangles that fall on the\n // previous line. https://github.com/telerik/kendo/issues/5740\n var rectangles = range.getClientRects(), box = {\n top : Infinity,\n right : -Infinity,\n bottom : -Infinity,\n left : Infinity\n }, done = false;\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue; // bogus rectangle\n }\n box.left = Math.min(b.left , box.left);\n box.top = Math.min(b.top , box.top);\n box.right = Math.max(b.right , box.right);\n box.bottom = Math.max(b.bottom , box.bottom);\n done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n\n // Render a chunk of text, typically one line (but for justified text we render each word as\n // a separate Text object, because spacing is variable). Returns true when it finished the\n // current node. After each chunk it updates `start` to just after the last rendered\n // character.\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n\n // Select a single character to determine the height of a line of text. The box.bottom\n // will be essential for us to figure out where the next line begins.\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n\n // for justified text we must split at each space, because space has variable width.\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n // we can only split there if it's on the same line, otherwise we'll fall back\n // to the default mechanism (see findEOL below).\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n\n if (!found) {\n // This code does three things: (1) it selects one line of text in `range`, (2) it\n // leaves the bounding rect of that line in `box` and (3) it returns the position\n // just after the EOL. We know where the line starts (`start`) but we don't know\n // where it ends. To figure this out, we select a piece of text and look at the\n // bottom of the bounding box. If it changes, we have more than one line selected\n // and should retry with a smaller selection.\n //\n // To speed things up, we first try to select all text in the node (`start` ->\n // `end`). If there's more than one line there, then select only half of it. And\n // so on. When we find a value for `end` that fits in one line, we try increasing\n // it (also in halves) until we get to the next line. The algorithm stops when the\n // right side of the bounding box does not change.\n //\n // One more thing to note is that everything happens in a single Text DOM node.\n // There's no other tags inside it, therefore the left/top coordinates of the\n // bounding box will not change.\n pos = (function findEOL(min, eol, max){\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, (min + eol) >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, (eol + max) >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n })(start, Math.min(end, start + estimateLineLength), end);\n\n if (pos == start) {\n // if EOL is at the start, then no more text fits on this line. Skip the\n // remainder of this node entirely to avoid a stack overflow.\n return true;\n }\n start = pos;\n\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false; // whitespace only; we should not get here.\n }\n if (pos > 0) {\n // eliminate trailing whitespace\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n\n // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\n // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n // node with non-significant space -- collapse whitespace.\n str = str.replace(/\\s+/g, \" \");\n }\n else if (/\\t/.test(str)) {\n // with significant whitespace we need to do something about literal TAB characters.\n // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\n // and the whole text will stretch to fill the original width. The core PDF lib\n // does not have sufficient context to deal with it.\n\n // calculate the starting column here, since we initially discarded any whitespace.\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n // when we meet a TAB we must round up to the next tab stop.\n // in all browsers TABs seem to be 8 characters.\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n // just in case we meet a newline we must restart.\n cc = 0;\n } else {\n // ordinary character --> advance one column\n cc++;\n }\n }\n\n // based on starting column, replace any TAB characters in the string we actually\n // have to display with spaces so that they align to columns multiple of 8.\n while ((pos = str.search(\"\\t\")) >= 0) {\n var indent = \" \".substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n\n function drawText(str, box) {\n // In IE the box height will be approximately lineHeight, while in\n // other browsers it'll (correctly) be the height of the bounding\n // box for the current text/font. Which is to say, IE sucks again.\n // The only good solution I can think of is to measure the text\n // ourselves and center the bounding box.\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top : top,\n right : box.right,\n bottom : top + height,\n left : box.left,\n height : height,\n width : box.right - box.left\n };\n }\n\n // var path = new Path({ stroke: { color: \"red\" }});\n // path.moveTo(box.left, box.top)\n // .lineTo(box.right, box.top)\n // .lineTo(box.right, box.bottom)\n // .lineTo(box.left, box.bottom)\n // .close();\n // group.append(path);\n\n switch (textTransform) {\n case \"uppercase\":\n str = str.toUpperCase();\n break;\n case \"lowercase\":\n str = str.toLowerCase();\n break;\n case \"capitalize\":\n str = str.replace(/(?:^|\\s)\\S/g, l => l.toUpperCase());\n break;\n }\n\n var text = new TextRect(\n str, new geo.Rect([ box.left, box.top ],\n [ box.width, box.height ]),\n {\n font: font,\n fill: { color: color }\n }\n );\n group.append(text);\n }\n\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({ stroke: {\n width: width,\n color: color\n }});\n\n ypos -= width;\n path.moveTo(box.left, ypos)\n .lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n}\n\nfunction groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != \"auto\") {\n // use the current stacking context\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n // normal flow — use given container. we still have to\n // figure out where should we insert this element with the\n // assumption that its z-index is zero, as the group might\n // already contain elements with higher z-index.\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n\n if (main !== group) {\n // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\n // console.log(a.slice(i+1));\n\n // if (nodeInfo._matrix) {\n // tmp.transform(nodeInfo._matrix);\n // }\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n // console.log(r);\n // tmp.append(Path.fromRect(r));\n // tmp.append(new Text(element.className || element.id, r.topLeft()));\n }\n }\n\n return tmp;\n}\n\nfunction renderElement(element, container) {\n var style = getComputedStyle(element);\n\n updateCounters(style);\n\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n\n if (nodeInfo._clipbox == null) {\n return;\n }\n\n var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n var visibility = getPropertyValue(style, \"visibility\");\n var display = getPropertyValue(style, \"display\");\n\n if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n return;\n }\n\n var tr = getTransform(style);\n var group;\n\n var zIndex = getPropertyValue(style, \"z-index\");\n if ((tr || opacity < 1) && zIndex == \"auto\") {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n\n // XXX: remove at some point\n // group._pdfElement = element;\n // group.options._pdfDebug = \"\";\n // if (element.id) {\n // group.options._pdfDebug = \"#\" + element.id;\n // }\n // if (element.className) {\n // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\n // }\n\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n\n pushNodeInfo(element, style, group);\n\n if (!tr) {\n _renderWithPseudoElements(element, group);\n }\n else {\n saveStyle(element, function(){\n // must clear transform, so getBoundingClientRect returns correct values.\n pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n // must also clear transitions, so correct values are returned *immediately*\n pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n // the presence of any transform makes it behave like it had position: relative,\n // because why not.\n // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n if (getPropertyValue(style, \"position\") == \"static\") {\n // but only if it's not already positioned. :-/\n pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n }\n\n // must translate to origin before applying the CSS\n // transformation, then translate back.\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [ 1, 0, 0, 1, -x, -y ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n m = setTransform(group, m);\n\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n _renderWithPseudoElements(element, group);\n });\n }\n\n popNodeInfo();\n\n //drawDebugBox(element.getBoundingClientRect(), container);\n}\n\n// function drawDebugBox(box, group, color) {\n// var path = Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n// if (color) {\n// path.stroke(color);\n// }\n// group.append(path);\n// }\n\n// function dumpTextNode(node) {\n// var txt = node.data.replace(/^\\s+/, \"\");\n// if (txt.length < 100) {\n// console.log(node.data.length + \": |\" + txt);\n// } else {\n// console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\n// }\n// }\n\nfunction mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1*a2 + b1*c2, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n}\n\nexport { drawDOM, drawText, getFontFaces };\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Directive, TemplateRef, Optional, Component, Input, ElementRef, ContentChild, NgModule } from '@angular/core';\nimport { drawDOM, exportPDF } from '@progress/kendo-drawing';\nimport { saveAs } from '@progress/kendo-file-saver';\n\nimport * as ɵngcc0 from '@angular/core';\n\nconst _c0 = [\"*\"];\nclass PDFTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPDFTemplateDirective.ɵfac = function PDFTemplateDirective_Factory(t) { return new (t || PDFTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPDFTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PDFTemplateDirective, selectors: [[\"\", \"kendoPDFTemplate\", \"\"]] });\n/** @nocollapse */\nPDFTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPDFTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\nconst FIELDS = ['bottom', 'left', 'right', 'top'];\n/**\n * Represents the Kendo UI PDFMargin component for Angular.\n */\nclass PDFMarginComponent {\n /**\n * @hidden\n */\n get options() {\n const options = {};\n for (let idx = 0; idx < FIELDS.length; idx++) {\n const field = FIELDS[idx];\n const value = this[field];\n if (typeof value !== 'undefined') {\n options[field] = value;\n }\n }\n return options;\n }\n}\nPDFMarginComponent.ɵfac = function PDFMarginComponent_Factory(t) { return new (t || PDFMarginComponent)(); };\nPDFMarginComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFMarginComponent, selectors: [[\"kendo-pdf-export-margin\"]], inputs: { left: \"left\", top: \"top\", right: \"right\", bottom: \"bottom\" }, decls: 0, vars: 0, template: function PDFMarginComponent_Template(rf, ctx) { }, encapsulation: 2 });\nPDFMarginComponent.propDecorators = {\n left: [{ type: Input }],\n top: [{ type: Input }],\n right: [{ type: Input }],\n bottom: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFMarginComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pdf-export-margin',\n template: ``\n }]\n }], null, { left: [{\n type: Input\n }], top: [{\n type: Input\n }], right: [{\n type: Input\n }], bottom: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst compileTemplate = (templateRef) => {\n const context = {};\n let embeddedView = templateRef.createEmbeddedView(context);\n const result = (data) => {\n Object.assign(context, data);\n embeddedView.detectChanges();\n const templateWrap = document.createElement('span');\n embeddedView.rootNodes.forEach((rootNode) => {\n templateWrap.appendChild(rootNode.cloneNode(true));\n });\n return templateWrap;\n };\n result.destroy = () => {\n embeddedView.destroy();\n embeddedView = null;\n };\n return result;\n};\n\n/**\n * Represents the [Kendo UI PDF Export component for Angular]({% slug overview_pdfexport %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    \n * \n *
    \n *\n * \n * Content goes here\n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\nclass PDFExportComponent {\n constructor(element) {\n this.element = element;\n /**\n * The creator of the PDF document.\n * @default \"Kendo UI PDF Generator\"\n */\n this.creator = 'Kendo UI PDF Generator';\n /**\n * Specifies the name of the exported PDF file.\n * @default \"Export.pdf\"\n */\n this.fileName = 'export.pdf';\n }\n get drawMargin() {\n const marginComponent = this.marginComponent;\n let margin = this.margin;\n if (marginComponent) {\n margin = Object.assign(margin || {}, marginComponent.options);\n }\n return margin;\n }\n /**\n * Saves the content as a PDF file with the specified name.\n * @param fileName - The name of the exported file.\n */\n saveAs(fileName = this.fileName) {\n this.save(this.element.nativeElement, fileName);\n }\n /**\n * Exports the content as a `Group` for further processing.\n *\n * @return - The root group of the exported scene.\n */\n export() {\n return this.exportElement(this.element.nativeElement);\n }\n save(element, fileName) {\n this.exportElement(element)\n .then(group => this.exportGroup(group, this.pdfOptions()))\n .then(dataUri => this.saveDataUri(dataUri, fileName, this.saveOptions()));\n }\n exportElement(element) {\n const promise = this.drawElement(element, this.drawOptions());\n const cleanup = this.cleanup.bind(this);\n promise.then(cleanup, cleanup);\n return promise;\n }\n cleanup() {\n if (this.pageTemplate) {\n this.pageTemplate.destroy();\n delete this.pageTemplate;\n }\n }\n drawOptions() {\n if (this.pageTemplateDirective) {\n this.pageTemplate = compileTemplate(this.pageTemplateDirective.templateRef);\n }\n return {\n avoidLinks: this.avoidLinks,\n forcePageBreak: this.forcePageBreak,\n keepTogether: this.keepTogether,\n margin: this.drawMargin,\n paperSize: this.paperSize,\n landscape: this.landscape,\n repeatHeaders: this.repeatHeaders,\n scale: this.scale,\n template: this.pageTemplate\n };\n }\n pdfOptions() {\n return {\n autoPrint: this.autoPrint,\n author: this.author,\n creator: this.creator,\n date: this.date,\n imgDPI: this.imageResolution,\n keywords: this.keywords,\n landscape: this.landscape,\n margin: this.drawMargin,\n multiPage: true,\n paperSize: this.paperSize,\n producer: this.producer,\n subject: this.subject,\n title: this.title\n };\n }\n saveOptions() {\n return {\n forceProxy: this.forceProxy,\n proxyData: this.proxyData,\n proxyTarget: this.proxyTarget,\n proxyURL: this.proxyURL\n };\n }\n drawElement(element, options) {\n return drawDOM(element, options);\n }\n exportGroup(group, options) {\n return exportPDF(group, options);\n }\n saveDataUri(dataUri, fileName, options) {\n saveAs(dataUri, fileName, options);\n }\n}\nPDFExportComponent.ɵfac = function PDFExportComponent_Factory(t) { return new (t || PDFExportComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nPDFExportComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFExportComponent, selectors: [[\"kendo-pdf-export\"]], contentQueries: function PDFExportComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFMarginComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pageTemplateDirective = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.marginComponent = _t.first);\n } }, inputs: { creator: \"creator\", fileName: \"fileName\", autoPrint: \"autoPrint\", author: \"author\", avoidLinks: \"avoidLinks\", forcePageBreak: \"forcePageBreak\", keepTogether: \"keepTogether\", date: \"date\", imageResolution: \"imageResolution\", forceProxy: \"forceProxy\", keywords: \"keywords\", landscape: \"landscape\", margin: \"margin\", paperSize: \"paperSize\", repeatHeaders: \"repeatHeaders\", scale: \"scale\", proxyData: \"proxyData\", proxyURL: \"proxyURL\", proxyTarget: \"proxyTarget\", producer: \"producer\", subject: \"subject\", title: \"title\" }, ngContentSelectors: _c0, decls: 2, vars: 0, template: function PDFExportComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2 });\n/** @nocollapse */\nPDFExportComponent.ctorParameters = () => [\n { type: ElementRef }\n];\nPDFExportComponent.propDecorators = {\n autoPrint: [{ type: Input }],\n author: [{ type: Input }],\n avoidLinks: [{ type: Input }],\n forcePageBreak: [{ type: Input }],\n keepTogether: [{ type: Input }],\n creator: [{ type: Input }],\n date: [{ type: Input }],\n imageResolution: [{ type: Input }],\n fileName: [{ type: Input }],\n forceProxy: [{ type: Input }],\n keywords: [{ type: Input }],\n landscape: [{ type: Input }],\n margin: [{ type: Input }],\n paperSize: [{ type: Input }],\n repeatHeaders: [{ type: Input }],\n scale: [{ type: Input }],\n proxyData: [{ type: Input }],\n proxyURL: [{ type: Input }],\n proxyTarget: [{ type: Input }],\n producer: [{ type: Input }],\n subject: [{ type: Input }],\n title: [{ type: Input }],\n pageTemplateDirective: [{ type: ContentChild, args: [PDFTemplateDirective,] }],\n marginComponent: [{ type: ContentChild, args: [PDFMarginComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFExportComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pdf-export',\n template: `
    `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { creator: [{\n type: Input\n }], fileName: [{\n type: Input\n }], autoPrint: [{\n type: Input\n }], author: [{\n type: Input\n }], avoidLinks: [{\n type: Input\n }], forcePageBreak: [{\n type: Input\n }], keepTogether: [{\n type: Input\n }], date: [{\n type: Input\n }], imageResolution: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], keywords: [{\n type: Input\n }], landscape: [{\n type: Input\n }], margin: [{\n type: Input\n }], paperSize: [{\n type: Input\n }], repeatHeaders: [{\n type: Input\n }], scale: [{\n type: Input\n }], proxyData: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], proxyTarget: [{\n type: Input\n }], producer: [{\n type: Input\n }], subject: [{\n type: Input\n }], title: [{\n type: Input\n }], pageTemplateDirective: [{\n type: ContentChild,\n args: [PDFTemplateDirective]\n }], marginComponent: [{\n type: ContentChild,\n args: [PDFMarginComponent]\n }] }); })();\n\nconst COMPONENT_DIRECTIVES = [\n PDFExportComponent,\n PDFMarginComponent,\n PDFTemplateDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the PDF Export directive.\n */\nclass PDFExportModule {\n}\nPDFExportModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PDFExportModule });\nPDFExportModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PDFExportModule_Factory(t) { return new (t || PDFExportModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PDFExportModule, { declarations: [PDFExportComponent, PDFMarginComponent, PDFTemplateDirective], exports: [PDFExportComponent, PDFMarginComponent, PDFTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFExportModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PDFExportComponent, PDFExportModule, PDFMarginComponent, PDFTemplateDirective, compileTemplate };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnSUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7cVNBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs2QkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OzswQkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qIENvcHlyaWdodCDCqSAyMDIwIFByb2dyZXNzIFNvZnR3YXJlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBMaWNlbnNlZCB1bmRlciBjb21tZXJjaWFsIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLm1kIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIE9wdGlvbmFsLCBDb21wb25lbnQsIElucHV0LCBFbGVtZW50UmVmLCBDb250ZW50Q2hpbGQsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkcmF3RE9NLCBleHBvcnRQREYgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZHJhd2luZyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZmlsZS1zYXZlcic7XG5cbmNsYXNzIFBERlRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuUERGVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1BERlRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUERGVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuY29uc3QgRklFTERTID0gWydib3R0b20nLCAnbGVmdCcsICdyaWdodCcsICd0b3AnXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgUERGTWFyZ2luIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqL1xuY2xhc3MgUERGTWFyZ2luQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgRklFTERTLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gRklFTERTW2lkeF07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbZmllbGRdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zW2ZpZWxkXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbn1cblBERk1hcmdpbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGRmLWV4cG9ydC1tYXJnaW4nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuUERGTWFyZ2luQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGxlZnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJvdHRvbTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb21waWxlVGVtcGxhdGUgPSAodGVtcGxhdGVSZWYpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0ge307XG4gICAgbGV0IGVtYmVkZGVkVmlldyA9IHRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICBjb25zdCByZXN1bHQgPSAoZGF0YSkgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKGNvbnRleHQsIGRhdGEpO1xuICAgICAgICBlbWJlZGRlZFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGVtYmVkZGVkVmlldy5yb290Tm9kZXMuZm9yRWFjaCgocm9vdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHRlbXBsYXRlV3JhcC5hcHBlbmRDaGlsZChyb290Tm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlV3JhcDtcbiAgICB9O1xuICAgIHJlc3VsdC5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBlbWJlZGRlZFZpZXcuZGVzdHJveSgpO1xuICAgICAgICBlbWJlZGRlZFZpZXcgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFBERiBFeHBvcnQgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X3BkZmV4cG9ydCAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICB0ZW1wbGF0ZTogYFxuICogICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWNvbmZpZ1wiPlxuICogICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cInBkZi5zYXZlQXMoJ2RvY3VtZW50LnBkZicpXCI+XG4gKiAgICAgICAgIFNhdmUgQXMgUERGLi4uXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqXG4gKiAgICAgPGtlbmRvLXBkZi1leHBvcnQgI3BkZiBwYXBlclNpemU9XCJBNFwiIG1hcmdpbj1cIjJjbVwiPlxuICogICAgICAgQ29udGVudCBnb2VzIGhlcmVcbiAqICAgICA8L2tlbmRvLXBkZi1leHBvcnQ+XG4gKiAgIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBQREZFeHBvcnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjcmVhdG9yIG9mIHRoZSBQREYgZG9jdW1lbnQuXG4gICAgICAgICAqIEBkZWZhdWx0IFwiS2VuZG8gVUkgUERGIEdlbmVyYXRvclwiXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNyZWF0b3IgPSAnS2VuZG8gVUkgUERGIEdlbmVyYXRvcic7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGV4cG9ydGVkIFBERiBmaWxlLlxuICAgICAgICAgKiBAZGVmYXVsdCBcIkV4cG9ydC5wZGZcIlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWxlTmFtZSA9ICdleHBvcnQucGRmJztcbiAgICB9XG4gICAgZ2V0IGRyYXdNYXJnaW4oKSB7XG4gICAgICAgIGNvbnN0IG1hcmdpbkNvbXBvbmVudCA9IHRoaXMubWFyZ2luQ29tcG9uZW50O1xuICAgICAgICBsZXQgbWFyZ2luID0gdGhpcy5tYXJnaW47XG4gICAgICAgIGlmIChtYXJnaW5Db21wb25lbnQpIHtcbiAgICAgICAgICAgIG1hcmdpbiA9IE9iamVjdC5hc3NpZ24obWFyZ2luIHx8IHt9LCBtYXJnaW5Db21wb25lbnQub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcmdpbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIGNvbnRlbnQgYXMgYSBQREYgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS5cbiAgICAgKiBAcGFyYW0gZmlsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgKi9cbiAgICBzYXZlQXMoZmlsZU5hbWUgPSB0aGlzLmZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMuc2F2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZmlsZU5hbWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHBvcnRzIHRoZSBjb250ZW50IGFzIGEgYEdyb3VwYCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybiAtIFRoZSByb290IGdyb3VwIG9mIHRoZSBleHBvcnRlZCBzY2VuZS5cbiAgICAgKi9cbiAgICBleHBvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEVsZW1lbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgICBzYXZlKGVsZW1lbnQsIGZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0RWxlbWVudChlbGVtZW50KVxuICAgICAgICAgICAgLnRoZW4oZ3JvdXAgPT4gdGhpcy5leHBvcnRHcm91cChncm91cCwgdGhpcy5wZGZPcHRpb25zKCkpKVxuICAgICAgICAgICAgLnRoZW4oZGF0YVVyaSA9PiB0aGlzLnNhdmVEYXRhVXJpKGRhdGFVcmksIGZpbGVOYW1lLCB0aGlzLnNhdmVPcHRpb25zKCkpKTtcbiAgICB9XG4gICAgZXhwb3J0RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmRyYXdFbGVtZW50KGVsZW1lbnQsIHRoaXMuZHJhd09wdGlvbnMoKSk7XG4gICAgICAgIGNvbnN0IGNsZWFudXAgPSB0aGlzLmNsZWFudXAuYmluZCh0aGlzKTtcbiAgICAgICAgcHJvbWlzZS50aGVuKGNsZWFudXAsIGNsZWFudXApO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgY2xlYW51cCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZVRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VUZW1wbGF0ZS5kZXN0cm95KCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5wYWdlVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhd09wdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2VUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlVGVtcGxhdGUgPSBjb21waWxlVGVtcGxhdGUodGhpcy5wYWdlVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGVSZWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhdm9pZExpbmtzOiB0aGlzLmF2b2lkTGlua3MsXG4gICAgICAgICAgICBmb3JjZVBhZ2VCcmVhazogdGhpcy5mb3JjZVBhZ2VCcmVhayxcbiAgICAgICAgICAgIGtlZXBUb2dldGhlcjogdGhpcy5rZWVwVG9nZXRoZXIsXG4gICAgICAgICAgICBtYXJnaW46IHRoaXMuZHJhd01hcmdpbixcbiAgICAgICAgICAgIHBhcGVyU2l6ZTogdGhpcy5wYXBlclNpemUsXG4gICAgICAgICAgICBsYW5kc2NhcGU6IHRoaXMubGFuZHNjYXBlLFxuICAgICAgICAgICAgcmVwZWF0SGVhZGVyczogdGhpcy5yZXBlYXRIZWFkZXJzLFxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuc2NhbGUsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5wYWdlVGVtcGxhdGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcGRmT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1dG9QcmludDogdGhpcy5hdXRvUHJpbnQsXG4gICAgICAgICAgICBhdXRob3I6IHRoaXMuYXV0aG9yLFxuICAgICAgICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICAgICAgaW1nRFBJOiB0aGlzLmltYWdlUmVzb2x1dGlvbixcbiAgICAgICAgICAgIGtleXdvcmRzOiB0aGlzLmtleXdvcmRzLFxuICAgICAgICAgICAgbGFuZHNjYXBlOiB0aGlzLmxhbmRzY2FwZSxcbiAgICAgICAgICAgIG1hcmdpbjogdGhpcy5kcmF3TWFyZ2luLFxuICAgICAgICAgICAgbXVsdGlQYWdlOiB0cnVlLFxuICAgICAgICAgICAgcGFwZXJTaXplOiB0aGlzLnBhcGVyU2l6ZSxcbiAgICAgICAgICAgIHByb2R1Y2VyOiB0aGlzLnByb2R1Y2VyLFxuICAgICAgICAgICAgc3ViamVjdDogdGhpcy5zdWJqZWN0LFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2F2ZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JjZVByb3h5OiB0aGlzLmZvcmNlUHJveHksXG4gICAgICAgICAgICBwcm94eURhdGE6IHRoaXMucHJveHlEYXRhLFxuICAgICAgICAgICAgcHJveHlUYXJnZXQ6IHRoaXMucHJveHlUYXJnZXQsXG4gICAgICAgICAgICBwcm94eVVSTDogdGhpcy5wcm94eVVSTFxuICAgICAgICB9O1xuICAgIH1cbiAgICBkcmF3RWxlbWVudChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkcmF3RE9NKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBleHBvcnRHcm91cChncm91cCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZXhwb3J0UERGKGdyb3VwLCBvcHRpb25zKTtcbiAgICB9XG4gICAgc2F2ZURhdGFVcmkoZGF0YVVyaSwgZmlsZU5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgc2F2ZUFzKGRhdGFVcmksIGZpbGVOYW1lLCBvcHRpb25zKTtcbiAgICB9XG59XG5QREZFeHBvcnRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXBkZi1leHBvcnQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgPGRpdj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9kaXY+YFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QREZFeHBvcnRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5QREZFeHBvcnRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYXV0b1ByaW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRob3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF2b2lkTGlua3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcmNlUGFnZUJyZWFrOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBrZWVwVG9nZXRoZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNyZWF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGltYWdlUmVzb2x1dGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsZU5hbWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcmNlUHJveHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtleXdvcmRzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYW5kc2NhcGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1hcmdpbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFwZXJTaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXBlYXRIZWFkZXJzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzY2FsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcHJveHlEYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwcm94eVVSTDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcHJveHlUYXJnZXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByb2R1Y2VyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdWJqZWN0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZVRlbXBsYXRlRGlyZWN0aXZlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtQREZUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIG1hcmdpbkNvbXBvbmVudDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbUERGTWFyZ2luQ29tcG9uZW50LF0gfV1cbn07XG5cbmNvbnN0IENPTVBPTkVOVF9ESVJFQ1RJVkVTID0gW1xuICAgIFBERkV4cG9ydENvbXBvbmVudCxcbiAgICBQREZNYXJnaW5Db21wb25lbnQsXG4gICAgUERGVGVtcGxhdGVEaXJlY3RpdmVcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSkgZGVmaW5pdGlvbiBmb3IgdGhlIFBERiBFeHBvcnQgZGlyZWN0aXZlLlxuICovXG5jbGFzcyBQREZFeHBvcnRNb2R1bGUge1xufVxuUERGRXhwb3J0TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtDT01QT05FTlRfRElSRUNUSVZFU10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IFBERkV4cG9ydENvbXBvbmVudCwgUERGRXhwb3J0TW9kdWxlLCBQREZNYXJnaW5Db21wb25lbnQsIFBERlRlbXBsYXRlRGlyZWN0aXZlLCBjb21waWxlVGVtcGxhdGUgfTtcbiJdfQ==","let current = {\n toString: (value) => value\n};\n\nclass IntlService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static toString(value, format) {\n return current.toString(value, format);\n }\n}\n\nexport default IntlService;","import map from './utils/map';\nimport createZip from './utils/create-zip';\nimport IntlService from './services/intl-service';\nimport dateToSerial from './utils/time';\n\nconst MIME_TYPE = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\nconst DATA_URL_PREFIX = `data:${MIME_TYPE};base64,`;\nconst DATA_URL_OPTIONS = { compression: \"DEFLATE\", type: \"base64\" };\nconst BLOB_OPTIONS = { compression: \"DEFLATE\", type: \"blob\" };\nconst ARRAYBUFFER_OPTIONS = { compression: \"DEFLATE\", type: \"arraybuffer\" };\n\n/* eslint-disable key-spacing, no-confusing-arrow, no-constant-condition, indent, no-nested-ternary, consistent-return */\n\nfunction toDataURI(content) {\n return DATA_URL_PREFIX + content;\n}\n\nfunction indexOf(thing, array) {\n return array.indexOf(thing);\n}\n\nconst parseJSON = JSON.parse.bind(JSON);\n\nfunction ESC(val) {\n return String(val)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\\\"/g, \""\")\n .replace(/\\'/g, \"'\");\n}\n\nfunction repeat(count, func) {\n let str = \"\";\n for (let i = 0; i < count; ++i) {\n str += func(i);\n }\n return str;\n}\n\nfunction foreach(arr, func) {\n let str = \"\";\n if (arr != null) {\n if (Array.isArray(arr)) {\n for (let i = 0; i < arr.length; ++i) {\n str += func(arr[i], i);\n }\n } else if (typeof arr == \"object\") {\n Object.keys(arr).forEach((key, i) => {\n str += func(arr[key], key, i);\n });\n }\n }\n return str;\n}\n\nconst XMLHEAD = '\\r';\n\nconst RELS = `${XMLHEAD}\n \n \n \n \n `;\n\nconst CORE = ({ creator, lastModifiedBy, created, modified }) => `${XMLHEAD}\n \n ${ESC(creator)}\n ${ESC(lastModifiedBy)}\n ${ESC(created)}\n ${ESC(modified)}\n`;\n\nconst APP = ({ sheets }) => `${XMLHEAD}\n\n Microsoft Excel\n 0\n false\n \n \n \n Worksheets\n \n \n ${sheets.length}\n \n \n \n \n ${\n foreach(sheets, (sheet, i) =>\n sheet.options.title\n ? `${ESC(sheet.options.title)}`\n : `Sheet${i + 1}`\n )\n }\n \n false\n false\n false\n 14.0300\n`;\n\nconst CONTENT_TYPES = ({ sheetCount, commentFiles, drawingFiles }) => `${XMLHEAD}\n\n \n \n \n \n \n \n \n \n \n ${repeat(sheetCount, idx =>\n ``)}\n ${foreach(commentFiles, filename =>\n ``)}\n ${foreach(drawingFiles, filename =>\n ``)}\n \n \n`;\n\nconst WORKBOOK = ({ sheets, filterNames, userNames }) => `${XMLHEAD}\n\n \n \n \n \n \n \n ${foreach(sheets, ({ options }, i) => {\n const name = options.name || options.title || `Sheet${i + 1}`;\n return ``;\n })}\n \n ${filterNames.length || userNames.length ? `\n \n ${foreach(filterNames, (f) => `\n `)}\n ${foreach(userNames, (f) => `\n `)}\n ` : ''}\n \n`;\n\nconst WORKSHEET = ({\n frozenColumns,\n frozenRows,\n columns,\n defaults,\n data,\n index,\n mergeCells,\n autoFilter,\n filter,\n showGridLines,\n hyperlinks,\n validations,\n defaultCellStyleId,\n rtl,\n legacyDrawing,\n drawing,\n lastRow,\n lastCol\n}) => `${XMLHEAD}\n\n ${lastRow && lastCol ? `` : \"\"}\n\n \n \n ${frozenRows || frozenColumns ? `\n ` : ''}\n \n \n\n \n\n ${defaultCellStyleId != null || (columns && columns.length > 0) ? `\n \n ${!columns || !columns.length ? `\n
  • ` : ''}\n ${foreach(columns, (column, ci) => {\n const columnIndex = typeof column.index === \"number\" ? column.index + 1 : (ci + 1);\n if (column.width === 0) {\n return ``;\n }\n return ``;\n })}\n ` : ''}\n\n \n ${foreach(data, (row, ri) => {\n const rowIndex = typeof row.index === \"number\" ? row.index + 1 : (ri + 1);\n return `\n \n ${foreach(row.data, (cell) => `\n \n ${cell.formula != null ? writeFormula(cell.formula) : ''}\n ${cell.value != null ? `${ESC(cell.value)}` : ''}\n `)}\n \n `;})}\n \n\n ${autoFilter ? ``\n : filter ? spreadsheetFilters(filter) : ''}\n\n ${mergeCells.length ? `\n \n ${foreach(mergeCells, (ref) => ``)}\n ` : ''}\n\n ${validations.length ? `\n \n ${foreach(validations, (val) => `\n \n ${val.formula1 ? `${ESC(val.formula1)}` : ''}\n ${val.formula2 ? `${ESC(val.formula2)}` : ''}\n `)}\n ` : ''}\n\n ${hyperlinks.length ? `\n \n ${foreach(hyperlinks, (link) => `\n `)}\n ` : ''}\n\n \n ${drawing ? `` : ''}\n ${legacyDrawing ? `` : ''}\n`;\n\nconst WORKBOOK_RELS = ({ count }) => `${XMLHEAD}\n\n ${repeat(count, (idx) => `\n `)}\n \n \n`;\n\nconst WORKSHEET_RELS = ({ hyperlinks, comments, sheetIndex, drawings }) => `${XMLHEAD}\n\n ${foreach(hyperlinks, (link) => `\n `)}\n ${!comments.length ? '' : `\n \n `}\n ${!drawings.length ? '' : `\n `}\n`;\n\nconst COMMENTS_XML = ({ comments }) => `${XMLHEAD}\n\n \n \n \n \n ${foreach(comments, comment => `\n \n \n \n \n \n \n \n \n \n ${ESC(comment.text)}\n \n \n `)}\n \n`;\n\nconst LEGACY_DRAWING = ({ comments }) => `\\\n\n \n \n \n \n ${foreach(comments, comment => `\n \n \n \n \n \n ${comment.anchor}\n False\n ${comment.row}\n ${comment.col}\n \n `)}\n`;\n\nconst DRAWINGS_XML = (drawings) => `${XMLHEAD}\n\n ${foreach(drawings, (drawing, index) => `\n \n \n ${drawing.col}\n ${drawing.colOffset}\n ${drawing.row}\n ${drawing.rowOffset}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `)}\n`;\n\nconst DRAWINGS_RELS_XML = (rels) => `${XMLHEAD}\n\n ${foreach(rels, rel => `\n `)}\n`;\n\nconst SHARED_STRINGS = ({ count, uniqueCount, indexes }) => `${XMLHEAD}\n\n ${foreach(Object.keys(indexes), (index) => `\n ${ESC(index.substring(1))}`)}\n`;\n\nconst STYLES = ({\n formats,\n fonts,\n fills,\n borders,\n styles\n}) => `${XMLHEAD}\n\n \n ${foreach(formats, (format, fi) => `\n `)}\n \n \n \n \n \n \n \n \n \n ${foreach(fonts, (font) => `\n \n ${font.bold ? '' : ''}\n ${font.italic ? '' : ''}\n ${font.underline ? '' : ''}\n \n ${font.color ? `` : ''}\n ${font.fontFamily ? `\n \n \n ` : `\n \n \n \n `}\n `)}\n \n \n \n \n ${foreach(fills, (fill) => `\n ${fill.background ? `\n \n \n \n \n \n ` : ''}`)}\n \n \n \n ${foreach(borders, borderTemplate)}\n \n \n \n \n \n \n ${foreach(styles, (style) => `\n \n ${style.textAlign || style.verticalAlign || style.wrap ? `\n \n ` : ''}\n \n `)}\n \n \n \n \n \n \n`;\n\nfunction writeFormula(formula) {\n if (typeof formula == \"string\") {\n return `${ESC(formula)}`;\n }\n // array formulas\n return `${ESC(formula.src)}`;\n}\n\nfunction numChar(colIndex) {\n const letter = Math.floor(colIndex / 26) - 1;\n\n return (letter >= 0 ? numChar(letter) : \"\") + String.fromCharCode(65 + (colIndex % 26));\n}\n\nfunction ref(rowIndex, colIndex) {\n return numChar(colIndex) + (rowIndex + 1);\n}\n\nfunction $ref(rowIndex, colIndex) {\n return \"$\" + numChar(colIndex) + \"$\" + (rowIndex + 1);\n}\n\nfunction filterRowIndex(options) {\n const frozenRows = options.frozenRows || (options.freezePane || {}).rowSplit || 1;\n return frozenRows - 1;\n}\n\nfunction toWidth(px) {\n const maximumDigitWidth = 7;\n return (px / maximumDigitWidth) - (Math.floor(128 / maximumDigitWidth) / 256);\n}\n\nfunction toHeight(px) {\n return px * 0.75;\n}\n\nfunction stripFunnyChars(value) {\n return String(value)\n .replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g, \"\") // leave CRLF in\n .replace(/\\r?\\n/g, \"\\r\\n\"); // make sure LF is preceded by CR\n}\n\nclass Worksheet {\n\n constructor(options, sharedStrings, styles, borders) {\n this.options = options;\n this._strings = sharedStrings;\n this._styles = styles;\n this._borders = borders;\n this._validations = {};\n this._comments = [];\n this._drawings = options.drawings || [];\n this._hyperlinks = (this.options.hyperlinks || []).map(\n (link, i) => Object.assign({}, link, { rId: `link${i}` }));\n }\n\n relsToXML() {\n const hyperlinks = this._hyperlinks;\n const comments = this._comments;\n const drawings = this._drawings;\n\n if (hyperlinks.length || comments.length || drawings.length) {\n return WORKSHEET_RELS({\n hyperlinks : hyperlinks,\n comments : comments,\n sheetIndex : this.options.sheetIndex,\n drawings : drawings\n });\n }\n }\n\n toXML(index) {\n const mergeCells = this.options.mergedCells || [];\n const rows = this.options.rows || [];\n const data = inflate(rows, mergeCells);\n\n this._readCells(data);\n\n let autoFilter = this.options.filter;\n let filter;\n if (autoFilter && (typeof autoFilter.from === \"number\") && (typeof autoFilter.to === \"number\")) {\n // Grid enables auto filter\n autoFilter = {\n from: ref(filterRowIndex(this.options), autoFilter.from),\n to: ref(filterRowIndex(this.options), autoFilter.to)\n };\n } else if (autoFilter && autoFilter.ref && autoFilter.columns) {\n // this is probably from the Spreadsheet\n filter = autoFilter;\n autoFilter = null;\n }\n\n const validations = [];\n for (let i in this._validations) {\n if (Object.prototype.hasOwnProperty.call(this._validations, i)) {\n validations.push(this._validations[i]);\n }\n }\n\n let defaultCellStyleId = null;\n if (this.options.defaultCellStyle) {\n defaultCellStyleId = this._lookupStyle(this.options.defaultCellStyle);\n }\n\n const freezePane = this.options.freezePane || {};\n const defaults = this.options.defaults || {};\n const lastRow = this.options.rows ? this._getLastRow() : 1;\n const lastCol = this.options.rows ? this._getLastCol() : 1;\n\n return WORKSHEET({\n frozenColumns: this.options.frozenColumns || freezePane.colSplit,\n frozenRows: this.options.frozenRows || freezePane.rowSplit,\n columns: this.options.columns,\n defaults: defaults,\n data: data,\n index: index,\n mergeCells: mergeCells,\n autoFilter: autoFilter,\n filter: filter,\n showGridLines: this.options.showGridLines,\n hyperlinks: this._hyperlinks,\n validations: validations,\n defaultCellStyleId: defaultCellStyleId,\n rtl: this.options.rtl !== undefined ? this.options.rtl : defaults.rtl,\n legacyDrawing: this._comments.length ? `vml${this.options.sheetIndex}` : null,\n drawing: this._drawings.length ? `drw${this.options.sheetIndex}` : null,\n lastRow: lastRow,\n lastCol: lastCol\n });\n }\n\n commentsXML() {\n if (this._comments.length) {\n return COMMENTS_XML({ comments: this._comments });\n }\n }\n\n drawingsXML(images) {\n if (this._drawings.length) {\n let rels = {};\n let main = this._drawings.map(drw => {\n let ref = parseRef(drw.topLeftCell);\n let img = rels[drw.image];\n if (!img) {\n img = rels[drw.image] = {\n rId: `img${drw.image}`,\n target: images[drw.image].target\n };\n }\n return {\n col : ref.col,\n colOffset : pixelsToExcel(drw.offsetX),\n row : ref.row,\n rowOffset : pixelsToExcel(drw.offsetY),\n width : pixelsToExcel(drw.width),\n height : pixelsToExcel(drw.height),\n imageId : img.rId\n };\n });\n return {\n main: DRAWINGS_XML(main),\n rels: DRAWINGS_RELS_XML(rels)\n };\n }\n }\n\n legacyDrawing() {\n if (this._comments.length) {\n return LEGACY_DRAWING({ comments: this._comments });\n }\n }\n\n _lookupString(value) {\n const key = \"$\" + value;\n const index = this._strings.indexes[key];\n let result;\n\n if (index !== undefined) {\n result = index;\n } else {\n result = this._strings.indexes[key] = this._strings.uniqueCount;\n this._strings.uniqueCount ++;\n }\n\n this._strings.count ++;\n\n return result;\n }\n\n _lookupStyle(style) {\n const json = JSON.stringify(style);\n\n if (json === \"{}\") {\n return 0;\n }\n\n let index = indexOf(json, this._styles);\n\n if (index < 0) {\n index = this._styles.push(json) - 1;\n }\n\n // There is one default style\n return index + 1;\n }\n\n _lookupBorder(border) {\n const json = JSON.stringify(border);\n if (json === \"{}\") {\n return;\n }\n\n let index = indexOf(json, this._borders);\n if (index < 0) {\n index = this._borders.push(json) - 1;\n }\n\n // There is one default border\n return index + 1;\n }\n\n _readCells(rowData) {\n for (let i = 0; i < rowData.length; i++) {\n const row = rowData[i];\n const cells = row.cells;\n\n row.data = [];\n\n for (let j = 0; j < cells.length; j++) {\n const cellData = this._cell(cells[j], row.index, j);\n if (cellData) {\n row.data.push(cellData);\n }\n }\n }\n }\n\n _cell(data, rowIndex, cellIndex) {\n if (!data || data === EMPTY_CELL) {\n return null;\n }\n\n let value = data.value;\n\n let border = {};\n\n if (data.borderLeft) {\n border.left = data.borderLeft;\n }\n\n if (data.borderRight) {\n border.right = data.borderRight;\n }\n\n if (data.borderTop) {\n border.top = data.borderTop;\n }\n\n if (data.borderBottom) {\n border.bottom = data.borderBottom;\n }\n\n if (data.dBorders) {\n border.diagonal = data.dBorders;\n }\n\n border = this._lookupBorder(border);\n\n const defStyle = this.options.defaultCellStyle || {};\n let style = { borderId: border };\n\n (function(add) {\n add(\"color\");\n add(\"background\");\n add(\"bold\");\n add(\"italic\");\n add(\"underline\");\n if (!add(\"fontFamily\")) { add(\"fontName\", \"fontFamily\"); }\n add(\"fontSize\");\n add(\"format\");\n if (!add(\"textAlign\")) { add(\"hAlign\", \"textAlign\"); }\n if (!add(\"verticalAlign\")) { add(\"vAlign\", \"verticalAlign\"); }\n add(\"wrap\");\n add(\"indent\");\n })(\n function(prop, target) {\n let val = data[prop];\n if (val === undefined) {\n val = defStyle[prop];\n }\n if (val !== undefined) {\n style[target || prop] = val;\n return true;\n }\n }\n );\n\n const columns = this.options.columns || [];\n\n const column = columns[cellIndex];\n let type = typeof value;\n\n if (column && column.autoWidth && (!data.colSpan || data.colSpan === 1)) {\n let displayValue = value;\n\n // XXX: let's not bring kendo.toString in only for this.\n // better wait until the spreadsheet engine is available as a separate\n // component, then we can use a real Excel-like formatter.\n //\n if (type === \"number\") {\n // kendo.toString will not behave exactly like the Excel format\n // Still, it's the best we have available for estimating the character count.\n displayValue = IntlService.toString(value, data.format);\n }\n\n column.width = Math.max(column.width || 0, String(displayValue).length);\n }\n\n if (type === \"string\") {\n value = stripFunnyChars(value);\n value = this._lookupString(value);\n type = \"s\";\n } else if (type === \"number\") {\n type = \"n\";\n } else if (type === \"boolean\") {\n type = \"b\";\n value = Number(value);\n } else if (value && value.getTime) {\n type = null;\n value = dateToSerial(value);\n if (!style.format) {\n style.format = \"mm-dd-yy\";\n }\n } else {\n type = null;\n value = null;\n }\n\n style = this._lookupStyle(style);\n\n const cellName = ref(rowIndex, cellIndex);\n\n if (data.validation) {\n this._addValidation(data.validation, cellName);\n }\n\n if (data.comment) {\n let anchor = [\n cellIndex + 1, // start column\n 15, // start column offset\n rowIndex, // start row\n 10, // start row offset\n cellIndex + 3, // end column\n 15, // end column offset\n rowIndex + 3, // end row\n 4 // end row offset\n ];\n this._comments.push({\n ref : cellName,\n text : data.comment,\n row : rowIndex,\n col : cellIndex,\n anchor : anchor.join(\", \")\n });\n }\n\n return {\n value: value,\n formula: data.formula,\n type: type,\n style: style,\n ref: cellName\n };\n }\n\n _addValidation(v, ref) {\n const tmp = {\n showErrorMessage : v.type === \"reject\" ? 1 : 0,\n formula1 : v.from,\n formula2 : v.to,\n type : MAP_EXCEL_TYPE[v.dataType] || v.dataType,\n operator : MAP_EXCEL_OPERATOR[v.comparerType] || v.comparerType,\n allowBlank : v.allowNulls ? 1 : 0,\n showDropDown : v.showButton ? 0 : 1, // LOL, Excel!\n error : v.messageTemplate,\n errorTitle : v.titleTemplate\n };\n const json = JSON.stringify(tmp);\n if (!this._validations[json]) {\n this._validations[json] = tmp;\n tmp.sqref = [];\n }\n this._validations[json].sqref.push(ref);\n }\n\n _getLastRow() {\n return countData(this.options.rows);\n }\n\n _getLastCol() {\n let last = 0;\n this.options.rows.forEach(function(row) {\n if (row.cells) {\n last = Math.max(last, countData(row.cells));\n }\n });\n return last;\n }\n}\n\nfunction countData(data) {\n let last = data.length;\n data.forEach(function(el) {\n if (el.index && el.index >= last) {\n last = el.index + 1;\n }\n });\n return last;\n}\n\nconst MAP_EXCEL_OPERATOR = {\n // includes only what differs; key is our operator, value is Excel\n // operator.\n greaterThanOrEqualTo : \"greaterThanOrEqual\",\n lessThanOrEqualTo : \"lessThanOrEqual\"\n};\n\nconst MAP_EXCEL_TYPE = {\n // eslint-disable-next-line id-denylist\n number: \"decimal\"\n};\n\nconst defaultFormats = {\n \"General\": 0,\n \"0\": 1,\n \"0.00\": 2,\n \"#,##0\": 3,\n \"#,##0.00\": 4,\n \"0%\": 9,\n \"0.00%\": 10,\n \"0.00E+00\": 11,\n \"# ?/?\": 12,\n \"# ??/??\": 13,\n \"mm-dd-yy\": 14,\n \"d-mmm-yy\": 15,\n \"d-mmm\": 16,\n \"mmm-yy\": 17,\n \"h:mm AM/PM\": 18,\n \"h:mm:ss AM/PM\": 19,\n \"h:mm\": 20,\n \"h:mm:ss\": 21,\n \"m/d/yy h:mm\": 22,\n \"#,##0 ;(#,##0)\": 37,\n \"#,##0 ;[Red](#,##0)\": 38,\n \"#,##0.00;(#,##0.00)\": 39,\n \"#,##0.00;[Red](#,##0.00)\": 40,\n \"mm:ss\": 45,\n \"[h]:mm:ss\": 46,\n \"mmss.0\": 47,\n \"##0.0E+0\": 48,\n \"@\": 49,\n \"[$-404]e/m/d\": 27,\n \"m/d/yy\": 30,\n \"t0\": 59,\n \"t0.00\": 60,\n \"t#,##0\": 61,\n \"t#,##0.00\": 62,\n \"t0%\": 67,\n \"t0.00%\": 68,\n \"t# ?/?\": 69,\n \"t# ??/??\": 70\n};\n\nfunction maybeRGB(value) {\n function hex(val) {\n let x = parseInt(val, 10).toString(16);\n return x.length < 2 ? \"0\" + x : x;\n }\n\n let m = /^rgba?\\((\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([0-9.]+)\\s*)?\\)/i.exec(value.trim());\n if (m) {\n let opacity = (m[4] ? parseFloat(m[4]) : 1) * 255 | 0;\n return \"#\" + hex(opacity) + hex(m[1]) + hex(m[2]) + hex(m[3]);\n }\n return value;\n}\n\nfunction convertColor(value) {\n let color = maybeRGB(value);\n if (color.length < 6) {\n color = color.replace(/(\\w)/g, function($0, $1) {\n return $1 + $1;\n });\n }\n\n color = color.substring(1).toUpperCase();\n\n if (color.length < 8) {\n color = \"FF\" + color;\n }\n\n return color;\n}\n\nclass Workbook {\n\n constructor(options) {\n this.options = options || {};\n this._strings = {\n indexes: {},\n count: 0,\n uniqueCount: 0\n };\n this._styles = [];\n this._borders = [];\n this._images = this.options.images;\n this._imgId = 0;\n\n this._sheets = map(this.options.sheets || [], (options, i) => {\n options.defaults = this.options;\n options.sheetIndex = i + 1;\n return new Worksheet(options, this._strings, this._styles, this._borders);\n });\n }\n\n imageFilename(mimeType) {\n const id = ++this._imgId;\n switch (mimeType) {\n case \"image/jpg\":\n case \"image/jpeg\":\n return `image${id}.jpg`;\n case \"image/png\":\n return `image${id}.png`;\n case \"image/gif\":\n return `image${id}.gif`;\n default:\n return `image${id}.bin`; // XXX: anything better to do here?\n }\n }\n\n toZIP() {\n const zip = createZip();\n\n const docProps = zip.folder(\"docProps\");\n\n docProps.file(\"core.xml\", CORE({\n creator: this.options.creator || \"Kendo UI\",\n lastModifiedBy: this.options.creator || \"Kendo UI\",\n created: this.options.date || new Date().toJSON(),\n modified: this.options.date || new Date().toJSON()\n }));\n\n const sheetCount = this._sheets.length;\n\n docProps.file(\"app.xml\", APP({ sheets: this._sheets }));\n\n const rels = zip.folder(\"_rels\");\n rels.file(\".rels\", RELS);\n\n const xl = zip.folder(\"xl\");\n\n const xlRels = xl.folder(\"_rels\");\n xlRels.file(\"workbook.xml.rels\", WORKBOOK_RELS({ count: sheetCount }));\n\n if (this._images) {\n const media = xl.folder(\"media\");\n Object.keys(this._images).forEach(id => {\n const img = this._images[id];\n const filename = this.imageFilename(img.type);\n media.file(filename, img.data);\n img.target = `../media/${filename}`;\n });\n }\n\n const sheetIds = {};\n xl.file(\"workbook.xml\", WORKBOOK({\n sheets: this._sheets,\n filterNames: map(this._sheets, function(sheet, index) {\n const options = sheet.options;\n const sheetName = (options.name || options.title || \"Sheet\" + (index + 1));\n sheetIds[sheetName.toLowerCase()] = index;\n const filter = options.filter;\n if (filter) {\n if (filter.ref) {\n // spreadsheet provides `ref`\n let a = filter.ref.split(\":\");\n let from = parseRef(a[0]);\n let to = parseRef(a[1]);\n return {\n localSheetId: index,\n name: sheetName,\n from: $ref(from.row, from.col),\n to: $ref(to.row, to.col)\n };\n } else if (typeof filter.from !== \"undefined\" && typeof filter.to !== \"undefined\") {\n // grid does this\n return {\n localSheetId: index,\n name: sheetName,\n from: $ref(filterRowIndex(options), filter.from),\n to: $ref(filterRowIndex(options), filter.to)\n };\n }\n }\n }),\n userNames: map(this.options.names || [], function(def) {\n return {\n name: def.localName,\n localSheetId: def.sheet ? sheetIds[def.sheet.toLowerCase()] : null,\n value: def.value,\n hidden: def.hidden\n };\n })\n }));\n\n const worksheets = xl.folder(\"worksheets\");\n const drawings = xl.folder(\"drawings\");\n const drawingsRels = drawings.folder(\"_rels\");\n const sheetRels = worksheets.folder(\"_rels\");\n const commentFiles = [];\n const drawingFiles = [];\n\n for (let idx = 0; idx < sheetCount; idx++) {\n const sheet = this._sheets[idx];\n const sheetName = `sheet${idx + 1}.xml`;\n const sheetXML = sheet.toXML(idx); // must be called before relsToXML\n const relsXML = sheet.relsToXML();\n const commentsXML = sheet.commentsXML();\n const legacyDrawing = sheet.legacyDrawing();\n const drawingsXML = sheet.drawingsXML(this._images);\n\n if (relsXML) {\n sheetRels.file(sheetName + \".rels\", relsXML);\n }\n if (commentsXML) {\n let name = `comments${sheet.options.sheetIndex}.xml`;\n xl.file(name, commentsXML);\n commentFiles.push(name);\n }\n if (legacyDrawing) {\n drawings.file(`vmlDrawing${sheet.options.sheetIndex}.vml`, legacyDrawing);\n }\n if (drawingsXML) {\n let name = `drawing${sheet.options.sheetIndex}.xml`;\n drawings.file(name, drawingsXML.main);\n drawingsRels.file(`${name}.rels`, drawingsXML.rels);\n drawingFiles.push(name);\n }\n\n worksheets.file(sheetName, sheetXML);\n }\n\n const borders = map(this._borders, parseJSON);\n\n const styles = map(this._styles, parseJSON);\n\n const hasFont = function(style) {\n return style.underline || style.bold || style.italic || style.color || style.fontFamily || style.fontSize;\n };\n\n const convertFontSize = function(value) {\n let fontInPx = Number(value);\n let fontInPt;\n\n if (fontInPx) {\n fontInPt = fontInPx * 3 / 4;\n }\n\n return fontInPt;\n };\n\n const fonts = map(styles, function(style) {\n if (style.fontSize) {\n style.fontSize = convertFontSize(style.fontSize);\n }\n\n if (style.color) {\n style.color = convertColor(style.color);\n }\n\n if (hasFont(style)) {\n return style;\n }\n });\n\n const formats = map(styles, function(style) {\n if (style.format && defaultFormats[style.format] === undefined) {\n return style;\n }\n });\n\n const fills = map(styles, function(style) {\n if (style.background) {\n style.background = convertColor(style.background);\n return style;\n }\n });\n\n xl.file(\"styles.xml\", STYLES({\n fonts: fonts,\n fills: fills,\n formats: formats,\n borders: borders,\n styles: map(styles, function(style) {\n const result = {};\n\n if (hasFont(style)) {\n result.fontId = indexOf(style, fonts) + 1;\n }\n\n if (style.background) {\n result.fillId = indexOf(style, fills) + 2;\n }\n\n result.textAlign = style.textAlign;\n result.indent = style.indent;\n result.verticalAlign = style.verticalAlign;\n result.wrap = style.wrap;\n result.borderId = style.borderId;\n\n if (style.format) {\n if (defaultFormats[style.format] !== undefined) {\n result.numFmtId = defaultFormats[style.format];\n } else {\n result.numFmtId = 165 + indexOf(style, formats);\n }\n }\n\n return result;\n })\n }));\n\n xl.file(\"sharedStrings.xml\", SHARED_STRINGS(this._strings));\n\n zip.file(\"[Content_Types].xml\", CONTENT_TYPES({\n sheetCount: sheetCount,\n commentFiles: commentFiles,\n drawingFiles: drawingFiles\n }));\n\n return zip;\n }\n\n toDataURL() {\n const zip = this.toZIP();\n\n return zip.generateAsync ? zip.generateAsync(DATA_URL_OPTIONS).then(toDataURI) : toDataURI(zip.generate(DATA_URL_OPTIONS));\n }\n\n toBlob() {\n const zip = this.toZIP();\n if (zip.generateAsync) {\n return zip.generateAsync(BLOB_OPTIONS);\n }\n return new Blob([ zip.generate(ARRAYBUFFER_OPTIONS) ], { type: MIME_TYPE });\n }\n}\n\nfunction borderStyle(width) {\n let alias = \"thin\";\n\n if (width === 2) {\n alias = \"medium\";\n } else if (width === 3) {\n alias = \"thick\";\n }\n\n return alias;\n}\n\nfunction borderSideTemplate(name, style) {\n let result = \"\";\n\n if (style) {\n result += \"<\" + name + \" style=\\\"\" + borderStyle(style.size) + \"\\\">\";\n if (style.color) {\n result += \"\";\n }\n result += \"\";\n }\n\n return result;\n}\n\nfunction borderTemplate(border) {\n let diag = border.diagonal ? border.diagonal.type : 0;\n return `\n ${borderSideTemplate(\"left\", border.left)}\n ${borderSideTemplate(\"right\", border.right)}\n ${borderSideTemplate(\"top\", border.top)}\n ${borderSideTemplate(\"bottom\", border.bottom)}\n ${borderSideTemplate(\"diagonal\", border.diagonal)}\n `;\n}\n\nconst EMPTY_CELL = {};\nfunction inflate(rows, mergedCells) {\n const rowData = [];\n const rowsByIndex = [];\n\n indexRows(rows, function(row, index) {\n const data = {\n _source: row,\n index: index,\n height: row.height,\n level: row.level,\n cells: []\n };\n\n rowData.push(data);\n rowsByIndex[index] = data;\n });\n\n const sorted = sortByIndex(rowData).slice(0);\n const ctx = {\n rowData: rowData,\n rowsByIndex: rowsByIndex,\n mergedCells: mergedCells\n };\n\n for (let i = 0; i < sorted.length; i++) {\n fillCells(sorted[i], ctx);\n delete sorted[i]._source;\n }\n\n return sortByIndex(rowData);\n}\n\nfunction indexRows(rows, callback) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (!row) {\n continue;\n }\n\n let index = row.index;\n if (typeof index !== \"number\") {\n index = i;\n }\n\n callback(row, index);\n }\n}\n\nfunction sortByIndex(items) {\n return items.sort(function(a, b) {\n return a.index - b.index;\n });\n}\n\nfunction pushUnique(array, el) {\n if (array.indexOf(el) < 0) {\n array.push(el);\n }\n}\n\nfunction getSpan(mergedCells, ref) {\n for (let i = 0; i < mergedCells.length; ++i) {\n const range = mergedCells[i];\n const a = range.split(\":\");\n let topLeft = a[0];\n if (topLeft === ref) {\n let bottomRight = a[1];\n topLeft = parseRef(topLeft);\n bottomRight = parseRef(bottomRight);\n return {\n rowSpan: bottomRight.row - topLeft.row + 1,\n colSpan: bottomRight.col - topLeft.col + 1\n };\n }\n }\n}\n\nfunction parseRef(ref) {\n function getcol(str) {\n let upperStr = str.toUpperCase();\n let col = 0;\n for (let i = 0; i < upperStr.length; ++i) {\n col = col * 26 + upperStr.charCodeAt(i) - 64;\n }\n return col - 1;\n }\n\n function getrow(str) {\n return parseInt(str, 10) - 1;\n }\n\n const m = /^([a-z]+)(\\d+)$/i.exec(ref);\n return {\n row: getrow(m[2]),\n col: getcol(m[1])\n };\n}\n\nfunction pixelsToExcel(px) {\n return Math.round(px * 9525);\n}\n\nfunction fillCells(data, ctx) {\n const row = data._source;\n const rowIndex = data.index;\n const cells = row.cells;\n const cellData = data.cells;\n\n if (!cells) {\n return;\n }\n\n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i] || EMPTY_CELL;\n\n let rowSpan = cell.rowSpan || 1;\n let colSpan = cell.colSpan || 1;\n\n const cellIndex = insertCell(cellData, cell);\n const topLeftRef = ref(rowIndex, cellIndex);\n\n if (rowSpan === 1 && colSpan === 1) {\n // could still be merged: the spreadsheet does not send\n // rowSpan/colSpan, but mergedCells is already populated.\n // https://github.com/telerik/kendo-ui-core/issues/2401\n const tmp = getSpan(ctx.mergedCells, topLeftRef);\n if (tmp) {\n colSpan = tmp.colSpan;\n rowSpan = tmp.rowSpan;\n }\n }\n\n spanCell(cell, cellData, cellIndex, colSpan);\n\n if (rowSpan > 1 || colSpan > 1) {\n pushUnique(ctx.mergedCells,\n topLeftRef + \":\" + ref(rowIndex + rowSpan - 1,\n cellIndex + colSpan - 1));\n }\n\n if (rowSpan > 1) {\n for (let ri = rowIndex + 1; ri < rowIndex + rowSpan; ri++) {\n let nextRow = ctx.rowsByIndex[ri];\n if (!nextRow) {\n nextRow = ctx.rowsByIndex[ri] = { index: ri, cells: [] };\n ctx.rowData.push(nextRow);\n }\n\n spanCell(cell, nextRow.cells, cellIndex - 1, colSpan + 1);\n }\n }\n }\n}\n\nfunction insertCell(data, cell) {\n let index;\n\n if (typeof cell.index === \"number\") {\n index = cell.index;\n insertCellAt(data, cell, cell.index);\n } else {\n index = appendCell(data, cell);\n }\n\n return index;\n}\n\nfunction insertCellAt(data, cell, index) {\n data[index] = cell;\n}\n\nfunction appendCell(data, cell) {\n let index = data.length;\n\n for (let i = 0; i < data.length + 1; i++) {\n if (!data[i]) {\n data[i] = cell;\n index = i;\n break;\n }\n }\n\n return index;\n}\n\nfunction spanCell(cell, row, startIndex, colSpan) {\n for (let i = 1; i < colSpan; i++) {\n const tmp = {\n borderTop : cell.borderTop,\n borderRight : cell.borderRight,\n borderBottom : cell.borderBottom,\n borderLeft : cell.borderLeft\n };\n insertCellAt(row, tmp, startIndex + i);\n }\n}\n\nconst SPREADSHEET_FILTERS = ({ ref, columns, generators }) => `\n\n ${foreach(columns, (col) => `\n \n ${generators[col.filter](col)}\n \n `)}\n`;\n\nconst SPREADSHEET_CUSTOM_FILTER = ({ logic, criteria }) => `\n\n${foreach(criteria, (f) => {\n let op = spreadsheetFilters.customOperator(f);\n let val = spreadsheetFilters.customValue(f);\n return ``;\n})}\n`;\n\nconst SPREADSHEET_DYNAMIC_FILTER = ({ type }) =>\n``;\n\nconst SPREADSHEET_TOP_FILTER = ({ type, value }) =>\n``;\n\nconst SPREADSHEET_VALUE_FILTER = ({ blanks, values }) =>\n `\n ${foreach(values, (value) => `\n `)}\n `;\n\nfunction spreadsheetFilters(filter) {\n return SPREADSHEET_FILTERS({\n ref: filter.ref,\n columns: filter.columns,\n generators: {\n custom : SPREADSHEET_CUSTOM_FILTER,\n dynamic : SPREADSHEET_DYNAMIC_FILTER,\n top : SPREADSHEET_TOP_FILTER,\n value : SPREADSHEET_VALUE_FILTER\n }\n });\n}\n\nspreadsheetFilters.customOperator = function(f) {\n return {\n eq : \"equal\",\n gt : \"greaterThan\",\n gte : \"greaterThanOrEqual\",\n lt : \"lessThan\",\n lte : \"lessThanOrEqual\",\n ne : \"notEqual\",\n\n // These are not in the spec, but seems to be how Excel does\n // it (see customValue below). For the non-negated versions,\n // the operator attribute is missing completely.\n doesnotstartwith: \"notEqual\",\n doesnotendwith: \"notEqual\",\n doesnotcontain: \"notEqual\",\n doesnotmatch: \"notEqual\"\n }[f.operator.toLowerCase()];\n};\n\nfunction quoteSheet(name) {\n if (/^\\'/.test(name)) { // assume already quoted, the Spreadsheet does it.\n return name;\n }\n if (/^[a-z_][a-z0-9_]*$/i.test(name)) {\n return name; // no need to quote it\n }\n return \"'\" + name.replace(/\\x27/g, \"\\\\'\") + \"'\";\n}\n\nspreadsheetFilters.customValue = function(f) {\n function esc(str) {\n return str.replace(/([*?])/g, \"~$1\");\n }\n\n switch (f.operator.toLowerCase()) {\n case \"startswith\":\n case \"doesnotstartwith\":\n return esc(f.value) + \"*\";\n\n case \"endswith\":\n case \"doesnotendwith\":\n return \"*\" + esc(f.value);\n\n case \"contains\":\n case \"doesnotcontain\":\n return \"*\" + esc(f.value) + \"*\";\n\n default:\n return f.value;\n }\n};\n\nspreadsheetFilters.dynamicFilterType = function(type) {\n return {\n quarter1 : \"Q1\",\n quarter2 : \"Q2\",\n quarter3 : \"Q3\",\n quarter4 : \"Q4\",\n january : \"M1\",\n february : \"M2\",\n march : \"M3\",\n april : \"M4\",\n may : \"M5\",\n june : \"M6\",\n july : \"M7\",\n august : \"M8\",\n september : \"M9\",\n october : \"M10\",\n november : \"M11\",\n december : \"M12\"\n }[type.toLowerCase()] || type;\n};\n\nexport {\n Workbook,\n Worksheet\n};\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Input, ContentChildren, QueryList, Component, NgZone, Directive, TemplateRef, Optional, forwardRef, SkipSelf, Host, ContentChild, NgModule } from '@angular/core';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { IntlService, ExcelExporter, Workbook } from '@progress/kendo-ooxml';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nexport * from '@progress/kendo-ooxml';\nimport { toString } from '@telerik/kendo-intl';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\n\n/* tslint:disable align */\n/* tslint:disable:no-use-before-declare */\nconst compileTemplate = (templateRef, context, updateContext) => {\n let embeddedView = templateRef.createEmbeddedView(context);\n const result = (data) => {\n updateContext(context, data);\n embeddedView.detectChanges();\n return embeddedView.rootNodes.reduce((content, rootNode) => {\n return content + rootNode.textContent;\n }, '').trim();\n };\n result.destroy = () => {\n embeddedView.destroy();\n embeddedView = null;\n };\n return result;\n};\nconst updateGroupHeaderContext = (context, data) => {\n context.$implicit = context.group = data;\n context.field = data.field;\n context.value = data.value;\n context.aggregates = data.aggregates;\n};\nconst updateGroupFooterContext = (context, data) => {\n context.group = data.group;\n context.$implicit = context.aggregates = data;\n};\nconst updateFooterContext = (context, data) => {\n context.aggregates = data.aggregates;\n};\n/**\n * @hidden\n */\nconst toExporterColumns = (sourceColumns) => {\n const exporterColumns = [];\n let columnIndex = 0;\n const addColumns = (columns, result, level) => {\n columns.forEach((column) => {\n if (column.level === level) {\n const exporterColumn = new ExporterColumn(column, columnIndex);\n result.push(exporterColumn);\n if (column.children && column.children.some(c => c !== column)) {\n const children = exporterColumn.columns = [];\n addColumns(column.children, children, level + 1);\n }\n else {\n columnIndex++;\n }\n }\n });\n };\n addColumns(sourceColumns, exporterColumns, 0);\n return exporterColumns;\n};\n/**\n * @hidden\n */\nconst destroyColumns = (columns) => {\n if (columns) {\n columns.forEach(column => {\n column.destroy();\n });\n }\n};\n/**\n * @hidden\n */\nclass ExporterColumn {\n constructor(column, columnIndex) {\n this.title = column.title;\n this.field = column.field;\n this.hidden = column.hidden;\n this.locked = column.locked;\n this.width = column.width;\n this.headerCellOptions = column.headerCellOptions;\n this.cellOptions = column.cellOptions;\n this.groupHeaderCellOptions = column.groupHeaderCellOptions;\n this.groupFooterCellOptions = column.groupFooterCellOptions;\n this.footerCellOptions = column.footerCellOptions;\n if (column.footerTemplate) {\n this.footerTemplate = compileTemplate(column.footerTemplate.templateRef, {\n $implicit: column,\n column: column,\n columnIndex: columnIndex\n }, updateFooterContext);\n }\n if (column.groupFooterTemplate) {\n this.groupFooterTemplate = compileTemplate(column.groupFooterTemplate.templateRef, {\n column: column,\n field: column.field\n }, updateGroupFooterContext);\n }\n if (column.groupHeaderTemplate) {\n this.groupHeaderTemplate = compileTemplate(column.groupHeaderTemplate.templateRef, {}, updateGroupHeaderContext);\n }\n if (column.groupHeaderColumnTemplate) {\n this.groupHeaderColumnTemplate = compileTemplate(column.groupHeaderColumnTemplate.templateRef, {}, updateGroupHeaderContext);\n }\n }\n destroy() {\n if (this.footerTemplate) {\n this.footerTemplate.destroy();\n }\n if (this.groupFooterTemplate) {\n this.groupFooterTemplate.destroy();\n }\n if (this.groupHeaderTemplate) {\n this.groupHeaderTemplate.destroy();\n }\n if (this.groupHeaderColumnTemplate) {\n this.groupHeaderColumnTemplate.destroy();\n }\n destroyColumns(this.columns);\n }\n}\n\nIntlService.register({ toString });\n/**\n *\n * @hidden\n */\nconst workbookOptions = (options) => {\n const columns = toExporterColumns(options.columns);\n const exporter = new ExcelExporter({\n columns: columns,\n data: options.data,\n filterable: options.filterable,\n groups: options.group,\n paddingCellOptions: options.paddingCellOptions,\n headerPaddingCellOptions: options.headerPaddingCellOptions,\n collapsible: options.collapsible,\n hierarchy: options.hierarchy,\n aggregates: options.aggregates\n });\n const result = exporter.workbook();\n result.creator = options.creator;\n result.date = options.date;\n result.rtl = options.rtl;\n destroyColumns(columns);\n return result;\n};\n/**\n * @hidden\n */\nconst toDataURL = (options) => {\n const workbook = new Workbook(options);\n return workbook.toDataURL();\n};\n/**\n * @hidden\n */\nconst isWorkbookOptions = (value) => {\n return value && value.sheets;\n};\n\n/**\n * @hidden\n */\nclass ColumnBase {\n constructor(parent) {\n this.parent = parent;\n }\n /**\n * @hidden\n */\n get level() {\n return this.parent ? this.parent.level + 1 : 0;\n }\n}\nColumnBase.ɵfac = function ColumnBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nColumnBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnBase, contentQueries: function ColumnBase_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, inputs: { title: \"title\", width: \"width\", locked: \"locked\", hidden: \"hidden\", headerCellOptions: \"headerCellOptions\" } });\nColumnBase.propDecorators = {\n title: [{ type: Input }],\n width: [{ type: Input }],\n locked: [{ type: Input }],\n hidden: [{ type: Input }],\n headerCellOptions: [{ type: Input }],\n children: [{ type: ContentChildren, args: [ColumnBase,] }]\n};\n\n\n// tslint:disable:max-line-length\n/**\n * Represents the [Kendo UI Excel Export component for Angular]({% slug overview_excelexport %}).\n * Configures the settings for the Excel export of the Kendo UI Grid.\n */\nclass ExcelExportComponent {\n constructor(localization, zone) {\n this.localization = localization;\n this.zone = zone;\n /**\n * Specifies the name of the file that is exported to Excel.\n * @default \"Export.xlsx\"\n */\n this.fileName = 'Export.xlsx';\n /**\n * @hidden\n */\n this.columns = new QueryList();\n this.saveFile = this.saveFile.bind(this);\n }\n /**\n * Saves the data to Excel.\n *\n * @param exportData - An optional parameter. Can be the data that will be exported or [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %}).\n */\n save(exportData) {\n this.toDataURL(exportData).then(this.saveFile);\n }\n /**\n * Based on the specified columns and data, returns\n * [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %})\n * ([see example]({% slug customrowsandcells_excelexport %})).\n *\n * @param exportData - The optional data to be exported.\n * @returns {WorkbookOptions} - The workbook options.\n */\n workbookOptions(exportData) {\n const currentData = this.getExportData(exportData);\n const options = workbookOptions({\n columns: this.columns,\n data: currentData.data,\n group: currentData.group,\n filterable: this.filterable,\n creator: this.creator,\n date: this.date,\n rtl: this.localization.rtl,\n paddingCellOptions: this.paddingCellOptions,\n headerPaddingCellOptions: this.headerPaddingCellOptions,\n collapsible: this.collapsible\n });\n return options;\n }\n /**\n * Returns a promise which will be resolved with the file data URI\n * ([see example]({% slug filesaving_excelexport %})).\n *\n * @param exportData - The optional data or [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %}) that will be used to generate the data URI.\n * @returns {Promise} - The promise that will be resolved by the file data URI.\n */\n toDataURL(exportData) {\n const options = isWorkbookOptions(exportData) ?\n exportData :\n this.workbookOptions(exportData);\n return this.zone.runOutsideAngular(() => toDataURL(options));\n }\n getExportData(exportData) {\n let result;\n if (exportData) {\n if (Array.isArray(exportData)) {\n result = {\n data: exportData\n };\n }\n else {\n result = exportData;\n }\n }\n else {\n result = {\n data: this.data,\n group: this.group\n };\n }\n return result;\n }\n saveFile(dataURL) {\n saveAs(dataURL, this.fileName, {\n forceProxy: this.forceProxy,\n proxyURL: this.proxyURL\n });\n }\n}\nExcelExportComponent.ɵfac = function ExcelExportComponent_Factory(t) { return new (t || ExcelExportComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelExportComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ExcelExportComponent, selectors: [[\"kendo-excelexport\"]], contentQueries: function ExcelExportComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { fileName: \"fileName\", filterable: \"filterable\", collapsible: \"collapsible\", creator: \"creator\", date: \"date\", forceProxy: \"forceProxy\", proxyURL: \"proxyURL\", data: \"data\", group: \"group\", paddingCellOptions: \"paddingCellOptions\", headerPaddingCellOptions: \"headerPaddingCellOptions\" }, exportAs: [\"kendoExcelExport\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.excelexport'\n }\n ])], decls: 0, vars: 0, template: function ExcelExportComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nExcelExportComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelExportComponent.propDecorators = {\n fileName: [{ type: Input }],\n filterable: [{ type: Input }],\n collapsible: [{ type: Input }],\n creator: [{ type: Input }],\n date: [{ type: Input }],\n forceProxy: [{ type: Input }],\n proxyURL: [{ type: Input }],\n data: [{ type: Input }],\n group: [{ type: Input }],\n paddingCellOptions: [{ type: Input }],\n headerPaddingCellOptions: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase, { descendants: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelExportComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoExcelExport',\n selector: 'kendo-excelexport',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.excelexport'\n }\n ],\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { fileName: [{\n type: Input\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase, { descendants: true }]\n }], filterable: [{\n type: Input\n }], collapsible: [{\n type: Input\n }], creator: [{\n type: Input\n }], date: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], data: [{\n type: Input\n }], group: [{\n type: Input\n }], paddingCellOptions: [{\n type: Input\n }], headerPaddingCellOptions: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the group header cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-header-template)).\n * Enables you to customize the content of the group header item.\n */\nclass GroupHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderTemplateDirective.ɵfac = function GroupHeaderTemplateDirective_Factory(t) { return new (t || GroupHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group header column template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-header-column-template)).\n */\nclass GroupHeaderColumnTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderColumnTemplateDirective.ɵfac = function GroupHeaderColumnTemplateDirective_Factory(t) { return new (t || GroupHeaderColumnTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderColumnTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderColumnTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupHeaderColumnTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderColumnTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderColumnTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupHeaderColumnTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group footer cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-footer-template)).\n * Enables you to customize the group footer cell of the column.\n */\nclass GroupFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupFooterTemplateDirective.ɵfac = function GroupFooterTemplateDirective_Factory(t) { return new (t || GroupFooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupFooterTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupFooterTemplate\", \"\"]] });\n/** @nocollapse */\nGroupFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupFooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the footer cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-footer-template)).\n * Enables you to customize the footer cell of the column.\n */\nclass FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFooterTemplateDirective.ɵfac = function FooterTemplateDirective_Factory(t) { return new (t || FooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FooterTemplateDirective, selectors: [[\"\", \"kendoExcelExportFooterTemplate\", \"\"]] });\n/** @nocollapse */\nFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the columns of the Kendo UI Excel Export component for Angular.\n */\nclass ColumnComponent extends ColumnBase {\n constructor(parent) {\n super(parent);\n }\n}\nColumnComponent.ɵfac = function ColumnComponent_Factory(t) { return new (t || ColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase, 13)); };\nColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnComponent, selectors: [[\"kendo-excelexport-column\"]], contentQueries: function ColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderColumnTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupFooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderColumnTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupFooterTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n } }, inputs: { field: \"field\", cellOptions: \"cellOptions\", groupHeaderCellOptions: \"groupHeaderCellOptions\", groupFooterCellOptions: \"groupFooterCellOptions\", footerCellOptions: \"footerCellOptions\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnComponent.ctorParameters = () => [\n { type: ColumnBase, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnComponent.propDecorators = {\n field: [{ type: Input }],\n cellOptions: [{ type: Input }],\n groupHeaderCellOptions: [{ type: Input }],\n groupFooterCellOptions: [{ type: Input }],\n footerCellOptions: [{ type: Input }],\n groupHeaderTemplate: [{ type: ContentChild, args: [GroupHeaderTemplateDirective,] }],\n groupHeaderColumnTemplate: [{ type: ContentChild, args: [GroupHeaderColumnTemplateDirective,] }],\n groupFooterTemplate: [{ type: ContentChild, args: [GroupFooterTemplateDirective,] }],\n footerTemplate: [{ type: ContentChild, args: [FooterTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-excelexport-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { field: [{\n type: Input\n }], cellOptions: [{\n type: Input\n }], groupHeaderCellOptions: [{\n type: Input\n }], groupFooterCellOptions: [{\n type: Input\n }], footerCellOptions: [{\n type: Input\n }], groupHeaderTemplate: [{\n type: ContentChild,\n args: [GroupHeaderTemplateDirective]\n }], groupHeaderColumnTemplate: [{\n type: ContentChild,\n args: [GroupHeaderColumnTemplateDirective]\n }], groupFooterTemplate: [{\n type: ContentChild,\n args: [GroupFooterTemplateDirective]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective]\n }] }); })();\n\n/**\n * Represents the column group component of the Kendo UI Excel Export component.\n */\nclass ColumnGroupComponent extends ColumnBase {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n }\n}\nColumnGroupComponent.ɵfac = function ColumnGroupComponent_Factory(t) { return new (t || ColumnGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase, 13)); };\nColumnGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnGroupComponent, selectors: [[\"kendo-excelexport-column-group\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnGroupComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnGroupComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnGroupComponent.ctorParameters = () => [\n { type: ColumnBase, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnGroupComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnGroupComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-excelexport-column-group',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, null); })();\n\nconst declarations = [\n ExcelExportComponent,\n ColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Excel Export component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the ExcelExportModule module\n * import { ExcelExportModule } from '@progress/kendo-angular-excel-export';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ExcelExportModule], // import ExcelExportModule module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ExcelExportModule {\n}\nExcelExportModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ExcelExportModule });\nExcelExportModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ExcelExportModule_Factory(t) { return new (t || ExcelExportModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ExcelExportModule, { declarations: [ExcelExportComponent, ColumnComponent, ColumnGroupComponent, FooterTemplateDirective, GroupFooterTemplateDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective], exports: [ExcelExportComponent, ColumnComponent, ColumnGroupComponent, FooterTemplateDirective, GroupFooterTemplateDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelExportModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [declarations]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { GroupHeaderColumnTemplateDirective, ExcelExportComponent, ExcelExportModule, ColumnBase, ColumnComponent, ColumnGroupComponent, FooterTemplateDirective, GroupFooterTemplateDirective, GroupHeaderTemplateDirective, workbookOptions, toDataURL, isWorkbookOptions };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21JQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O21IQWNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttS0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztxTEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21LQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7b0pBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztzSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIENvbXBvbmVudCwgTmdab25lLCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBPcHRpb25hbCwgZm9yd2FyZFJlZiwgU2tpcFNlbGYsIEhvc3QsIENvbnRlbnRDaGlsZCwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1maWxlLXNhdmVyJztcbmltcG9ydCB7IEludGxTZXJ2aWNlLCBFeGNlbEV4cG9ydGVyLCBXb3JrYm9vayB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1vb3htbCc7XG5leHBvcnQgKiBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tb294bWwnO1xuaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICdAdGVsZXJpay9rZW5kby1pbnRsJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIEwxME5fUFJFRklYIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5cbi8qIHRzbGludDpkaXNhYmxlIGFsaWduICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11c2UtYmVmb3JlLWRlY2xhcmUgKi9cbmNvbnN0IGNvbXBpbGVUZW1wbGF0ZSA9ICh0ZW1wbGF0ZVJlZiwgY29udGV4dCwgdXBkYXRlQ29udGV4dCkgPT4ge1xuICAgIGxldCBlbWJlZGRlZFZpZXcgPSB0ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dCk7XG4gICAgY29uc3QgcmVzdWx0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgdXBkYXRlQ29udGV4dChjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgZW1iZWRkZWRWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIGVtYmVkZGVkVmlldy5yb290Tm9kZXMucmVkdWNlKChjb250ZW50LCByb290Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQgKyByb290Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgfSwgJycpLnRyaW0oKTtcbiAgICB9O1xuICAgIHJlc3VsdC5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBlbWJlZGRlZFZpZXcuZGVzdHJveSgpO1xuICAgICAgICBlbWJlZGRlZFZpZXcgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCB1cGRhdGVHcm91cEhlYWRlckNvbnRleHQgPSAoY29udGV4dCwgZGF0YSkgPT4ge1xuICAgIGNvbnRleHQuJGltcGxpY2l0ID0gY29udGV4dC5ncm91cCA9IGRhdGE7XG4gICAgY29udGV4dC5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgY29udGV4dC52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgY29udGV4dC5hZ2dyZWdhdGVzID0gZGF0YS5hZ2dyZWdhdGVzO1xufTtcbmNvbnN0IHVwZGF0ZUdyb3VwRm9vdGVyQ29udGV4dCA9IChjb250ZXh0LCBkYXRhKSA9PiB7XG4gICAgY29udGV4dC5ncm91cCA9IGRhdGEuZ3JvdXA7XG4gICAgY29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0LmFnZ3JlZ2F0ZXMgPSBkYXRhO1xufTtcbmNvbnN0IHVwZGF0ZUZvb3RlckNvbnRleHQgPSAoY29udGV4dCwgZGF0YSkgPT4ge1xuICAgIGNvbnRleHQuYWdncmVnYXRlcyA9IGRhdGEuYWdncmVnYXRlcztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9FeHBvcnRlckNvbHVtbnMgPSAoc291cmNlQ29sdW1ucykgPT4ge1xuICAgIGNvbnN0IGV4cG9ydGVyQ29sdW1ucyA9IFtdO1xuICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgY29uc3QgYWRkQ29sdW1ucyA9IChjb2x1bW5zLCByZXN1bHQsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmxldmVsID09PSBsZXZlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVyQ29sdW1uID0gbmV3IEV4cG9ydGVyQ29sdW1uKGNvbHVtbiwgY29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cG9ydGVyQ29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIGNvbHVtbi5jaGlsZHJlbi5zb21lKGMgPT4gYyAhPT0gY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGV4cG9ydGVyQ29sdW1uLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4sIGNoaWxkcmVuLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYWRkQ29sdW1ucyhzb3VyY2VDb2x1bW5zLCBleHBvcnRlckNvbHVtbnMsIDApO1xuICAgIHJldHVybiBleHBvcnRlckNvbHVtbnM7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRlc3Ryb3lDb2x1bW5zID0gKGNvbHVtbnMpID0+IHtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRXhwb3J0ZXJDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IGNvbHVtbi50aXRsZTtcbiAgICAgICAgdGhpcy5maWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSBjb2x1bW4uaGlkZGVuO1xuICAgICAgICB0aGlzLmxvY2tlZCA9IGNvbHVtbi5sb2NrZWQ7XG4gICAgICAgIHRoaXMud2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gICAgICAgIHRoaXMuaGVhZGVyQ2VsbE9wdGlvbnMgPSBjb2x1bW4uaGVhZGVyQ2VsbE9wdGlvbnM7XG4gICAgICAgIHRoaXMuY2VsbE9wdGlvbnMgPSBjb2x1bW4uY2VsbE9wdGlvbnM7XG4gICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJDZWxsT3B0aW9ucyA9IGNvbHVtbi5ncm91cEhlYWRlckNlbGxPcHRpb25zO1xuICAgICAgICB0aGlzLmdyb3VwRm9vdGVyQ2VsbE9wdGlvbnMgPSBjb2x1bW4uZ3JvdXBGb290ZXJDZWxsT3B0aW9ucztcbiAgICAgICAgdGhpcy5mb290ZXJDZWxsT3B0aW9ucyA9IGNvbHVtbi5mb290ZXJDZWxsT3B0aW9ucztcbiAgICAgICAgaWYgKGNvbHVtbi5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGNvbXBpbGVUZW1wbGF0ZShjb2x1bW4uZm9vdGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsIHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXhcbiAgICAgICAgICAgIH0sIHVwZGF0ZUZvb3RlckNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4uZ3JvdXBGb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEZvb3RlclRlbXBsYXRlID0gY29tcGlsZVRlbXBsYXRlKGNvbHVtbi5ncm91cEZvb3RlclRlbXBsYXRlLnRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZFxuICAgICAgICAgICAgfSwgdXBkYXRlR3JvdXBGb290ZXJDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLmdyb3VwSGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZSA9IGNvbXBpbGVUZW1wbGF0ZShjb2x1bW4uZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge30sIHVwZGF0ZUdyb3VwSGVhZGVyQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUgPSBjb21waWxlVGVtcGxhdGUoY29sdW1uLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUudGVtcGxhdGVSZWYsIHt9LCB1cGRhdGVHcm91cEhlYWRlckNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlclRlbXBsYXRlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRm9vdGVyVGVtcGxhdGUuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwSGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIH1cbn1cblxuSW50bFNlcnZpY2UucmVnaXN0ZXIoeyB0b1N0cmluZyB9KTtcbi8qKlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgd29ya2Jvb2tPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gdG9FeHBvcnRlckNvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBvcnRlciA9IG5ldyBFeGNlbEV4cG9ydGVyKHtcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgICAgICBmaWx0ZXJhYmxlOiBvcHRpb25zLmZpbHRlcmFibGUsXG4gICAgICAgIGdyb3Vwczogb3B0aW9ucy5ncm91cCxcbiAgICAgICAgcGFkZGluZ0NlbGxPcHRpb25zOiBvcHRpb25zLnBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zOiBvcHRpb25zLmhlYWRlclBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgY29sbGFwc2libGU6IG9wdGlvbnMuY29sbGFwc2libGUsXG4gICAgICAgIGhpZXJhcmNoeTogb3B0aW9ucy5oaWVyYXJjaHksXG4gICAgICAgIGFnZ3JlZ2F0ZXM6IG9wdGlvbnMuYWdncmVnYXRlc1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cG9ydGVyLndvcmtib29rKCk7XG4gICAgcmVzdWx0LmNyZWF0b3IgPSBvcHRpb25zLmNyZWF0b3I7XG4gICAgcmVzdWx0LmRhdGUgPSBvcHRpb25zLmRhdGU7XG4gICAgcmVzdWx0LnJ0bCA9IG9wdGlvbnMucnRsO1xuICAgIGRlc3Ryb3lDb2x1bW5zKGNvbHVtbnMpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvRGF0YVVSTCA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2sob3B0aW9ucyk7XG4gICAgcmV0dXJuIHdvcmtib29rLnRvRGF0YVVSTCgpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1dvcmtib29rT3B0aW9ucyA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zaGVldHM7XG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5sZXZlbCArIDEgOiAwO1xuICAgIH1cbn1cbkNvbHVtbkJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhpZGRlbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyQ2VsbE9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNoaWxkcmVuOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDb2x1bW5CYXNlLF0gfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgRXhjZWwgRXhwb3J0IGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19leGNlbGV4cG9ydCAlfSkuXG4gKiBDb25maWd1cmVzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIEV4Y2VsIGV4cG9ydCBvZiB0aGUgS2VuZG8gVUkgR3JpZC5cbiAqL1xuY2xhc3MgRXhjZWxFeHBvcnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgem9uZSkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGlzIGV4cG9ydGVkIHRvIEV4Y2VsLlxuICAgICAgICAgKiBAZGVmYXVsdCBcIkV4cG9ydC54bHN4XCJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnRXhwb3J0Lnhsc3gnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLnNhdmVGaWxlID0gdGhpcy5zYXZlRmlsZS5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgZGF0YSB0byBFeGNlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBvcnREYXRhIC0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBDYW4gYmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGV4cG9ydGVkIG9yIFtgV29ya2Jvb2tPcHRpb25zYF0oeyUgc2x1ZyBhcGlfZXhjZWwtZXhwb3J0X3dvcmtib29rb3B0aW9ucyAlfSkuXG4gICAgICovXG4gICAgc2F2ZShleHBvcnREYXRhKSB7XG4gICAgICAgIHRoaXMudG9EYXRhVVJMKGV4cG9ydERhdGEpLnRoZW4odGhpcy5zYXZlRmlsZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY29sdW1ucyBhbmQgZGF0YSwgcmV0dXJuc1xuICAgICAqIFtgV29ya2Jvb2tPcHRpb25zYF0oeyUgc2x1ZyBhcGlfZXhjZWwtZXhwb3J0X3dvcmtib29rb3B0aW9ucyAlfSlcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGN1c3RvbXJvd3NhbmRjZWxsc19leGNlbGV4cG9ydCAlfSkpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV4cG9ydERhdGEgLSBUaGUgb3B0aW9uYWwgZGF0YSB0byBiZSBleHBvcnRlZC5cbiAgICAgKiBAcmV0dXJucyB7V29ya2Jvb2tPcHRpb25zfSAtIFRoZSB3b3JrYm9vayBvcHRpb25zLlxuICAgICAqL1xuICAgIHdvcmtib29rT3B0aW9ucyhleHBvcnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5nZXRFeHBvcnREYXRhKGV4cG9ydERhdGEpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gd29ya2Jvb2tPcHRpb25zKHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgIGRhdGE6IGN1cnJlbnREYXRhLmRhdGEsXG4gICAgICAgICAgICBncm91cDogY3VycmVudERhdGEuZ3JvdXAsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLmZpbHRlcmFibGUsXG4gICAgICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgICAgICBkYXRlOiB0aGlzLmRhdGUsXG4gICAgICAgICAgICBydGw6IHRoaXMubG9jYWxpemF0aW9uLnJ0bCxcbiAgICAgICAgICAgIHBhZGRpbmdDZWxsT3B0aW9uczogdGhpcy5wYWRkaW5nQ2VsbE9wdGlvbnMsXG4gICAgICAgICAgICBoZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnM6IHRoaXMuaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zLFxuICAgICAgICAgICAgY29sbGFwc2libGU6IHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHdpdGggdGhlIGZpbGUgZGF0YSBVUklcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZpbGVzYXZpbmdfZXhjZWxleHBvcnQgJX0pKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBvcnREYXRhIC0gVGhlIG9wdGlvbmFsIGRhdGEgb3IgW2BXb3JrYm9va09wdGlvbnNgXSh7JSBzbHVnIGFwaV9leGNlbC1leHBvcnRfd29ya2Jvb2tvcHRpb25zICV9KSB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGF0YSBVUkkuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBUaGUgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIGZpbGUgZGF0YSBVUkkuXG4gICAgICovXG4gICAgdG9EYXRhVVJMKGV4cG9ydERhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGlzV29ya2Jvb2tPcHRpb25zKGV4cG9ydERhdGEpID9cbiAgICAgICAgICAgIGV4cG9ydERhdGEgOlxuICAgICAgICAgICAgdGhpcy53b3JrYm9va09wdGlvbnMoZXhwb3J0RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdG9EYXRhVVJMKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2V0RXhwb3J0RGF0YShleHBvcnREYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChleHBvcnREYXRhKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBvcnREYXRhKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZXhwb3J0RGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBleHBvcnREYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICBncm91cDogdGhpcy5ncm91cFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzYXZlRmlsZShkYXRhVVJMKSB7XG4gICAgICAgIHNhdmVBcyhkYXRhVVJMLCB0aGlzLmZpbGVOYW1lLCB7XG4gICAgICAgICAgICBmb3JjZVByb3h5OiB0aGlzLmZvcmNlUHJveHksXG4gICAgICAgICAgICBwcm94eVVSTDogdGhpcy5wcm94eVVSTFxuICAgICAgICB9KTtcbiAgICB9XG59XG5FeGNlbEV4cG9ydENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9FeGNlbEV4cG9ydCcsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1leGNlbGV4cG9ydCcsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5leGNlbGV4cG9ydCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkV4Y2VsRXhwb3J0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5FeGNlbEV4cG9ydENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWxlTmFtZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sbGFwc2libGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNyZWF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcmNlUHJveHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByb3h5VVJMOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFkZGluZ0NlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbkJhc2UsIHsgZGVzY2VuZGFudHM6IHRydWUgfSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGdyb3VwIGhlYWRlciBjZWxsIHRlbXBsYXRlIG9mIHRoZSBFeGNlbCBFeHBvcnQgY29sdW1uIGNvbXBvbmVudFxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBjb2x1bW5zX2V4Y2VsLWV4cG9ydCAlfSN0b2MtZ3JvdXAtaGVhZGVyLXRlbXBsYXRlKSkuXG4gKiBFbmFibGVzIHlvdSB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwIGhlYWRlciBpdGVtLlxuICovXG5jbGFzcyBHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRXhjZWxFeHBvcnRHcm91cEhlYWRlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGdyb3VwIGhlYWRlciBjb2x1bW4gdGVtcGxhdGUgb2YgdGhlIEV4Y2VsIEV4cG9ydCBjb2x1bW4gY29tcG9uZW50XG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGNvbHVtbnNfZXhjZWwtZXhwb3J0ICV9I3RvYy1ncm91cC1oZWFkZXItY29sdW1uLXRlbXBsYXRlKSkuXG4gKi9cbmNsYXNzIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Hcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9FeGNlbEV4cG9ydEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Hcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ3JvdXAgZm9vdGVyIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEV4Y2VsIEV4cG9ydCBjb2x1bW4gY29tcG9uZW50XG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGNvbHVtbnNfZXhjZWwtZXhwb3J0ICV9I3RvYy1ncm91cC1mb290ZXItdGVtcGxhdGUpKS5cbiAqIEVuYWJsZXMgeW91IHRvIGN1c3RvbWl6ZSB0aGUgZ3JvdXAgZm9vdGVyIGNlbGwgb2YgdGhlIGNvbHVtbi5cbiAqL1xuY2xhc3MgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0V4Y2VsRXhwb3J0R3JvdXBGb290ZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBmb290ZXIgY2VsbCB0ZW1wbGF0ZSBvZiB0aGUgRXhjZWwgRXhwb3J0IGNvbHVtbiBjb21wb25lbnRcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgY29sdW1uc19leGNlbC1leHBvcnQgJX0jdG9jLWZvb3Rlci10ZW1wbGF0ZSkpLlxuICogRW5hYmxlcyB5b3UgdG8gY3VzdG9taXplIHRoZSBmb290ZXIgY2VsbCBvZiB0aGUgY29sdW1uLlxuICovXG5jbGFzcyBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9FeGNlbEV4cG9ydEZvb3RlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb2x1bW5zIG9mIHRoZSBLZW5kbyBVSSBFeGNlbCBFeHBvcnQgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICovXG5jbGFzcyBDb2x1bW5Db21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICB9XG59XG5Db2x1bW5Db21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29sdW1uQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkNvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWV4Y2VsZXhwb3J0LWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IENvbHVtbkJhc2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Db2x1bW5Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmllbGQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEhlYWRlckNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEZvb3RlckNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb290ZXJDZWxsT3B0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0dyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBncm91cEZvb3RlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtHcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZm9vdGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGdyb3VwIGNvbXBvbmVudCBvZiB0aGUgS2VuZG8gVUkgRXhjZWwgRXhwb3J0IGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgQ29sdW1uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxufVxuQ29sdW1uR3JvdXBDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29sdW1uQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkdyb3VwQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZXhjZWxleHBvcnQtY29sdW1uLWdyb3VwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uR3JvdXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9LCB7IHR5cGU6IEhvc3QgfSwgeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbXG4gICAgRXhjZWxFeHBvcnRDb21wb25lbnQsXG4gICAgQ29sdW1uQ29tcG9uZW50LFxuICAgIENvbHVtbkdyb3VwQ29tcG9uZW50LFxuICAgIEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRXhjZWwgRXhwb3J0IGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBFeGNlbEV4cG9ydE1vZHVsZSBtb2R1bGVcbiAqIGltcG9ydCB7IEV4Y2VsRXhwb3J0TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRXhjZWxFeHBvcnRNb2R1bGVdLCAvLyBpbXBvcnQgRXhjZWxFeHBvcnRNb2R1bGUgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBFeGNlbEV4cG9ydE1vZHVsZSB7XG59XG5FeGNlbEV4cG9ydE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZGVjbGFyYXRpb25zXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsIEV4Y2VsRXhwb3J0Q29tcG9uZW50LCBFeGNlbEV4cG9ydE1vZHVsZSwgQ29sdW1uQmFzZSwgQ29sdW1uQ29tcG9uZW50LCBDb2x1bW5Hcm91cENvbXBvbmVudCwgRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHdvcmtib29rT3B0aW9ucywgdG9EYXRhVVJMLCBpc1dvcmtib29rT3B0aW9ucyB9O1xuIl19","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { EventEmitter, Injectable, InjectionToken, Directive, Optional, Inject, SkipSelf, ElementRef, Renderer2, NgZone, ChangeDetectorRef, HostBinding, TemplateRef, QueryList, Input, ContentChildren, ContentChild, Component, forwardRef, Host, Output, isDevMode, SecurityContext, ViewEncapsulation, ViewChild, ViewChildren, Self, ViewContainerRef, Pipe, NgModule, ComponentFactoryResolver, ChangeDetectionStrategy, HostListener } from '@angular/core';\nimport { isDocumentAvailable, Keys, DraggableDirective, isChanged, anyChanged, hasObservers, ResizeSensorComponent, DraggableModule, EventsModule, guid, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { merge, of, Subject, Subscription, from, interval, fromEvent, zip, BehaviorSubject, Observable } from 'rxjs';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { switchMap, take, filter, takeUntil, map, switchMapTo, delay, auditTime, distinctUntilChanged, tap, throttleTime, debounceTime, bufferCount } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { orderBy, process, isCompositeFilterDescriptor, filterBy } from '@progress/kendo-data-query';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { getter } from '@progress/kendo-common';\nimport { DropDownListModule, AutoCompleteModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule, NumericTextBoxComponent, NumericTextBoxModule } from '@progress/kendo-angular-inputs';\nimport { DatePickerModule } from '@progress/kendo-angular-dateinputs';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { Button } from '@progress/kendo-angular-buttons';\nimport { PDFMarginComponent, PDFTemplateDirective, PDFExportComponent } from '@progress/kendo-angular-pdf-export';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { workbookOptions, toDataURL, ColumnBase, ExcelExportModule } from '@progress/kendo-angular-excel-export';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@progress/kendo-angular-common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\nimport * as ɵngcc4 from '@angular/platform-browser';\nimport * as ɵngcc5 from '@angular/common';\nimport * as ɵngcc6 from '@progress/kendo-angular-inputs';\nimport * as ɵngcc7 from '@angular/forms';\nimport * as ɵngcc8 from '@progress/kendo-angular-dropdowns';\nimport * as ɵngcc9 from '@progress/kendo-angular-dateinputs';\nimport * as ɵngcc10 from '@progress/kendo-angular-intl';\n\nconst _c0 = [\"lockedHeader\"];\nconst _c1 = [\"header\"];\nconst _c2 = [\"ariaRoot\"];\nconst _c3 = [\"footer\"];\nfunction GridComponent_kendo_grid_toolbar_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-toolbar\", 8);\n} }\nfunction GridComponent_kendo_grid_group_panel_2_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-group-panel\", 9);\n ɵngcc0.ɵɵlistener(\"change\", function GridComponent_kendo_grid_group_panel_2_Template_kendo_grid_group_panel_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.groupChange.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"text\", ctx_r1.groupableEmptyText)(\"groups\", ctx_r1.group);\n} }\nfunction GridComponent_ng_template_5_div_0_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 21, 22);\n ɵngcc0.ɵɵelementStart(2, \"table\", 23);\n ɵngcc0.ɵɵelement(3, \"colgroup\", 18);\n ɵngcc0.ɵɵelement(4, \"thead\", 24);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r11.lockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r11.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r11.lockedLeafColumns)(\"groups\", ctx_r11.group)(\"detailTemplate\", ctx_r11.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r11.resizable)(\"scrollable\", true)(\"columns\", ctx_r11.lockedColumns)(\"totalColumnLevels\", ctx_r11.totalColumnLevels)(\"sort\", ctx_r11.sort)(\"groups\", ctx_r11.group)(\"filter\", ctx_r11.filter)(\"filterable\", ctx_r11.filterable)(\"groupable\", ctx_r11.showGroupPanel)(\"reorderable\", ctx_r11.reorderable)(\"sortable\", ctx_r11.sortable)(\"columnMenu\", ctx_r11.columnMenuOptions)(\"columnMenuTemplate\", ctx_r11.columnMenuTemplate)(\"totalColumnsCount\", ctx_r11.leafColumns.length)(\"detailTemplate\", ctx_r11.detailTemplate);\n} }\nfunction GridComponent_ng_template_5_div_0_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 25);\n ɵngcc0.ɵɵelement(1, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r13.columnsContainer.unlockedWidth, \"px\");\n} }\nconst _c116 = function () { return []; };\nfunction GridComponent_ng_template_5_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵtemplate(1, GridComponent_ng_template_5_div_0_div_1_Template, 5, 23, \"div\", 14);\n ɵngcc0.ɵɵelementStart(2, \"div\", 15, 16);\n ɵngcc0.ɵɵelementStart(4, \"table\", 17);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 18);\n ɵngcc0.ɵɵelement(6, \"thead\", 19);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, GridComponent_ng_template_5_div_0_div_7_Template, 2, 2, \"div\", 20);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"padding\", ctx_r9.headerPadding);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r9.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx_r9.lockedLeafColumns.length)(\"lockedWidth\", ctx_r9.lockedWidth + ctx_r9.scrollbarWidth + 2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r9.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"virtualColumns\", ctx_r9.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r9.headerLeafColumns)(\"groups\", ctx_r9.isLocked ? ɵngcc0.ɵɵpureFunction0(28, _c116) : ctx_r9.group)(\"detailTemplate\", ctx_r9.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r9.resizable)(\"scrollable\", true)(\"columns\", ctx_r9.headerColumns)(\"totalColumnLevels\", ctx_r9.totalColumnLevels)(\"sort\", ctx_r9.sort)(\"filter\", ctx_r9.filter)(\"filterable\", ctx_r9.filterable)(\"groupable\", ctx_r9.showGroupPanel)(\"reorderable\", ctx_r9.reorderable)(\"groups\", ctx_r9.isLocked ? ɵngcc0.ɵɵpureFunction0(29, _c116) : ctx_r9.group)(\"sortable\", ctx_r9.sortable)(\"columnMenu\", ctx_r9.columnMenuOptions)(\"columnMenuTemplate\", ctx_r9.columnMenuTemplate)(\"lockedColumnsCount\", ctx_r9.lockedLeafColumns.length)(\"totalColumnsCount\", ctx_r9.leafColumns.length)(\"detailTemplate\", ctx_r9.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r9.virtualColumns);\n} }\nfunction GridComponent_ng_template_5_div_2_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 33);\n ɵngcc0.ɵɵelementStart(1, \"table\", 23);\n ɵngcc0.ɵɵelement(2, \"colgroup\", 31);\n ɵngcc0.ɵɵelement(3, \"tfoot\", 34);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r15 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r15.lockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r15.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r15.lockedLeafColumns)(\"groups\", ctx_r15.group)(\"detailTemplate\", ctx_r15.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"scrollable\", true)(\"groups\", ctx_r15.group)(\"columns\", ctx_r15.lockedLeafColumns)(\"detailTemplate\", ctx_r15.detailTemplate)(\"logicalRowIndex\", ctx_r15.ariaRowCount);\n} }\nfunction GridComponent_ng_template_5_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 26);\n ɵngcc0.ɵɵtemplate(1, GridComponent_ng_template_5_div_2_div_1_Template, 4, 13, \"div\", 27);\n ɵngcc0.ɵɵelementStart(2, \"div\", 28, 29);\n ɵngcc0.ɵɵelementStart(4, \"table\", 30);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 31);\n ɵngcc0.ɵɵelement(6, \"tfoot\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"padding\", ctx_r10.headerPadding);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r10.lockedLeafColumns.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx_r10.lockedLeafColumns.length)(\"lockedWidth\", ctx_r10.lockedWidth + ctx_r10.scrollbarWidth + 3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r10.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r10.nonLockedLeafColumns)(\"groups\", ctx_r10.isLocked ? ɵngcc0.ɵɵpureFunction0(16, _c116) : ctx_r10.group)(\"detailTemplate\", ctx_r10.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r10.ariaRowCount)(\"scrollable\", true)(\"groups\", ctx_r10.isLocked ? ɵngcc0.ɵɵpureFunction0(17, _c116) : ctx_r10.group)(\"columns\", ctx_r10.nonLockedLeafColumns)(\"lockedColumnsCount\", ctx_r10.lockedLeafColumns.length)(\"detailTemplate\", ctx_r10.detailTemplate);\n} }\nfunction GridComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, GridComponent_ng_template_5_div_0_Template, 8, 30, \"div\", 10);\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-list\", 11);\n ɵngcc0.ɵɵlistener(\"pageChange\", function GridComponent_ng_template_5_Template_kendo_grid_list_pageChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r17 = ɵngcc0.ɵɵnextContext(); return ctx_r17.notifyPageChange(\"list\", $event); })(\"scrollBottom\", function GridComponent_ng_template_5_Template_kendo_grid_list_scrollBottom_1_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r19 = ɵngcc0.ɵɵnextContext(); return ctx_r19.notifyScrollBottom(); })(\"contentScroll\", function GridComponent_ng_template_5_Template_kendo_grid_list_contentScroll_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.contentScroll.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, GridComponent_ng_template_5_div_2_Template, 7, 18, \"div\", 12);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r3.hideHeader);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"data\", ctx_r3.view)(\"rowHeight\", ctx_r3.rowHeight)(\"detailRowHeight\", ctx_r3.detailRowHeight)(\"total\", ctx_r3.totalCount)(\"take\", ctx_r3.pageSize)(\"groups\", ctx_r3.group)(\"groupable\", ctx_r3.groupable)(\"skip\", ctx_r3.skip)(\"trackBy\", ctx_r3.trackBy)(\"columns\", ctx_r3.columnsContainer)(\"selectable\", ctx_r3.selectable)(\"filterable\", ctx_r3.filterable)(\"detailTemplate\", ctx_r3.detailTemplate)(\"noRecordsTemplate\", ctx_r3.noRecordsTemplate)(\"rowClass\", ctx_r3.rowClass)(\"loading\", ctx_r3.loading)(\"isVirtual\", ctx_r3.isVirtual)(\"virtualColumns\", ctx_r3.virtualColumns)(\"enableDrag\", ctx_r3.marqueeSelection);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r3.showFooter);\n} }\nfunction GridComponent_ng_template_6_thead_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"thead\", 39);\n} if (rf & 2) {\n const ctx_r21 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r21.resizable)(\"scrollable\", false)(\"columns\", ctx_r21.visibleColumns)(\"totalColumnLevels\", ctx_r21.totalColumnLevels)(\"groups\", ctx_r21.group)(\"groupable\", ctx_r21.showGroupPanel)(\"reorderable\", ctx_r21.reorderable)(\"sort\", ctx_r21.sort)(\"sortable\", ctx_r21.sortable)(\"filter\", ctx_r21.filter)(\"filterable\", ctx_r21.filterable)(\"columnMenu\", ctx_r21.columnMenuOptions)(\"columnMenuTemplate\", ctx_r21.columnMenuTemplate)(\"detailTemplate\", ctx_r21.detailTemplate);\n} }\nfunction GridComponent_ng_template_6_tfoot_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tfoot\", 40);\n} if (rf & 2) {\n const ctx_r22 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"scrollable\", false)(\"logicalRowIndex\", ctx_r22.ariaRowCount)(\"groups\", ctx_r22.group)(\"columns\", ctx_r22.leafColumns)(\"detailTemplate\", ctx_r22.detailTemplate);\n} }\nfunction GridComponent_ng_template_6_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 41);\n} }\nfunction GridComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\");\n ɵngcc0.ɵɵelement(1, \"colgroup\", 31);\n ɵngcc0.ɵɵtemplate(2, GridComponent_ng_template_6_thead_2_Template, 1, 14, \"thead\", 35);\n ɵngcc0.ɵɵelement(3, \"tbody\", 36);\n ɵngcc0.ɵɵtemplate(4, GridComponent_ng_template_6_tfoot_4_Template, 1, 5, \"tfoot\", 37);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, GridComponent_ng_template_6_div_5_Template, 1, 0, \"div\", 38);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"table-layout\", ctx_r4.resizable ? \"fixed\" : null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r4.leafColumns)(\"groups\", ctx_r4.group)(\"detailTemplate\", ctx_r4.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r4.hideHeader);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r4.group)(\"data\", ctx_r4.view)(\"skip\", ctx_r4.skip)(\"columns\", ctx_r4.leafColumns)(\"selectable\", ctx_r4.selectable)(\"filterable\", ctx_r4.filterable)(\"noRecordsTemplate\", ctx_r4.noRecordsTemplate)(\"detailTemplate\", ctx_r4.detailTemplate)(\"showGroupFooters\", ctx_r4.showGroupFooters)(\"trackBy\", ctx_r4.trackBy)(\"rowClass\", ctx_r4.rowClass)(\"enableDrag\", ctx_r4.marqueeSelection);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.showFooter);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.loading);\n} }\nfunction GridComponent_kendo_pager_7_Template(rf, ctx) { if (rf & 1) {\n const _r25 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-pager\", 42);\n ɵngcc0.ɵɵlistener(\"pageChange\", function GridComponent_kendo_pager_7_Template_kendo_pager_pageChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r25); const ctx_r24 = ɵngcc0.ɵɵnextContext(); return ctx_r24.notifyPageChange(\"pager\", $event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"template\", ctx_r5.pagerTemplate)(\"pageSize\", ctx_r5.pageSize)(\"total\", ctx_r5.view.total)(\"skip\", ctx_r5.skip)(\"options\", ctx_r5.pageable);\n} }\nfunction GridComponent_kendo_grid_toolbar_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-toolbar\", 43);\n} }\nconst _c117 = [\"container\"];\nconst _c118 = [\"lockedContainer\"];\nconst _c119 = [\"lockedTable\"];\nconst _c120 = [\"table\"];\nconst _c121 = function (a0, a1, a2, a3) { return { keydown: a0, scroll: a1, mousewheel: a2, DOMMouseScroll: a3 }; };\nfunction ListComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12, 13);\n ɵngcc0.ɵɵelementStart(2, \"div\", 3);\n ɵngcc0.ɵɵelementStart(3, \"table\", 14, 15);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 6);\n ɵngcc0.ɵɵelement(6, \"tbody\", 16);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(7, \"kendo-resize-sensor\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"div\", 9);\n ɵngcc0.ɵɵelement(9, \"div\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r0.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction4(25, _c121, ctx_r0.lockedKeydown, ctx_r0.lockedScroll, ctx_r0.lockedMousewheel, ctx_r0.lockedMousewheel))(\"scope\", ctx_r0);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r0.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r0.groups)(\"columns\", ctx_r0.lockedLeafColumns)(\"detailTemplate\", ctx_r0.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r0.groups)(\"isLocked\", true)(\"data\", ctx_r0.data)(\"noRecordsText\", \"\")(\"columns\", ctx_r0.lockedLeafColumns)(\"totalColumnsCount\", ctx_r0.leafColumns.length)(\"detailTemplate\", ctx_r0.detailTemplate)(\"showGroupFooters\", ctx_r0.showFooter)(\"skip\", ctx_r0.skip)(\"selectable\", ctx_r0.selectable)(\"trackBy\", ctx_r0.trackBy)(\"filterable\", ctx_r0.filterable)(\"rowClass\", ctx_r0.rowClass);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r0.totalHeight, \"px\");\n} }\nfunction ListComponent_kendo_resize_sensor_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-resize-sensor\");\n} }\nfunction ListComponent_kendo_resize_sensor_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-resize-sensor\");\n} }\nfunction ListComponent_div_12_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 17);\n ɵngcc0.ɵɵelement(1, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r5.totalWidth, \"px\");\n} }\nfunction ListComponent_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 18);\n} }\nconst _c122 = [\"kendoGridFilterRow\", \"\"];\nfunction FilterRowComponent_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 3);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-cell\", true);\n} }\nfunction FilterRowComponent_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 3);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-cell\", true);\n} }\nfunction FilterRowComponent_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 4);\n} if (rf & 2) {\n const column_r4 = ctx.$implicit;\n const columnIndex_r5 = ctx.index;\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", column_r4)(\"filter\", ctx_r2.filter)(\"logicalRowIndex\", ctx_r2.logicalRowIndex)(\"logicalColIndex\", ctx_r2.lockedColumnsCount + columnIndex_r5);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.filterLabel);\n} }\nconst _c123 = [\"kendoGridFilterCell\", \"\"];\nfunction FilterCellComponent_ng_template_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementContainer(1, 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"column\", ctx_r1.column)(\"filter\", ctx_r1.filter);\n} }\nfunction FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template(rf, ctx) { }\nfunction FilterCellComponent_ng_template_0_ng_container_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r3.column.filterCellTemplateRef)(\"ngTemplateOutletContext\", ctx_r3.templateContext);\n} }\nfunction FilterCellComponent_ng_template_0_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, FilterCellComponent_ng_template_0_ng_container_2_1_Template, 1, 2, undefined, 4);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.column.filterCellTemplateRef);\n} }\nfunction FilterCellComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 1);\n ɵngcc0.ɵɵtemplate(1, FilterCellComponent_ng_template_0_ng_container_1_Template, 2, 2, \"ng-container\", 2);\n ɵngcc0.ɵɵtemplate(2, FilterCellComponent_ng_template_0_ng_container_2_Template, 2, 1, \"ng-container\", 2);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx_r0.hasTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n} }\nconst _c124 = [\"*\"];\nconst _c125 = [\"dropdown\"];\nconst _c126 = function () { return { width: \"auto\" }; };\nfunction FilterCellOperatorsComponent_kendo_dropdownlist_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FilterCellOperatorsComponent_kendo_dropdownlist_0_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.onChange($event); })(\"keydown\", function FilterCellOperatorsComponent_kendo_dropdownlist_0_Template_kendo_dropdownlist_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.dropdownKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r0.operators)(\"value\", ctx_r0.value)(\"valuePrimitive\", true)(\"popupSettings\", ɵngcc0.ɵɵpureFunction0(4, _c126));\n} }\nconst _c127 = function (a0) { return { \"k-clear-button-visible\": a0 }; };\nconst _c128 = [\"kendoGridColGroup\", \"\"];\nfunction ColGroupComponent_ng_template_0_col_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-col\", true);\n} }\nfunction ColGroupComponent_ng_template_0_col_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-col\", true);\n} }\nfunction ColGroupComponent_ng_template_0_col_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n const column_r5 = ctx.$implicit;\n ɵngcc0.ɵɵstyleProp(\"width\", column_r5.width, \"px\");\n} }\nfunction ColGroupComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColGroupComponent_ng_template_0_col_0_Template, 1, 2, \"col\", 1);\n ɵngcc0.ɵɵtemplate(1, ColGroupComponent_ng_template_0_col_1_Template, 1, 2, \"col\", 2);\n ɵngcc0.ɵɵtemplate(2, ColGroupComponent_ng_template_0_col_2_Template, 1, 2, \"col\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.detailTemplate == null ? null : ctx_r0.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.columnsToRender)(\"ngForTrackBy\", ctx_r0.trackBy);\n} }\nconst _c129 = [\"kendoGridLoading\", \"\"];\nfunction PagerComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 2);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.template.templateRef)(\"ngTemplateOutletContext\", ctx_r0.templateContext);\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-prev-buttons\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-numeric-buttons\", 5);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"buttonCount\", ctx_r3.settings.buttonCount);\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_input_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-input\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-next-buttons\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_info_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-info\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-page-sizes\", 6);\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"pageSizes\", ctx_r7.settings.pageSizes);\n} }\nfunction PagerComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template, 1, 0, \"kendo-pager-prev-buttons\", 1);\n ɵngcc0.ɵɵtemplate(2, PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template, 1, 1, \"kendo-pager-numeric-buttons\", 3);\n ɵngcc0.ɵɵtemplate(3, PagerComponent_ng_container_1_kendo_pager_input_3_Template, 1, 0, \"kendo-pager-input\", 1);\n ɵngcc0.ɵɵtemplate(4, PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template, 1, 0, \"kendo-pager-next-buttons\", 1);\n ɵngcc0.ɵɵtemplate(5, PagerComponent_ng_container_1_kendo_pager_info_5_Template, 1, 0, \"kendo-pager-info\", 1);\n ɵngcc0.ɵɵtemplate(6, PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template, 1, 1, \"kendo-pager-page-sizes\", 4);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.previousNext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.type === \"numeric\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.type === \"input\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.previousNext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.info);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.settings.pageSizes);\n} }\nconst _c130 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"k-pager-first\": true }; };\nconst _c131 = function () { return { \"k-icon\": true, \"k-i-seek-w\": true }; };\nconst _c132 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"\": true }; };\nconst _c133 = function () { return { \"k-icon\": true, \"k-i-arrow-w\": true }; };\nconst _c134 = function () { return { \"k-icon\": true, \"k-i-arrow-e\": true }; };\nconst _c135 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"k-pager-last\": true }; };\nconst _c136 = function () { return { \"k-icon\": true, \"k-i-seek-e\": true }; };\nfunction PagerNumericButtonsComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_1_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r4); const ctx_r3 = ɵngcc0.ɵɵnextContext(); return ctx_r3.changePage(ctx_r3.start - 2); });\n ɵngcc0.ɵɵtext(2, \"...\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r0.pageLabel(ctx_r0.start - 1));\n} }\nconst _c137 = function (a1) { return { \"k-link\": true, \"k-state-selected\": a1 }; };\nfunction PagerNumericButtonsComponent_li_2_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_2_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r7); const num_r5 = ctx.$implicit; const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.changePage(num_r5 - 1); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const num_r5 = ctx.$implicit;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c137, ctx_r1.currentPage == num_r5));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r1.pageLabel(num_r5));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", num_r5, \" \");\n} }\nfunction PagerNumericButtonsComponent_li_3_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_3_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.changePage(ctx_r8.end); });\n ɵngcc0.ɵɵtext(2, \"...\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.pageLabel(ctx_r2.end + 1));\n} }\nconst _c138 = function () { return { \"k-pager-numbers\": true, \"k-reset\": true }; };\nconst _c139 = function () { return { \"k-pager-input\": true, \"k-label\": true }; };\nconst _c140 = function (a0, a1) { return { keydown: a0, focusout: a1 }; };\nfunction PagerPageSizesComponent_option_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"option\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r1.pageSize);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r1.pageSize);\n} }\nfunction PagerPageSizesComponent_option_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"option\", 5);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const page_r3 = ctx.$implicit;\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r2.getValue(page_r3))(\"selected\", ctx_r2.getSelectedState(page_r3));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", page_r3[\"text\"], \" \");\n} }\nconst _c141 = [\"kendoGridGroupHeader\", \"\"];\nfunction GroupHeaderComponent_ng_template_0_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 4);\n} }\nfunction GroupHeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupHeaderComponent_ng_template_0_td_0_Template, 1, 0, \"td\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.prefixGroupCell(ctx_r0.item));\n} }\nfunction GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate2(\" \", ctx_r6.groupTitle(ctx_r6.item), \": \", ɵngcc0.ɵɵpipeBind3(1, 2, ctx_r6.item.data, \"value\", ctx_r6.formatForGroup(ctx_r6.item)), \" \");\n} }\nfunction GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template(rf, ctx) { }\nconst _c142 = function (a0, a1) { return { \"k-i-collapse\": a0, \"k-i-expand\": a1 }; };\nconst _c143 = function (a0, a1, a2, a3, a4, a5, a6, a7) { return { templateRef: a0, group: a1, aggregates: a2, value: a3, field: a4, index: a5, expanded: a6, $implicit: a7 }; };\nfunction GroupHeaderComponent_td_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function GroupHeaderComponent_td_1_ng_template_2_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(2); return ctx_r8.toggleGroup(ctx_r8.item); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template, 2, 6, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(3, _c142, ctx_r5.isExpanded, !ctx_r5.isExpanded));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r5.groupHeaderTemplate(ctx_r5.item));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction8(6, _c143, ctx_r5.groupHeaderTemplate(ctx_r5.item), ctx_r5.item.data, ctx_r5.item.data == null ? null : ctx_r5.item.data.aggregates, ctx_r5.item.data == null ? null : ctx_r5.item.data.value, ctx_r5.item.data == null ? null : ctx_r5.item.data.field, ctx_r5.item.index, ctx_r5.isExpanded, ctx_r5.item.data));\n} }\nfunction GroupHeaderComponent_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 5);\n ɵngcc0.ɵɵelementStart(1, \"p\", 6);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_td_1_ng_template_2_Template, 3, 15, \"ng-template\", 0);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r1.logicalRowIndex)(\"logicalColIndex\", 0)(\"logicalSlaveCell\", ctx_r1.skipGroupDecoration)(\"groupItem\", ctx_r1.item)(\"colSpan\", ctx_r1.logicalColSpan());\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r1.groupSpan(ctx_r1.item))(\"role\", ctx_r1.ariaRole())(\"aria-expanded\", ctx_r1.isExpanded);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.skipGroupDecoration);\n} }\nconst _c144 = function (a0, a1, a2, a3, a4, a5) { return { group: a0, aggregates: a1, value: a2, field: a3, index: a4, $implicit: a5 }; };\nfunction GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 12);\n} if (rf & 2) {\n const column_r11 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", column_r11.groupHeaderColumnTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction6(2, _c144, ctx_r13.item.data, ctx_r13.item.data == null ? null : ctx_r13.item.data.aggregates, ctx_r13.item.data == null ? null : ctx_r13.item.data.value, ctx_r13.item.data == null ? null : ctx_r13.item.data.field, ctx_r13.item.index, ctx_r13.item.data));\n} }\nfunction GroupHeaderComponent_ng_container_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 10);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template, 1, 9, \"ng-container\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r11 = ctx.$implicit;\n const index_r12 = ctx.index;\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r10.logicalRowIndex)(\"logicalColIndex\", index_r12 + 1)(\"logicalSlaveCell\", false)(\"groupItem\", ctx_r10.item)(\"colSpan\", 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", column_r11.groupHeaderColumnTemplateRef);\n} }\nfunction GroupHeaderComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_ng_container_2_td_1_Template, 2, 6, \"td\", 9);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r2.groupHeaderColumns);\n} }\nconst _c145 = function () { return { lastTarget: true }; };\nfunction GroupPanelComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction0(2, _c145));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.text, \" \");\n} }\nconst _c146 = function (a0) { return { field: a0 }; };\nconst _c147 = function (a0, a2) { return { field: a0, type: \"groupIndicator\", hint: a2 }; };\nfunction GroupPanelComponent_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵelementStart(1, \"div\", 4);\n ɵngcc0.ɵɵlistener(\"directionChange\", function GroupPanelComponent_div_1_Template_div_directionChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.directionChange($event); })(\"remove\", function GroupPanelComponent_div_1_Template_div_remove_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.remove($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const group_r3 = ctx.$implicit;\n const index_r4 = ctx.index;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction1(5, _c146, group_r3.field));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"enableDrag\", true)(\"context\", ɵngcc0.ɵɵpureFunction2(7, _c147, group_r3.field, ctx_r1.groupTitles[index_r4]))(\"group\", group_r3)(\"groupTitle\", ctx_r1.groupTitles[index_r4]);\n} }\nfunction GroupPanelComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction0(1, _c145));\n} }\nconst _c148 = [\"kendoGroupIndicator\", \"\"];\nconst _c149 = [\"kendoGridHeader\", \"\"];\nfunction HeaderComponent_ng_template_0_tr_0_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"th\", 7);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_th_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"th\", 8);\n} if (rf & 2) {\n const levelIndex_r4 = ɵngcc0.ɵɵnextContext().index;\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r4)(\"logicalColIndex\", 0);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-filter-menu\", 15);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r15 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r10)(\"filter\", ctx_r15.filter);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-column-menu\", 16);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r16 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"standalone\", false)(\"settings\", ctx_r16.columnMenu)(\"column\", column_r10)(\"columnMenuTemplate\", ctx_r16.columnMenuTemplate)(\"sort\", ctx_r16.sort)(\"filter\", ctx_r16.filter)(\"sortable\", ctx_r16.sortable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(3).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r10.displayTitle);\n} }\nconst _c150 = function (a0, a1, a2, a3) { return { templateRef: a0, columnIndex: a1, column: a2, $implicit: a3 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(2, _c150, column_r10.headerTemplateRef, column_r10.leafIndex, column_r10, column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r10.headerTemplateRef);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(3).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r10.displayTitle);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 23);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r30 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r30.sortOrder(column_r10.field));\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n const _r35 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 18, 19);\n ɵngcc0.ɵɵlistener(\"click\", function HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r35); const _r27 = ɵngcc0.ɵɵreference(1); const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit; const ctx_r33 = ɵngcc0.ɵɵnextContext(3); return ctx_r33.onSortClick(column_r10, $event, _r27); });\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵelement(4, \"span\", 20);\n ɵngcc0.ɵɵtemplate(5, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template, 2, 1, \"span\", 21);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(6, \"span\", 22);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r18 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(6, _c150, column_r10.headerTemplateRef, column_r10.leafIndex, column_r10, column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r10.headerTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r18.sortIcon(column_r10.field));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r18.sortableLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r18.showSortNumbering(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"innerHtml\", ctx_r18.sortStatus(column_r10), ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 24);\n ɵngcc0.ɵɵelement(1, \"label\", 25);\n} if (rf & 2) {\n const ctx_r19 = ɵngcc0.ɵɵnextContext(5);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r19.selectAllCheckboxId());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r19.selectAllCheckboxId());\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 26);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r20 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r10)(\"columns\", ctx_r20.columns);\n} }\nconst _c151 = function (a0, a2, a3, a4) { return { field: a0, type: \"column\", column: a2, hint: a3, lastColumn: a4 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template(rf, ctx) { if (rf & 1) {\n const _r40 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"th\", 11);\n ɵngcc0.ɵɵlistener(\"keydown\", function HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template_th_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r40); const column_r10 = ɵngcc0.ɵɵnextContext().$implicit; const ctx_r38 = ɵngcc0.ɵɵnextContext(3); return ctx_r38.onHeaderKeydown(column_r10, $event); });\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template, 1, 2, \"kendo-grid-filter-menu\", 12);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template, 1, 7, \"kendo-grid-column-menu\", 13);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template, 2, 7, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(4, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template, 7, 11, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(5, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template, 2, 2, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(6, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template, 1, 2, \"span\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r41 = ɵngcc0.ɵɵnextContext();\n const column_r10 = ctx_r41.$implicit;\n const columnIndex_r11 = ctx_r41.index;\n const last_r12 = ctx_r41.last;\n const levelIndex_r4 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"k-filterable\", ctx_r13.showFilterMenu && ctx_r13.isFilterable(column_r10) || ctx_r13.showColumnMenu(column_r10))(\"k-first\", ctx_r13.isFirstOnRow(column_r10, columnIndex_r11));\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r4)(\"logicalColIndex\", ctx_r13.logicalColumnIndex(column_r10))(\"colSpan\", column_r10.colspan)(\"rowSpan\", column_r10.rowspan(ctx_r13.totalColumnLevels))(\"enableDrag\", ctx_r13.shouldActivate(column_r10))(\"context\", ɵngcc0.ɵɵpureFunction4(21, _c151, column_r10.field, column_r10, column_r10.title || column_r10.field, last_r12 && columnIndex_r11 === 0))(\"ngClass\", column_r10.headerClass)(\"ngStyle\", column_r10.headerStyle);\n ɵngcc0.ɵɵattribute(\"aria-sort\", ctx_r13.sortState(column_r10))(\"rowspan\", column_r10.rowspan(ctx_r13.totalColumnLevels))(\"colspan\", column_r10.colspan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.showFilterMenu && ctx_r13.isFilterable(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.showColumnMenu(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r13.isSortable(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.isSortable(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.isCheckboxColumn(column_r10) && !column_r10.headerTemplateRef && column_r10.showSelectAll);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.resizable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-column-menu\", 29);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r43 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"standalone\", false)(\"settings\", ctx_r43.columnMenu)(\"column\", column_r10)(\"columnMenuTemplate\", ctx_r43.columnMenuTemplate);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r10.displayTitle);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 26);\n} if (rf & 2) {\n const column_r10 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r46 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r10)(\"columns\", ctx_r46.columns);\n} }\nconst _c152 = function (a1, a2, a3) { return { type: \"columnGroup\", column: a1, hint: a2, lastColumn: a3 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 27);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template, 1, 4, \"kendo-grid-column-menu\", 28);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(4, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template, 1, 2, \"span\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r50 = ɵngcc0.ɵɵnextContext();\n const column_r10 = ctx_r50.$implicit;\n const columnIndex_r11 = ctx_r50.index;\n const last_r12 = ctx_r50.last;\n const levelIndex_r4 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"k-first\", ctx_r14.isFirstOnRow(column_r10, columnIndex_r11))(\"k-filterable\", ctx_r14.showColumnMenu(column_r10));\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r4)(\"logicalColIndex\", ctx_r14.logicalColumnIndex(column_r10))(\"rowSpan\", column_r10.rowspan(ctx_r14.totalColumnLevels))(\"colSpan\", column_r10.colspan)(\"enableDrag\", ctx_r14.shouldActivate(column_r10))(\"context\", ɵngcc0.ɵɵpureFunction3(18, _c152, column_r10, column_r10.title, last_r12 && columnIndex_r11 === 0))(\"ngClass\", column_r10.headerClass)(\"ngStyle\", column_r10.headerStyle);\n ɵngcc0.ɵɵattribute(\"rowspan\", column_r10.rowspan(ctx_r14.totalColumnLevels))(\"colspan\", column_r10.colspan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r14.showColumnMenu(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(22, _c150, column_r10.headerTemplateRef, ctx_r14.lockedColumnsCount + columnIndex_r11, column_r10, column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r10.headerTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r14.resizable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template, 7, 26, \"th\", 9);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template, 5, 27, \"th\", 10);\n} if (rf & 2) {\n const column_r10 = ctx.$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r7.isColumnGroupComponent(column_r10));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r7.isColumnGroupComponent(column_r10));\n} }\nfunction HeaderComponent_ng_template_0_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 3);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_th_1_Template, 1, 0, \"th\", 4);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_th_2_Template, 1, 2, \"th\", 5);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_Template, 2, 2, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const levelIndex_r4 = ctx.index;\n const ctx_r1 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r4)(\"logicalSlaveRow\", ctx_r1.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r1.columns.length)(\"logicalSlaveCellsCount\", ctx_r1.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r1.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.detailTemplate == null ? null : ctx_r1.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r1.columnsForLevel(levelIndex_r4))(\"ngForTrackBy\", ctx_r1.trackByIndex);\n} }\nfunction HeaderComponent_ng_template_0_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tr\", 30);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r2.leafColumns)(\"filter\", ctx_r2.filter)(\"groups\", ctx_r2.groups)(\"detailTemplate\", ctx_r2.detailTemplate)(\"lockedColumnsCount\", ctx_r2.lockedColumnsCount)(\"logicalRowIndex\", ctx_r2.totalColumnLevels + 1)(\"logicalSlaveRow\", ctx_r2.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r2.columns.length)(\"logicalSlaveCellsCount\", ctx_r2.unlockedColumnsCount);\n} }\nfunction HeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_Template, 4, 8, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_1_Template, 1, 9, \"tr\", 2);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.columnLevels);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.showFilterRow);\n} }\nfunction FilterMenuComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-container\", 4);\n ɵngcc0.ɵɵlistener(\"close\", function FilterMenuComponent_ng_template_3_Template_kendo_grid_filter_menu_container_close_0_listener() { ɵngcc0.ɵɵrestoreView(_r4); const ctx_r3 = ɵngcc0.ɵɵnextContext(); return ctx_r3.close(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", ctx_r2.column)(\"filter\", ctx_r2.filter);\n} }\nconst _c153 = function (a1) { return { \"k-grid-filter\": true, \"k-state-active\": a1 }; };\nfunction FilterMenuContainerComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementContainer(1, 7);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterService\", ctx_r0.childService)(\"column\", ctx_r0.column)(\"filter\", ctx_r0.childFilter);\n} }\nfunction FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template(rf, ctx) { }\nfunction FilterMenuContainerComponent_ng_container_4_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template, 0, 0, \"ng-template\", 9);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.column.filterMenuTemplateRef)(\"ngTemplateOutletContext\", ctx_r2.templateContext);\n} }\nfunction FilterMenuContainerComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, FilterMenuContainerComponent_ng_container_4_1_Template, 1, 2, undefined, 8);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.column.filterMenuTemplateRef);\n} }\nfunction StringFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function StringFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r0.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r0.filter == null ? null : ctx_r0.filter.logic);\n} }\nfunction StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-string-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r1.operators)(\"currentFilter\", ctx_r1.secondFilter)(\"filterService\", ctx_r1.filterService)(\"column\", ctx_r1.column)(\"filter\", ctx_r1.filter);\n} }\nfunction NumericFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function NumericFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r0.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r0.filter == null ? null : ctx_r0.filter.logic);\n} }\nfunction NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-numeric-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r1.operators)(\"currentFilter\", ctx_r1.secondFilter)(\"filterService\", ctx_r1.filterService)(\"column\", ctx_r1.column)(\"filter\", ctx_r1.filter)(\"format\", ctx_r1.format)(\"decimals\", ctx_r1.decimals)(\"spinners\", ctx_r1.spinners)(\"min\", ctx_r1.min)(\"max\", ctx_r1.max)(\"step\", ctx_r1.step);\n} }\nfunction DateFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r0.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r0.filter == null ? null : ctx_r0.filter.logic);\n} }\nfunction DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-date-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r1.operators)(\"currentFilter\", ctx_r1.secondFilter)(\"filterService\", ctx_r1.filterService)(\"column\", ctx_r1.column)(\"filter\", ctx_r1.filter)(\"activeView\", ctx_r1.activeView)(\"bottomView\", ctx_r1.bottomView)(\"topView\", ctx_r1.topView)(\"format\", ctx_r1.format)(\"formatPlaceholder\", ctx_r1.formatPlaceholder)(\"placeholder\", ctx_r1.placeholder)(\"min\", ctx_r1.min)(\"max\", ctx_r1.max)(\"weekNumber\", ctx_r1.weekNumber);\n} }\nfunction BooleanFilterMenuComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"input\", 2);\n ɵngcc0.ɵɵlistener(\"change\", function BooleanFilterMenuComponent_li_1_Template_input_change_1_listener() { ɵngcc0.ɵɵrestoreView(_r3); const item_r1 = ctx.$implicit; const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.onChange(item_r1.value); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"label\", 3);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"name\", ctx_r0.idPrefix)(\"checked\", ctx_r0.isSelected(item_r1.value));\n ɵngcc0.ɵɵattribute(\"id\", ctx_r0.radioId(item_r1.value));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r0.radioId(item_r1.value));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(item_r1.text);\n} }\nfunction ColumnListComponent_label_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"label\", 3);\n ɵngcc0.ɵɵelement(1, \"input\", 4);\n ɵngcc0.ɵɵelementStart(2, \"span\", 5);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r2 = ctx.$implicit;\n const index_r3 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"checked\", !column_r2.hidden)(\"disabled\", ctx_r0.isDisabled(column_r2));\n ɵngcc0.ɵɵattribute(\"data-index\", index_r3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(column_r2.displayTitle);\n} }\nfunction ColumnListComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 6);\n ɵngcc0.ɵɵelementStart(1, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnListComponent_div_2_Template_button_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.cancelChanges(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"button\", 8);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnListComponent_div_2_Template_button_click_3_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.applyChanges(); });\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r1.actionsClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r1.resetText);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r1.applyText);\n} }\nfunction ColumnChooserComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"kendo-grid-columnlist\", 5);\n ɵngcc0.ɵɵlistener(\"apply\", function ColumnChooserComponent_ng_template_3_Template_kendo_grid_columnlist_apply_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r4); const ctx_r3 = ɵngcc0.ɵɵnextContext(); return ctx_r3.onApply($event); })(\"columnChange\", function ColumnChooserComponent_ng_template_3_Template_kendo_grid_columnlist_columnChange_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r4); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.localization.get(\"columns\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r2.columns)(\"applyText\", ctx_r2.localization.get(\"columnsApply\"))(\"resetText\", ctx_r2.localization.get(\"columnsReset\"))(\"autoSync\", ctx_r2.autoSync)(\"allowHideAll\", ctx_r2.allowHideAll);\n} }\nfunction ColumnMenuChooserComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n const _r2 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnlist\", 2);\n ɵngcc0.ɵɵlistener(\"apply\", function ColumnMenuChooserComponent_ng_template_1_Template_kendo_grid_columnlist_apply_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r2); const ctx_r1 = ɵngcc0.ɵɵnextContext(); return ctx_r1.onApply($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"applyText\", ctx_r0.localization.get(\"columnsApply\"))(\"resetText\", ctx_r0.localization.get(\"columnsReset\"))(\"columns\", ctx_r0.columns)(\"autoSync\", false)(\"allowHideAll\", false)(\"actionsClass\", ctx_r0.actionsClass);\n} }\nfunction ColumnMenuFilterComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n const _r2 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-container\", 2);\n ɵngcc0.ɵɵlistener(\"close\", function ColumnMenuFilterComponent_ng_template_1_Template_kendo_grid_filter_menu_container_close_0_listener() { ɵngcc0.ɵɵrestoreView(_r2); const ctx_r1 = ɵngcc0.ɵɵnextContext(); return ctx_r1.close(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", ctx_r0.service.column)(\"filter\", ctx_r0.service.filter)(\"actionsClass\", ctx_r0.actionsClass);\n} }\nfunction ColumnMenuItemComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r0.iconClass);\n} }\nfunction ColumnMenuItemComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵelementContainer(1, 5);\n ɵngcc0.ɵɵelement(2, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@state\", ctx_r1.contentState);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.contentTemplate.templateRef);\n} }\nconst _c154 = function (a0, a1) { return { service: a0, column: a1 }; };\nfunction ColumnMenuComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 5);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n const _r3 = ɵngcc0.ɵɵreference(6);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.column.columnMenuTemplateRef || ctx_r2.columnMenuTemplate || _r3)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c154, ctx_r2.service, ctx_r2.column));\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-columnmenu-sort\", 8);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r5.service);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-columnmenu-lock\", 8);\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r6.service);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-chooser\", 9);\n ɵngcc0.ɵɵlistener(\"expand\", function ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template_kendo_grid_columnmenu_chooser_expand_0_listener() { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(2); return ctx_r9.onColumnsExpand(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r7.service)(\"expanded\", ctx_r7.expandedColumns);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-filter\", 9);\n ɵngcc0.ɵɵlistener(\"expand\", function ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template_kendo_grid_columnmenu_filter_expand_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(2); return ctx_r11.onFilterExpand(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r8.service)(\"expanded\", ctx_r8.expandedFilter);\n} }\nfunction ColumnMenuComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template, 1, 1, \"kendo-grid-columnmenu-sort\", 6);\n ɵngcc0.ɵɵtemplate(1, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template, 1, 1, \"kendo-grid-columnmenu-lock\", 6);\n ɵngcc0.ɵɵtemplate(2, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template, 1, 2, \"kendo-grid-columnmenu-chooser\", 7);\n ɵngcc0.ɵɵtemplate(3, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template, 1, 2, \"kendo-grid-columnmenu-filter\", 7);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.hasSort);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.hasLock);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.hasColumnChooser);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.hasFilter);\n} }\nconst _c155 = function (a0) { return { \"k-state-active\": a0 }; };\nconst _c156 = [\"kendoGridTableBody\", \"\"];\nfunction TableBodyComponent_ng_template_0_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 7);\n} }\nfunction TableBodyComponent_ng_template_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_0_ng_template_1_td_0_Template, 1, 0, \"td\", 6);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.groups);\n} }\nfunction TableBodyComponent_ng_template_0_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 8);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r4.addRowLogicalIndex())(\"logicalColIndex\", 0);\n} }\nfunction TableBodyComponent_ng_template_0_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 9);\n} if (rf & 2) {\n const column_r8 = ctx.$implicit;\n const columnIndex_r9 = ctx.index;\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rowIndex\", -1)(\"columnIndex\", ctx_r5.lockedColumnsCount + columnIndex_r9)(\"isNew\", true)(\"column\", column_r8)(\"dataItem\", ctx_r5.newDataItem)(\"ngClass\", column_r8.cssClass)(\"ngStyle\", column_r8.style)(\"logicalRowIndex\", ctx_r5.addRowLogicalIndex())(\"logicalColIndex\", ctx_r5.logicalColIndex(column_r8))(\"colSpan\", column_r8.colspan);\n ɵngcc0.ɵɵattribute(\"colspan\", column_r8.colspan);\n} }\nfunction TableBodyComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 3);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_0_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_0_td_2_Template, 1, 2, \"td\", 4);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_0_td_3_Template, 1, 11, \"td\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r0.addRowLogicalIndex())(\"logicalSlaveRow\", ctx_r0.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r0.columns.length)(\"logicalSlaveCellsCount\", ctx_r0.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r0.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.detailTemplate == null ? null : ctx_r0.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.columns)(\"ngForTrackBy\", ctx_r0.trackByColumns);\n} }\nfunction TableBodyComponent_tr_1_ng_template_2_Template(rf, ctx) { }\nfunction TableBodyComponent_tr_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r11.noRecordsText, \" \");\n} }\nconst _c157 = function (a0) { return { templateRef: a0 }; };\nfunction TableBodyComponent_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 10);\n ɵngcc0.ɵɵelementStart(1, \"td\");\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_tr_1_ng_template_2_Template, 0, 0, \"ng-template\", 11);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_tr_1_ng_container_3_Template, 2, 1, \"ng-container\", 12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r1.colSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.noRecordsTemplate == null ? null : ctx_r1.noRecordsTemplate.templateRef)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(4, _c157, ctx_r1.noRecordsTemplate == null ? null : ctx_r1.noRecordsTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r1.noRecordsTemplate == null ? null : ctx_r1.noRecordsTemplate.templateRef));\n} }\nfunction TableBodyComponent_ng_template_2_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tr\", 17);\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext();\n const item_r12 = ctx_r18.$implicit;\n const rowIndex_r13 = ctx_r18.index;\n const ctx_r14 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r14.columns)(\"groups\", ctx_r14.groups)(\"item\", item_r12)(\"hasDetails\", ctx_r14.detailTemplate == null ? null : ctx_r14.detailTemplate.templateRef)(\"skipGroupDecoration\", ctx_r14.skipGroupDecoration)(\"hasGroupHeaderColumn\", ctx_r14.hasGroupHeaderColumn)(\"groupHeaderColumns\", ctx_r14.groupHeaderColumns)(\"rowIndex\", rowIndex_r13 + 1)(\"totalColumnsCount\", ctx_r14.totalColumnsCount)(\"logicalRowIndex\", ctx_r14.logicalRowIndex(rowIndex_r13))(\"logicalSlaveRow\", ctx_r14.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r14.columns.length)(\"logicalSlaveCellsCount\", ctx_r14.groupHeaderSlaveCellsCount);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 7);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template, 1, 0, \"td\", 6);\n} if (rf & 2) {\n const ctx_r19 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r19.groups);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template(rf, ctx) { if (rf & 1) {\n const _r27 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 23);\n ɵngcc0.ɵɵlistener(\"click\", function TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r27); const item_r12 = ɵngcc0.ɵɵnextContext(3).$implicit; const ctx_r25 = ɵngcc0.ɵɵnextContext(); return ctx_r25.toggleRow(item_r12.index, item_r12.data); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r12 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r24 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r24.detailButtonStyles(item_r12));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r24.detailButtonTitle(item_r12));\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 21);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template, 1, 2, \"a\", 22);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r29 = ɵngcc0.ɵɵnextContext(2);\n const rowIndex_r13 = ctx_r29.index;\n const item_r12 = ctx_r29.$implicit;\n const ctx_r20 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r20.logicalRowIndex(rowIndex_r13))(\"logicalColIndex\", 0)(\"dataRowIndex\", item_r12.index)(\"dataItem\", item_r12.data)(\"detailExpandCell\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r20.detailTemplate.showIf(item_r12.data, item_r12.index));\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 24);\n} if (rf & 2) {\n const column_r30 = ctx.$implicit;\n const columnIndex_r31 = ctx.index;\n const ctx_r32 = ɵngcc0.ɵɵnextContext(2);\n const item_r12 = ctx_r32.$implicit;\n const rowIndex_r13 = ctx_r32.index;\n const ctx_r21 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx_r21.isSelectable() && ctx_r21.selectable.drag ? \"none\" : \"auto\");\n ɵngcc0.ɵɵclassProp(\"k-grid-edit-cell\", ctx_r21.isEditingCell(item_r12.index, column_r30))(\"k-state-selected\", ctx_r21.isSelectable && ctx_r21.cellSelectionService.isCellSelected(item_r12, column_r30));\n ɵngcc0.ɵɵproperty(\"rowIndex\", item_r12.index)(\"columnIndex\", ctx_r21.lockedColumnsCount + columnIndex_r31)(\"column\", column_r30)(\"dataItem\", item_r12.data)(\"logicalRowIndex\", ctx_r21.logicalRowIndex(rowIndex_r13))(\"logicalColIndex\", ctx_r21.logicalColIndex(column_r30))(\"dataRowIndex\", item_r12.index)(\"dataItem\", item_r12.data)(\"colIndex\", columnIndex_r31)(\"colSpan\", column_r30.colspan)(\"ngClass\", column_r30.cssClass)(\"ngStyle\", column_r30.style);\n ɵngcc0.ɵɵattribute(\"data-kendo-grid-column-index\", ctx_r21.lockedColumnsCount + columnIndex_r31)(\"aria-selected\", ctx_r21.isSelectable() ? ctx_r21.isAriaSelected(item_r12, column_r30) : undefined)(\"colspan\", column_r30.colspan);\n} }\nconst _c158 = function (a0, a1) { return { dataItem: a0, index: a1 }; };\nfunction TableBodyComponent_ng_template_2_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 18);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_1_td_2_Template, 2, 6, \"td\", 19);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_1_td_3_Template, 1, 21, \"td\", 20);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r33 = ɵngcc0.ɵɵnextContext();\n const item_r12 = ctx_r33.$implicit;\n const rowIndex_r13 = ctx_r33.index;\n const ctx_r15 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-alt\", ctx_r15.isOdd(item_r12))(\"k-master-row\", ctx_r15.detailTemplate == null ? null : ctx_r15.detailTemplate.templateRef)(\"k-grid-edit-row\", ctx_r15.isEditingRow(item_r12.index))(\"k-state-selected\", ctx_r15.isSelectable() && ctx_r15.isRowSelected(item_r12));\n ɵngcc0.ɵɵproperty(\"dataRowIndex\", item_r12.index)(\"dataItem\", item_r12.data)(\"logicalRowIndex\", ctx_r15.logicalRowIndex(rowIndex_r13))(\"logicalSlaveRow\", ctx_r15.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r15.columns.length)(\"logicalSlaveCellsCount\", ctx_r15.unlockedColumnsCount)(\"ngClass\", ctx_r15.rowClass(ɵngcc0.ɵɵpureFunction2(20, _c158, item_r12.data, item_r12.index)));\n ɵngcc0.ɵɵattribute(\"data-kendo-grid-item-index\", item_r12.index);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r15.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r15.detailTemplate == null ? null : ctx_r15.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r15.columns)(\"ngForTrackBy\", ctx_r15.trackByColumns);\n} }\nfunction TableBodyComponent_ng_template_2_tr_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 30);\n} }\nfunction TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template(rf, ctx) { }\nconst _c159 = function (a0, a1, a2) { return { dataItem: a0, rowIndex: a1, $implicit: a2 }; };\nfunction TableBodyComponent_ng_template_2_tr_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 25);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_2_td_1_Template, 1, 0, \"td\", 26);\n ɵngcc0.ɵɵelement(2, \"td\", 27);\n ɵngcc0.ɵɵelementStart(3, \"td\", 28);\n ɵngcc0.ɵɵtemplate(4, TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template, 0, 0, \"ng-template\", 29);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r37 = ɵngcc0.ɵɵnextContext();\n const item_r12 = ctx_r37.$implicit;\n const rowIndex_r13 = ctx_r37.index;\n const ctx_r16 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-alt\", ctx_r16.isOdd(item_r12));\n ɵngcc0.ɵɵproperty(\"dataRowIndex\", item_r12.index)(\"dataItem\", item_r12.data)(\"logicalRowIndex\", ctx_r16.logicalRowIndex(rowIndex_r13) + 1)(\"logicalSlaveRow\", false)(\"logicalCellsCount\", 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r16.groups);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r16.logicalRowIndex(rowIndex_r13) + 1)(\"logicalColIndex\", 0)(\"dataRowIndex\", item_r12.index)(\"dataItem\", item_r12.data)(\"colIndex\", 0)(\"colSpan\", ctx_r16.allColumnsSpan + 1);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r16.columnsSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r16.detailTemplate.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(17, _c159, item_r12.data, item_r12.index, item_r12.data));\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 30);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template, 1, 0, \"td\", 26);\n} if (rf & 2) {\n const ctx_r38 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r38.groups);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 8);\n} if (rf & 2) {\n const rowIndex_r13 = ɵngcc0.ɵɵnextContext(2).index;\n const ctx_r39 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r39.logicalRowIndex(rowIndex_r13))(\"logicalColIndex\", 0);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template(rf, ctx) { }\nconst _c160 = function (a0, a1, a2, a3, a4, a5) { return { templateRef: a0, group: a1, field: a2, column: a3, aggregates: a4, $implicit: a5 }; };\nfunction TableBodyComponent_ng_template_2_tr_3_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 33);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template, 0, 0, \"ng-template\", 34);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r44 = ctx.$implicit;\n const ctx_r47 = ɵngcc0.ɵɵnextContext(2);\n const rowIndex_r13 = ctx_r47.index;\n const item_r12 = ctx_r47.$implicit;\n const ctx_r40 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r40.logicalRowIndex(rowIndex_r13))(\"logicalColIndex\", ctx_r40.logicalColIndex(column_r44));\n ɵngcc0.ɵɵattribute(\"data-skip\", ctx_r40.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction6(4, _c160, column_r44.groupFooterTemplateRef, item_r12.data, column_r44.field, column_r44, item_r12.data == null ? null : item_r12.data.aggregates, item_r12.data == null ? null : item_r12.data.aggregates));\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 31);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_3_td_2_Template, 1, 2, \"td\", 4);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_3_td_3_Template, 2, 11, \"td\", 32);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const rowIndex_r13 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r17 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r17.logicalRowIndex(rowIndex_r13))(\"logicalSlaveRow\", ctx_r17.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r17.columns.length)(\"logicalSlaveCellsCount\", ctx_r17.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r17.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r17.detailTemplate == null ? null : ctx_r17.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r17.footerColumns)(\"ngForTrackBy\", ctx_r17.trackByColumns);\n} }\nfunction TableBodyComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_0_Template, 1, 13, \"tr\", 13);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_Template, 4, 23, \"tr\", 14);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_2_Template, 5, 21, \"tr\", 15);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_3_Template, 4, 8, \"tr\", 16);\n} if (rf & 2) {\n const item_r12 = ctx.$implicit;\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.isGroup(item_r12) && ctx_r2.isParentGroupExpanded(item_r12) && ctx_r2.showGroupHeader(item_r12));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.isDataItem(item_r12) && ctx_r2.isInExpandedGroup(item_r12));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.isDataItem(item_r12) && ctx_r2.isInExpandedGroup(item_r12) && (ctx_r2.detailTemplate == null ? null : ctx_r2.detailTemplate.templateRef) && ctx_r2.detailTemplate.showIf(item_r12.data, item_r12.index) && ctx_r2.isExpanded(item_r12));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.isFooter(item_r12) && (ctx_r2.isInExpandedGroup(item_r12) || ctx_r2.showGroupFooters && ctx_r2.isParentGroupExpanded(item_r12)) && !item_r12.data.hideFooter);\n} }\nconst _c161 = [\"kendoGridCell\", \"\"];\nfunction CellComponent_ng_container_1_ng_template_1_Template(rf, ctx) { }\nfunction CellComponent_ng_container_1_ng_template_2_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const childColumn_r7 = ctx.$implicit;\n const ctx_r6 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ɵngcc0.ɵɵpipeBind3(1, 1, ctx_r6.dataItem, childColumn_r7.field, childColumn_r7.format), \" \");\n} }\nfunction CellComponent_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CellComponent_ng_container_1_ng_template_2_ng_template_0_Template, 2, 5, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.childColumns);\n} }\nfunction CellComponent_ng_container_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵtextInterpolate(ɵngcc0.ɵɵpipeBind3(1, 1, ctx_r4.dataItem, ctx_r4.column.field, ctx_r4.column.format));\n} }\nfunction CellComponent_ng_container_1_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 5);\n ɵngcc0.ɵɵelement(1, \"label\", 6);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoGridSelectionCheckbox\", ctx_r5.rowIndex);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r5.selectionCheckboxId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r5.selectionCheckboxId);\n} }\nfunction CellComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_1_ng_template_1_Template, 0, 0, \"ng-template\", 2);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_1_ng_template_2_Template, 1, 1, \"ng-template\", 3);\n ɵngcc0.ɵɵtemplate(3, CellComponent_ng_container_1_ng_template_3_Template, 2, 5, \"ng-template\", 3);\n ɵngcc0.ɵɵtemplate(4, CellComponent_ng_container_1_ng_template_4_Template, 2, 3, \"ng-template\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.column.templateRef)(\"ngTemplateOutlet\", ctx_r0.column.templateRef)(\"ngTemplateOutletContext\", ctx_r0.templateContext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.isSpanColumn);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.isBoundColumn);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.isCheckboxColumn && !ctx_r0.isNew);\n} }\nfunction CellComponent_ng_container_2_1_ng_template_0_Template(rf, ctx) { }\nfunction CellComponent_ng_container_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CellComponent_ng_container_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 9);\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r8.column.editTemplateRef)(\"ngTemplateOutletContext\", ctx_r8.editTemplateContext);\n} }\nfunction CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-numerictextbox\", 13);\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"format\", ctx_r11.format)(\"formControl\", ctx_r11.formGroup.get(ctx_r11.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-datepicker\", 13);\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"format\", ctx_r12.format)(\"formControl\", ctx_r12.formGroup.get(ctx_r12.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_input_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 14);\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"formControl\", ctx_r13.formGroup.get(ctx_r13.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_input_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 15);\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"formControl\", ctx_r14.formGroup.get(ctx_r14.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template, 1, 2, \"kendo-numerictextbox\", 10);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template, 1, 2, \"kendo-datepicker\", 10);\n ɵngcc0.ɵɵtemplate(3, CellComponent_ng_container_2_ng_container_2_input_3_Template, 1, 1, \"input\", 11);\n ɵngcc0.ɵɵtemplate(4, CellComponent_ng_container_2_ng_container_2_input_4_Template, 1, 1, \"input\", 12);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx_r9.column.editor);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"numeric\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"date\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"boolean\");\n} }\nfunction CellComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_2_1_Template, 1, 2, undefined, 7);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_ng_container_2_Template, 5, 4, \"ng-container\", 8);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.column.editTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.column.editTemplateRef);\n} }\nconst _c162 = [\"kendoGridFooter\", \"\"];\nfunction FooterComponent_ng_template_0_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 5);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-cell\", true);\n} }\nfunction FooterComponent_ng_template_0_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 5);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-cell\", true);\n} }\nfunction FooterComponent_ng_template_0_td_3_ng_template_1_Template(rf, ctx) { }\nfunction FooterComponent_ng_template_0_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 6);\n ɵngcc0.ɵɵtemplate(1, FooterComponent_ng_template_0_td_3_ng_template_1_Template, 0, 0, \"ng-template\", 7);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r5 = ctx.$implicit;\n const columnIndex_r6 = ctx.index;\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r3.logicalRowIndex)(\"logicalColIndex\", ctx_r3.logicalColumnIndex(column_r5))(\"ngClass\", column_r5.footerClass)(\"ngStyle\", column_r5.footerStyle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(5, _c150, column_r5.footerTemplateRef, ctx_r3.lockedColumnsCount + columnIndex_r6, column_r5, column_r5));\n} }\nfunction FooterComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(1, FooterComponent_ng_template_0_td_1_Template, 1, 2, \"td\", 2);\n ɵngcc0.ɵɵtemplate(2, FooterComponent_ng_template_0_td_2_Template, 1, 2, \"td\", 3);\n ɵngcc0.ɵɵtemplate(3, FooterComponent_ng_template_0_td_3_Template, 2, 10, \"td\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-footer-template\", true);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r0.logicalRowIndex)(\"logicalSlaveRow\", ctx_r0.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r0.columns.length)(\"logicalSlaveCellsCount\", ctx_r0.columns.length - ctx_r0.lockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.detailTemplate == null ? null : ctx_r0.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.columnsToRender);\n} }\nfunction ToolbarComponent_0_ng_template_0_Template(rf, ctx) { }\nfunction ToolbarComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolbarComponent_0_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.toolbarTemplateRef)(\"ngTemplateOutletContext\", ctx_r0.context);\n} }\nclass DomEventsService {\n constructor() {\n this.cellClick = new EventEmitter();\n this.cellMousedown = new EventEmitter();\n this.cellMouseup = new EventEmitter();\n this.click = new EventEmitter();\n this.keydown = new EventEmitter();\n this.focus = new EventEmitter();\n this.focusIn = new EventEmitter();\n this.focusOut = new EventEmitter();\n this.windowBlur = new EventEmitter();\n }\n}\nDomEventsService.ɵfac = function DomEventsService_Factory(t) { return new (t || DomEventsService)(); };\nDomEventsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DomEventsService, factory: DomEventsService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DomEventsService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst EMPTY_REGEX = /^\\s*$/;\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isBlank = (value) => value === null || value === undefined;\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isTruthy = (value) => !!value;\n/**\n * @hidden\n */\nconst isNullOrEmptyString = (value) => isBlank(value) || EMPTY_REGEX.test(value);\n/**\n * @hidden\n */\nconst observe = (list) => merge(of(list), list.changes);\n/**\n * @hidden\n */\nconst isUniversal = () => typeof document === 'undefined';\n/**\n * @hidden\n */\nconst isString = (value) => typeof value === 'string';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === \"number\" && !isNaN(value);\n/**\n * @hidden\n */\nconst extractFormat = (format) => {\n if (isString(format) && !isNullOrEmptyString(format) && format.startsWith('{0:')) {\n return format.slice(3, format.length - 1);\n }\n return format;\n};\n/**\n * @hidden\n */\nconst not = (fn) => (...args) => !fn.apply(null, args);\n/**\n * @hidden\n */\nconst or = (...conditions) => (value) => conditions.reduce((acc, x) => acc || x(value), false);\n/**\n * @hidden\n */\nconst and = (...conditions) => (value) => conditions.reduce((acc, x) => acc && x(value), true);\n/**\n * @hidden\n */\nconst Skip = new InjectionToken(\"Skip\"); // tslint:disable-line:variable-name\n/**\n * @hidden\n */\nconst createPromise = () => {\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = (data) => {\n resolve(data);\n return promise;\n };\n rejectFn = (data) => {\n reject(data);\n return promise;\n };\n });\n promise.resolve = resolveFn;\n promise.reject = rejectFn;\n return promise;\n};\n/** @hidden */\nconst iterator = getIterator();\n// TODO: Move to kendo-common\nfunction getIterator() {\n if (typeof Symbol === 'function' && Symbol.iterator) {\n return Symbol.iterator;\n }\n const keys = Object.getOwnPropertyNames(Map.prototype);\n const proto = Map.prototype;\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (key !== 'entries' && key !== 'size' && proto[key] === proto.entries) {\n return key;\n }\n }\n}\nconst FRAME_DURATION = 1000 / 60;\nconst wnd = typeof window !== 'undefined' ? window : {};\n/** @hidden */\nconst requestAnimationFrame = wnd.requestAnimationFrame || wnd.msRequestAnimationFrame || (callback => setTimeout(callback, FRAME_DURATION));\n/** @hidden */\nconst cancelAnimationFrame = wnd.cancelAnimationFrame || wnd.msCancelRequestAnimationFrame || clearTimeout;\n/**\n * @hidden\n */\nconst detectIE = () => {\n if (!isDocumentAvailable()) {\n return;\n }\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf('MSIE ');\n const trident = ua.indexOf('Trident/');\n return msie > 0 || trident > 0;\n};\n\n/**\n * @hidden\n */\nclass LocalDataChangesService {\n constructor() {\n this.changes = new EventEmitter();\n }\n}\nLocalDataChangesService.ɵfac = function LocalDataChangesService_Factory(t) { return new (t || LocalDataChangesService)(); };\nLocalDataChangesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: LocalDataChangesService, factory: LocalDataChangesService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalDataChangesService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass FocusRoot {\n constructor() {\n this.groups = new Set();\n }\n registerGroup(group) {\n if (this.alive) {\n this.groups.add(group);\n }\n }\n unregisterGroup(group) {\n if (this.alive) {\n this.groups.delete(group);\n }\n }\n activate() {\n if (this.alive) {\n this.groups.forEach(f => f.activate());\n }\n }\n deactivate() {\n if (this.alive) {\n this.groups.forEach(f => f.deactivate());\n }\n }\n}\nFocusRoot.ɵfac = function FocusRoot_Factory(t) { return new (t || FocusRoot)(); };\nFocusRoot.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusRoot, factory: FocusRoot.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusRoot, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst NODE_NAME_PREDICATES = {};\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst matchesClasses = (classNames) => (element) => hasClasses(element, classNames);\n/**\n * @hidden\n */\nconst matchesNodeName = (nodeName) => {\n if (!NODE_NAME_PREDICATES[nodeName]) {\n NODE_NAME_PREDICATES[nodeName] = (element) => String(element.nodeName).toLowerCase() === nodeName.toLowerCase();\n }\n return NODE_NAME_PREDICATES[nodeName];\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n/**\n * @hidden\n */\nconst contains = (parent, node, matchSelf = false) => {\n const outside = !closest(node, (child) => child === parent);\n if (outside) {\n return false;\n }\n const el = closest(node, (child) => child === node);\n return el && (matchSelf || el !== parent);\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n const hasSize = rect.width > 0 && rect.height > 0;\n const hasPosition = rect.x !== 0 && rect.y !== 0;\n // Elements can have zero size due to styling, but they will still count as visible.\n // For example, the selection checkbox has no size, but is made visible through styling.\n return (hasSize || hasPosition) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (!element.tagName) {\n return false;\n }\n const tagName = element.tagName.toLowerCase();\n const hasTabIndex = Boolean(element.getAttribute('tabIndex'));\n const focusable = !element.disabled && focusableRegex.test(tagName);\n return focusable || hasTabIndex;\n};\n/**\n * @hidden\n */\nconst isFocusableWithTabKey = (element, checkVisibility = true) => {\n if (!isFocusable(element)) {\n return false;\n }\n const tabIndex = element.getAttribute('tabIndex');\n const visible = !checkVisibility || isVisible(element);\n return visible && tabIndex !== '-1';\n};\n/**\n * @hidden\n */\nconst findElement = (node, predicate, matchSelf = true) => {\n if (!node) {\n return;\n }\n if (matchSelf && predicate(node)) {\n return node;\n }\n node = node.firstChild;\n while (node) {\n if (node.nodeType === 1) {\n const element = findElement(node, predicate);\n if (element) {\n return element;\n }\n }\n node = node.nextSibling;\n }\n};\n/**\n * @hidden\n */\nconst findFocusable = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility));\n};\n/**\n * @hidden\n */\nconst findFocusableChild = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);\n};\n/**\n * @hidden\n */\nfunction rtlScrollPosition(position, element, initial) {\n let result = position;\n if (initial < 0) {\n result = -position;\n }\n else if (initial > 0) {\n result = element.scrollWidth - element.offsetWidth - position;\n }\n return result;\n}\n\nconst isButton = matchesNodeName('button');\nconst isInputTag = matchesNodeName('input');\nconst navigableRegex = /(button|checkbox|color|file|radio|reset|submit)/i;\nconst isNavigableInput = element => isInputTag(element) && navigableRegex.test(element.type);\nconst isNavigable = element => !element.disabled && (isButton(element) || isNavigableInput(element));\n/**\n * @hidden\n */\nclass DefaultFocusableElement {\n constructor(host, renderer) {\n this.renderer = renderer;\n this.element = host.nativeElement;\n this.focusable = findFocusable(this.element, false) || this.element;\n }\n get enabled() {\n return this.focusable && !this.focusable.disabled;\n }\n get visible() {\n return this.focusable && isVisible(this.focusable);\n }\n isNavigable() {\n return this.canFocus() && isNavigable(this.element);\n }\n toggle(active) {\n this.renderer.setAttribute(this.focusable, 'tabIndex', active ? '0' : '-1');\n }\n focus() {\n if (this.focusable) {\n this.focusable.focus();\n }\n }\n canFocus() {\n return this.visible && this.enabled;\n }\n hasFocus() {\n return document.activeElement !== this.element && closest(document.activeElement, e => e === this.element);\n }\n}\n\n/**\n * @hidden\n */\nconst CELL_CONTEXT = new InjectionToken('grid-cell-context');\n/**\n * @hidden\n */\nconst EMPTY_CELL_CONTEXT = {};\n\n/**\n * A directive that controls the way focusable elements receive\n * [focus in a navigable Grid]({% slug keyboard_navigation_grid %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public readonly data: any = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }];\n * }\n * ```\n */\nclass FocusableDirective {\n constructor(cellContext, hostElement, renderer) {\n this.cellContext = cellContext;\n this.hostElement = hostElement;\n this.renderer = renderer;\n this.active = true;\n if (this.cellContext) {\n this.group = this.cellContext.focusGroup;\n }\n if (this.group) {\n this.group.registerElement(this);\n }\n }\n ngAfterViewInit() {\n if (!this.element) {\n this.element = new DefaultFocusableElement(this.hostElement, this.renderer);\n }\n if (this.group) {\n const isActive = this.group.isActive;\n this.toggle(isActive);\n }\n }\n ngOnDestroy() {\n if (this.group) {\n this.group.unregisterElement(this);\n }\n }\n /**\n * @hidden\n */\n toggle(active) {\n if (this.element && active !== this.active) {\n this.active = active;\n this.element.toggle(active);\n }\n }\n /**\n * @hidden\n */\n canFocus() {\n return this.element && this.element.canFocus();\n }\n /**\n * @hidden\n */\n isNavigable() {\n return this.element && this.element.isNavigable();\n }\n /**\n * @hidden\n */\n focus() {\n if (this.element) {\n this.element.focus();\n }\n }\n /**\n * @hidden\n */\n hasFocus() {\n return this.element && this.element.hasFocus();\n }\n /**\n * @hidden\n */\n registerElement(element) {\n this.element = element;\n }\n}\nFocusableDirective.ɵfac = function FocusableDirective_Factory(t) { return new (t || FocusableDirective)(ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nFocusableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FocusableDirective, selectors: [[\"\", \"kendoGridFocusable\", \"\"], [\"\", \"kendoGridEditCommand\", \"\"], [\"\", \"kendoGridRemoveCommand\", \"\"], [\"\", \"kendoGridSaveCommand\", \"\"], [\"\", \"kendoGridCancelCommand\", \"\"], [\"\", \"kendoGridSelectionCheckbox\", \"\"]] });\n/** @nocollapse */\nFocusableDirective.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }, { type: SkipSelf }] },\n { type: ElementRef },\n { type: Renderer2 }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFocusable]' + `,\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, null); })();\n\n/**\n * @hidden\n */\nclass GridFocusableElement {\n constructor(navigationService) {\n this.navigationService = navigationService;\n }\n focus() {\n this.navigationService.focusCell();\n }\n toggle(active) {\n this.navigationService.toggle(active);\n }\n canFocus() {\n return true;\n }\n hasFocus() {\n return this.navigationService.hasFocus();\n }\n isNavigable() {\n return false;\n }\n}\n\n/**\n * @hidden\n */\nclass NavigationCursor {\n constructor(model) {\n this.model = model;\n this.changes = new Subject();\n this.activeRow = 0;\n this.activeCol = 0;\n this.virtualCol = 0;\n this.virtualRow = 0;\n }\n get row() {\n return this.model.findRow(this.activeRow);\n }\n get cell() {\n const row = this.row;\n if (row) {\n return this.model.findCell(this.activeCol, row);\n }\n }\n get dataRowIndex() {\n const row = this.row;\n if (row) {\n return row.dataRowIndex;\n }\n return -1;\n }\n /**\n * Assumes and announces a new cursor position.\n */\n reset(rowIndex = this.activeRow, colIndex = this.activeCol, force = true) {\n if (this.activate(rowIndex, colIndex, force)) {\n this.virtualRow = rowIndex;\n this.virtualCol = colIndex;\n }\n }\n activate(rowIndex, colIndex, force) {\n if (!force && this.isActiveRange(rowIndex, colIndex)) {\n return false;\n }\n const prevColIndex = this.activeCol;\n const prevRowIndex = this.activeRow;\n this.activeCol = colIndex;\n this.activeRow = rowIndex;\n this.changes.next({\n colIndex,\n prevColIndex,\n prevRowIndex,\n rowIndex\n });\n return true;\n }\n isActiveRange(rowIndex, colIndex) {\n if (this.activeRow !== rowIndex) {\n return false;\n }\n const cell = this.cell;\n const { start, end } = this.model.cellRange(cell);\n return !Boolean(cell) || (start <= colIndex && colIndex <= end);\n }\n /**\n * Assumes a new cursor position without announcing it.\n */\n assume(rowIndex = this.activeRow, colIndex = this.activeCol) {\n this.virtualRow = rowIndex;\n this.virtualCol = colIndex;\n this.activeCol = colIndex;\n this.activeRow = rowIndex;\n }\n /**\n * Announces a current cursor position to subscribers.\n */\n announce() {\n this.changes.next({\n colIndex: this.activeCol,\n prevColIndex: this.activeCol,\n prevRowIndex: this.activeRow,\n rowIndex: this.activeRow\n });\n }\n activateVirtualCell(cell) {\n const rowRange = this.model.rowRange(cell);\n const cellRange = this.model.cellRange(cell);\n const activeCol = this.activeCol;\n const activeRow = this.activeRow;\n if (rowRange.start <= activeRow && activeRow <= rowRange.end &&\n cellRange.start <= activeCol && activeCol <= cellRange.end) {\n this.activeRow = cell.rowIndex;\n this.activeCol = cell.colIndex;\n return true;\n }\n }\n isActive(rowIndex, colIndex) {\n return this.activeCol === colIndex && this.activeRow === rowIndex;\n }\n moveUp(offset = 1) {\n return this.offsetRow(-offset);\n }\n moveDown(offset = 1) {\n return this.offsetRow(offset);\n }\n moveLeft(offset = 1) {\n return this.offsetCol(-offset);\n }\n moveRight(offset = 1) {\n return this.offsetCol(offset);\n }\n lastCellIndex(row) {\n return this.metadata.columns.leafColumnsToRender.length - 1 +\n (this.metadata.hasDetailTemplate && (!row || !row.groupItem) ? 1 : 0);\n }\n offsetCol(offset) {\n const prevRow = this.model.findRow(this.virtualRow);\n const lastIndex = this.lastCellIndex(prevRow);\n const virtualCol = this.virtualCol;\n this.virtualCol = Math.max(0, Math.min(virtualCol + offset, lastIndex));\n let nextColIndex = this.virtualCol;\n let nextRowIndex = this.virtualRow;\n let cell = this.model.findCell(this.virtualCol, prevRow);\n if (!cell && this.metadata.virtualColumns) {\n return this.activate(nextRowIndex, nextColIndex);\n }\n if (cell.colSpan > 1 && cell.colIndex <= virtualCol && virtualCol < cell.colIndex + cell.colSpan) {\n nextColIndex = offset > 0 ? Math.min(cell.colIndex + cell.colSpan, lastIndex) : Math.max(0, cell.colIndex + offset);\n const nextCell = this.model.findCell(nextColIndex, prevRow);\n if (cell !== nextCell) {\n cell = nextCell;\n this.virtualCol = cell.colIndex;\n }\n else {\n this.virtualCol = virtualCol;\n }\n }\n return this.activate(cell.rowIndex, cell.colIndex);\n }\n offsetRow(offset) {\n let nextColIndex = this.virtualCol;\n if (this.metadata && this.metadata.isVirtual) {\n const maxIndex = this.metadata.maxLogicalRowIndex;\n let nextIndex = Math.max(0, Math.min(this.activeRow + offset, maxIndex));\n if (this.metadata.hasDetailTemplate && !this.model.findRow(nextIndex)) {\n nextIndex = offset > 0 ? nextIndex + 1 : nextIndex - 1;\n nextIndex = Math.max(0, Math.min(nextIndex, maxIndex));\n }\n if (this.metadata.hasDetailTemplate && nextIndex === maxIndex) {\n if (this.model.lastRow.index !== maxIndex) {\n // Don't attempt to navigate past the last collapsed row.\n nextIndex--;\n }\n }\n const nextRow = this.model.findRow(nextIndex);\n if (nextRow) {\n // remove duplication\n let cell = this.model.findCell(this.virtualCol, nextRow);\n if (cell.rowIndex <= this.virtualRow && offset > 0 && cell.rowSpan > 1) {\n cell = this.model.findCell(this.virtualCol, this.model.findRow(cell.rowIndex + cell.rowSpan - 1 + offset));\n }\n nextIndex = cell.rowIndex;\n nextColIndex = cell.colIndex;\n }\n this.virtualRow = nextIndex;\n return this.activate(nextIndex, nextColIndex);\n }\n const nextRow = this.model.findRow(this.virtualRow + offset) || this.model.nextRow(this.virtualRow, offset);\n if (!nextRow) {\n return false;\n }\n let cell = this.model.findCell(this.virtualCol, nextRow);\n if (cell && cell.rowIndex <= this.virtualRow && offset > 0 && cell.rowSpan > 1) { // spanned cell go to next\n const nextPos = cell.rowIndex + cell.rowSpan - 1 + offset;\n cell = this.model.findCell(this.virtualCol, this.model.findRow(nextPos));\n }\n if (!cell && this.metadata.virtualColumns) {\n return this.activate(this.virtualRow + offset, this.virtualCol);\n }\n this.virtualRow = cell.rowIndex;\n return this.activate(this.virtualRow, cell.colIndex);\n }\n}\n\n/**\n * @hidden\n */\nclass ItemMap {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n get first() {\n if (this.count > 0) {\n let result;\n this.forEach(item => {\n result = item;\n return true;\n });\n return result;\n }\n }\n get last() {\n if (this.count > 0) {\n const keys = Object.keys(this.items);\n return this.items[keys[keys.length - 1]];\n }\n }\n removeItem(key) {\n if (this.items[key]) {\n delete this.items[key];\n this.count--;\n }\n }\n setItem(key, item) {\n if (!this.items[key]) {\n this.count++;\n }\n this.items[key] = item;\n }\n getItem(key) {\n return this.items[key];\n }\n toArray() {\n const result = [];\n this.forEach(item => {\n result.push(item);\n });\n return result;\n }\n forEach(callback) {\n for (let key in this.items) {\n if (this.items.hasOwnProperty(key) && callback(this.items[key])) {\n return this.items[key];\n }\n }\n }\n find(callback) {\n return this.forEach(callback);\n }\n}\n\n/**\n * @hidden\n *\n * Contains information for the currently rendered rows and cells.\n */\nclass NavigationModel {\n constructor() {\n this.rows = new ItemMap();\n }\n get firstRow() {\n return this.rows.first;\n }\n get lastRow() {\n return this.rows.last;\n }\n registerCell(cell) {\n const row = this.rows.getItem(cell.logicalRowIndex);\n if (!row) {\n return;\n }\n const colIndex = cell.logicalColIndex;\n const modelCell = {\n uid: cell.uid,\n colIndex,\n rowIndex: row.index,\n colSpan: cell.colSpan,\n rowSpan: cell.rowSpan,\n detailExpandCell: cell.detailExpandCell,\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex,\n focusGroup: cell.focusGroup\n };\n row.cells.setItem(colIndex, modelCell);\n if (cell.groupItem) {\n row.groupItem = cell.groupItem;\n }\n return modelCell;\n }\n unregisterCell(index, rowIndex, cell) {\n const row = this.rows.getItem(rowIndex);\n if (row) {\n const match = row.cells.getItem(index);\n if (match && match.uid === cell.uid) {\n row.cells.removeItem(index);\n }\n }\n }\n registerRow(row) {\n const modelRow = {\n uid: row.uid,\n index: row.logicalRowIndex,\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex,\n cells: new ItemMap()\n };\n this.rows.setItem(row.logicalRowIndex, modelRow);\n }\n updateRow(row) {\n const current = this.rows.getItem(row.logicalRowIndex);\n if (current) {\n Object.assign(current, {\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex\n });\n }\n }\n unregisterRow(index, row) {\n const match = this.rows.getItem(index);\n if (match && match.uid === row.uid) {\n this.rows.removeItem(index);\n }\n }\n cellRange(cell) {\n if (cell) {\n const start = cell.colIndex;\n const end = cell.colIndex + (cell.colSpan || 1) - 1;\n return {\n start,\n end\n };\n }\n return {};\n }\n rowRange(cell) {\n if (cell) {\n const start = cell.rowIndex;\n const end = cell.rowIndex + (cell.rowSpan || 1) - 1;\n return {\n start,\n end\n };\n }\n return {};\n }\n nextRow(rowIndex, offset) {\n const rows = this.rows.toArray();\n const row = this.rows.getItem(rowIndex);\n const position = rows.indexOf(row);\n const next = rows[position + offset];\n return next;\n }\n findRow(index) {\n return this.rows.getItem(index);\n }\n findCell(index, row) {\n if (!row) {\n return;\n }\n const rowIndex = row.index;\n let cell = row.cells.getItem(index);\n let currentIndex = rowIndex;\n while (!cell && row) {\n row = this.rows.getItem(currentIndex);\n cell = this.rowCell(index, row);\n currentIndex--;\n }\n if (cell && rowIndex <= row.index + (cell.rowSpan || 1) - 1) {\n return cell;\n }\n }\n rowCell(index, row) {\n if (!row || !row.cells.count) {\n return;\n }\n const firstCell = row.cells.first;\n let cell, currentIndex = index;\n while (!cell && currentIndex >= firstCell.colIndex) {\n cell = row.cells.getItem(currentIndex);\n currentIndex--;\n }\n if (cell && index <= cell.colIndex + (cell.colSpan || 1) - 1) {\n return cell;\n }\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the `cellClose` event.\n */\nclass CellCloseEvent extends PreventableEvent {\n constructor(options) {\n super();\n /**\n * @hidden\n */\n this.action = 'cellClose';\n Object.assign(this, options);\n }\n}\n\n/**\n * @hidden\n */\nconst isEqual = (index) => (item) => item.index === index;\n/**\n * @hidden\n */\nconst isNotEqual = (index) => (item) => item.index !== index;\n/**\n * @hidden\n */\nconst isNewRow = (index) => index === -1 || index === undefined;\n/**\n * @hidden\n */\nclass EditService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new EventEmitter();\n this.editedIndices = [];\n this.keepEditCell = false;\n this.closingCell = false;\n this.changedSource = new Subject();\n this.changed = this.changedSource.asObservable().pipe(switchMap(() => this.ngZone.onStable.asObservable().pipe(take(1))));\n }\n editRow(index, group = undefined) {\n this.editedIndices.push({ index, group });\n this.onChanged();\n }\n addRow(group) {\n this.newItemGroup = { group };\n this.onChanged();\n }\n editCell(rowIndex, column, group) {\n if (isNewRow(rowIndex) || column.editable === false || !(column.editTemplate || column.field)) {\n return;\n }\n this.preventCellClose();\n if (!this.closeCell()) {\n this.editRow(rowIndex, group);\n this.column = column;\n this.onChanged();\n }\n }\n isEditing() {\n return this.editedIndices.length > 0;\n }\n isEditingCell() {\n return this.isEditing() && this.column !== undefined;\n }\n get hasNewItem() {\n return isPresent(this.newItemGroup);\n }\n get newDataItem() {\n if (this.hasNewItem) {\n return this.newItemGroup.group.value;\n }\n return {};\n }\n close(index) {\n if (isNewRow(index)) {\n this.newItemGroup = undefined;\n return;\n }\n this.editedIndices = this.editedIndices.filter(isNotEqual(index));\n delete this.column;\n this.onChanged();\n }\n closeCell(originalEvent) {\n if (this.column && !this.closingCell) {\n return this.ngZone.run(() => {\n const { index, group } = this.editedIndices[0];\n const args = new CellCloseEvent({\n column: this.column,\n formGroup: group,\n originalEvent: originalEvent,\n rowIndex: index\n });\n this.closingCell = true;\n this.changes.emit(args);\n this.closingCell = false;\n if (!args.isDefaultPrevented()) {\n this.cancelCell();\n }\n return args.isDefaultPrevented();\n });\n }\n }\n cancelCell() {\n if (this.column) {\n this.editedIndices = [];\n delete this.column;\n this.onChanged();\n }\n }\n shouldCloseCell() {\n return this.column && !this.keepEditCell;\n }\n preventCellClose() {\n this.ngZone.runOutsideAngular(() => {\n window.clearTimeout(this.keepCellTimeout);\n this.keepEditCell = true;\n this.keepCellTimeout = window.setTimeout(() => {\n this.keepEditCell = false;\n }, 0); // tslint:disable-line:align\n });\n }\n context(index) {\n if (isNewRow(index)) {\n return this.newItemGroup;\n }\n return this.findByIndex(index);\n }\n columnContext(index, column) {\n if (isNewRow(index)) {\n return this.newItemGroup;\n }\n if (!this.column || column === this.column) {\n return this.findByIndex(index);\n }\n }\n isEdited(index) {\n if (isNewRow(index) && isPresent(this.newItemGroup)) {\n return true;\n }\n return !this.column && isPresent(this.findByIndex(index));\n }\n hasEdited(index) {\n return isPresent(this.context(index));\n }\n isEditedColumn(index, column) {\n if (this.column && this.column === column) {\n return isPresent(this.findByIndex(index));\n }\n return false;\n }\n beginEdit(rowIndex) {\n this.changes.emit({ action: 'edit', rowIndex });\n }\n beginAdd() {\n this.changes.emit({ action: 'add' });\n }\n endEdit(rowIndex) {\n const { group: formGroup } = this.context(rowIndex);\n this.changes.emit({ action: 'cancel', rowIndex, formGroup, isNew: isNewRow(rowIndex) });\n }\n save(rowIndex) {\n const { group: formGroup } = this.context(rowIndex);\n this.changes.emit({ action: 'save', rowIndex, formGroup, isNew: isNewRow(rowIndex) });\n }\n remove(rowIndex) {\n this.changes.emit({ action: 'remove', rowIndex });\n }\n findByIndex(index) {\n return this.editedIndices.find(isEqual(index));\n }\n onChanged() {\n this.ngZone.runOutsideAngular(() => {\n this.changedSource.next();\n });\n }\n}\nEditService.ɵfac = function EditService_Factory(t) { return new (t || EditService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nEditService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: EditService, factory: EditService.ɵfac });\n/** @nocollapse */\nEditService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ExpandStateService {\n constructor(isInitiallyCollapsed) {\n this.isInitiallyCollapsed = isInitiallyCollapsed;\n this.changes = new Subject();\n this.rowState = new Set();\n }\n toggleRow(index, dataItem) {\n const found = this.rowState.has(index);\n const expand = !this.isInitiallyCollapsed ? found : !found;\n const prevented = this.emitEvent({ dataItem, expand, index });\n if (prevented) {\n return;\n }\n if (found) {\n this.rowState.delete(index);\n }\n else {\n this.rowState.add(index);\n }\n }\n isExpanded(index) {\n const found = this.rowState.has(index);\n return this.isInitiallyCollapsed ? found : !found;\n }\n reset() {\n this.rowState.clear();\n }\n emitEvent(args) {\n this.changes.next(args);\n return false;\n }\n}\n\nconst removeLast = groupIndex => groupIndex.lastIndexOf(\"_\") > -1\n ? groupIndex.slice(0, groupIndex.lastIndexOf(\"_\"))\n : \"\";\nconst isChildIndex = (targetIndex, parentIndex) => parentIndex !== targetIndex && targetIndex.startsWith(parentIndex);\n/**\n * @hidden\n */\nclass GroupsService extends ExpandStateService {\n constructor(isCollapsed = false) {\n super(isCollapsed);\n }\n isInExpandedGroup(groupIndex, skipSelf = true) {\n if (skipSelf) {\n groupIndex = removeLast(groupIndex);\n }\n let expanded = true;\n while (groupIndex && expanded) {\n expanded = this.isExpanded(groupIndex);\n groupIndex = removeLast(groupIndex);\n }\n return expanded;\n }\n expandChildren(parentIndex) {\n this.rowState.forEach(index => isChildIndex(index, parentIndex) && this.rowState.delete(index));\n }\n}\nGroupsService.ɵfac = function GroupsService_Factory(t) { return new (t || GroupsService)(ɵngcc0.ɵɵinject(Skip, 8)); };\nGroupsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: GroupsService, factory: GroupsService.ɵfac });\n/** @nocollapse */\nGroupsService.ctorParameters = () => [\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [Skip,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupsService, [{\n type: Injectable\n }], function () { return [{ type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [Skip]\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PagerContextService {\n constructor() {\n this.changes = new Subject();\n this.pageChange = new Subject();\n }\n get currentPage() {\n return this.skip / this.pageSize;\n }\n notifyChanges(changes) {\n this.total = changes.total;\n this.pageSize = changes.pageSize;\n this.skip = changes.skip;\n this.changes.next(changes);\n }\n changePage(page) {\n this.pageChange.next({ skip: page * this.pageSize, take: this.pageSize });\n }\n changePageSize(value) {\n this.pageChange.next({ skip: 0, take: value });\n }\n nextPage() {\n const nextPage = this.currentPage + 1;\n if (nextPage * this.pageSize < this.total) {\n this.changePage(nextPage);\n }\n }\n prevPage() {\n const prevPage = this.currentPage - 1;\n if (prevPage * this.pageSize >= 0) {\n this.changePage(prevPage);\n }\n }\n}\nPagerContextService.ɵfac = function PagerContextService_Factory(t) { return new (t || PagerContextService)(); };\nPagerContextService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PagerContextService, factory: PagerContextService.ɵfac });\n\n\n/**\n * Arguments for the `detailCollapse` event.\n */\nclass DetailCollapseEvent extends PreventableEvent {\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * Arguments for the `detailExpand` event.\n */\nclass DetailExpandEvent extends PreventableEvent {\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * @hidden\n */\nclass DetailsService {\n constructor() {\n this.changes = new Subject();\n this.rowState = new Set();\n }\n ngOnDestroy() {\n this.rowState.clear();\n }\n isExpanded(index, dataItem) {\n if (this.userCallback) {\n return this.userCallback({ index, dataItem });\n }\n return this.rowState.has(index);\n }\n toggleRow(index, dataItem) {\n if (this.isExpanded(index, dataItem)) {\n this.collapseRow(index, dataItem);\n }\n else {\n this.expandRow(index, dataItem);\n }\n }\n expandRow(index, dataItem) {\n const prevented = this.emitEvent({ dataItem, index, expand: true });\n if (!prevented && !this.userCallback) {\n this.rowState.add(index);\n }\n }\n collapseRow(index, dataItem) {\n const prevented = this.emitEvent({ dataItem, index, expand: false });\n if (!prevented && !this.userCallback) {\n this.rowState.delete(index);\n }\n }\n emitEvent(args) {\n const eventArg = new (args.expand ? DetailExpandEvent : DetailCollapseEvent)(args);\n this.changes.next(eventArg);\n return eventArg.isDefaultPrevented();\n }\n}\nDetailsService.ɵfac = function DetailsService_Factory(t) { return new (t || DetailsService)(); };\nDetailsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DetailsService, factory: DetailsService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DetailsService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ScrollRequestService {\n constructor() {\n this.requests = new Subject();\n }\n scrollTo(request) {\n this.requests.next(request);\n }\n}\nScrollRequestService.ɵfac = function ScrollRequestService_Factory(t) { return new (t || ScrollRequestService)(); };\nScrollRequestService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollRequestService, factory: ScrollRequestService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollRequestService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst isInSameGrid = (element, gridElement) => closest(element, matchesNodeName('kendo-grid')) === gridElement;\nconst matchHeaderCell = matchesNodeName('th');\nconst matchDataCell = matchesNodeName('td');\nconst matchFooterCell = matchesNodeName('.k-grid-footer td');\nconst matchCell = (element) => matchDataCell(element) || matchHeaderCell(element) || matchFooterCell(element);\nconst gridCell = (element, gridElement) => {\n let target = closest(element, matchCell);\n while (target && !isInSameGrid(target, gridElement)) {\n target = closest(target.parentElement, matchCell);\n }\n return target;\n};\nconst targetCell = (target, gridElement) => {\n const cell = gridCell(target, gridElement);\n const row = closest(cell, matchesNodeName('tr'));\n if (cell && row) {\n let rowIndex = row.getAttribute('aria-rowindex');\n rowIndex = rowIndex ? parseInt(rowIndex, 10) - 1 : null;\n let colIndex = cell.getAttribute('aria-colindex');\n colIndex = colIndex ? parseInt(colIndex, 10) - 1 : null;\n if (rowIndex !== null && colIndex !== null) {\n return { colIndex, rowIndex, element: cell };\n }\n }\n};\nconst isArrowKey = keyCode => keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight ||\n keyCode === Keys.ArrowUp || keyCode === Keys.ArrowDown;\nconst isNavigationKey = keyCode => isArrowKey(keyCode) ||\n keyCode === Keys.PageUp || keyCode === Keys.PageDown ||\n keyCode === Keys.Home || keyCode === Keys.End;\nconst isInput = matchesNodeName('input');\nconst isTextInput = element => element && isInput(element) && element.type.toLowerCase() === 'text';\nconst isPrintableCharacter = (str) => str.length === 1 && str.match(/\\S/);\n/**\n * @hidden\n */\nclass NavigationViewport {\n constructor(firstItemIndex, lastItemIndex) {\n this.firstItemIndex = firstItemIndex;\n this.lastItemIndex = lastItemIndex;\n }\n containsRow(dataRowIndex) {\n const headerRow = dataRowIndex < 0;\n return headerRow || (dataRowIndex >= this.firstItemIndex && dataRowIndex <= this.lastItemIndex);\n }\n intersects(start, end) {\n return (start <= this.firstItemIndex && this.lastItemIndex <= end) ||\n (this.firstItemIndex <= start && start <= this.lastItemIndex) ||\n (this.firstItemIndex <= end && end <= this.lastItemIndex);\n }\n}\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(zone, domEvents, pagerContextService, scrollRequestService, groupsService, detailsService, focusRoot, editService, cd, localization, focusableParent) {\n this.zone = zone;\n this.domEvents = domEvents;\n this.pagerContextService = pagerContextService;\n this.scrollRequestService = scrollRequestService;\n this.groupsService = groupsService;\n this.detailsService = detailsService;\n this.focusRoot = focusRoot;\n this.editService = editService;\n this.cd = cd;\n this.localization = localization;\n this.focusableParent = focusableParent;\n this.cellKeydown = new EventEmitter();\n this.activeRowIndex = 0;\n this.alive = false;\n this.active = true;\n this.mode = 0 /* Standby */;\n this.model = new NavigationModel();\n this.cursor = new NavigationCursor(this.model);\n this.changes = this.cursor.changes;\n }\n set metadata(value) {\n this.meta = value;\n this.cursor.metadata = value;\n }\n get metadata() {\n return this.meta;\n }\n get enabled() {\n return this.alive;\n }\n get activeCell() {\n if (this.mode !== 0 /* Standby */) {\n return this.cursor.cell;\n }\n }\n get activeRow() {\n if (this.mode !== 0 /* Standby */) {\n return Object.assign({}, this.cursor.row, {\n cells: this.cursor.row.cells.toArray()\n });\n }\n }\n get activeDataRow() {\n return Math.max(0, this.activeRowIndex - this.meta.headerRows);\n }\n init(meta) {\n this.alive = true;\n this.focusRoot.alive = true;\n this.metadata = meta;\n const onStableSubscriber = (...operators) => (args) => this.zone.isStable ?\n from([true]).pipe(map(() => args)) :\n this.zone.onStable.pipe(take(1), map(() => args), ...operators);\n const onStable = onStableSubscriber();\n this.subs = new Subscription();\n this.subs.add(this.cursor.changes\n .subscribe(args => this.onCursorChanges(args)));\n this.subs.add(this.domEvents.focus.pipe(switchMap(onStable))\n .subscribe((args) => this.navigateTo(args.target)));\n this.subs.add(this.domEvents.focusOut.pipe(filter(() => this.mode !== 0 /* Standby */), switchMap(onStableSubscriber(takeUntil(this.domEvents.focus))))\n .subscribe(args => this.onFocusOut(args)));\n this.subs.add(this.domEvents.windowBlur.pipe(filter(() => this.mode !== 0 /* Standby */))\n .subscribe(() => this.onWindowBlur()));\n this.subs.add(\n // Closing the editor will not always trigger focusout in Firefox.\n // To get around this, we ensure that the cell is closed after editing.\n this.editService.changes.pipe(filter(e => e.action !== 'edit' && this.mode === 2 /* Content */), filter((e) => e.action === 'cellClose' && !e.prevented), switchMap(onStable))\n .subscribe(() => this.leaveCell()));\n this.subs.add(this.pagerContextService.pageChange\n .subscribe(() => this.cursor.reset(0, 0)));\n this.subs.add(this.domEvents.keydown\n .subscribe(args => this.onKeydown(args)));\n this.subs.add(this.domEvents.keydown.pipe(filter(args => args.keyCode === Keys.Tab && this.mode === 2 /* Content */), switchMapTo(this.domEvents.focusOut.pipe(takeUntil(\n // Timeout if focusOut doesn't fire very soon\n interval(0).pipe(take(1))))))\n .subscribe(() => this.onTabout()));\n if (this.focusableParent) {\n const element = new GridFocusableElement(this);\n this.focusableParent.registerElement(element);\n }\n this.deactivateElements();\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n this.alive = false;\n }\n registerCell(cell) {\n if (cell.logicalRowIndex !== this.pendingRowIndex) {\n const modelCell = this.model.registerCell(cell);\n if (this.virtualCell && this.cursor.activateVirtualCell(modelCell)) {\n this.virtualCell = false;\n }\n }\n }\n registerCellOnCurrentRow(cell) {\n if (cell.logicalRowIndex === this.pendingRowIndex) {\n this.model.registerCell(cell);\n }\n }\n unregisterCell(index, rowIndex, cell) {\n this.model.unregisterCell(index, rowIndex, cell);\n }\n registerRow(row) {\n this.model.registerRow(row);\n this.pendingRowIndex = row.logicalRowIndex;\n }\n updateRow(row) {\n this.model.updateRow(row);\n }\n unregisterRow(index, row) {\n this.model.unregisterRow(index, row);\n }\n isCellFocusable(cell) {\n return this.alive &&\n this.active &&\n this.mode !== 2 /* Content */ &&\n this.cursor.isActive(cell.logicalRowIndex, cell.logicalColIndex);\n }\n isCellFocused(cell) {\n return this.mode === 1 /* Cursor */ && this.isCellFocusable(cell);\n }\n navigateTo(el) {\n if (!this.alive) {\n return;\n }\n const cell = targetCell(el, this.meta.gridElement.nativeElement);\n if (!cell) {\n return;\n }\n const oldMode = this.mode;\n const focusInCell = contains(cell.element, document.activeElement);\n const focusInActiveRowContent = this.mode === 2 /* Content */ &&\n this.activeRowIndex === cell.rowIndex &&\n el !== cell.element;\n if (focusInCell) {\n this.mode = 2 /* Content */;\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n this.activateRow();\n }\n else if (!focusInActiveRowContent) {\n this.mode = 1 /* Cursor */;\n this.deactivateElements();\n const alreadyActive = this.cursor.isActive(cell.rowIndex, cell.colIndex);\n const isCursor = oldMode === 1 /* Cursor */ && alreadyActive;\n if (!isCursor) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n }\n }\n }\n tryFocus(el) {\n this.activateElements();\n const focusable = findFocusableChild(el);\n if (focusable) {\n const cell = targetCell(focusable, this.meta.gridElement.nativeElement);\n if (cell) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n this.deactivateElements();\n this.enterCell();\n }\n focusable.focus();\n }\n else {\n this.deactivateElements();\n }\n return !!focusable;\n }\n needsViewport() {\n return this.meta && this.meta.isVirtual;\n }\n setViewport(firstItemIndex, lastItemIndex) {\n this.viewport = new NavigationViewport(firstItemIndex, lastItemIndex);\n if (this.meta && this.meta.isVirtual && this.activeDataRow > -1) {\n const dataRowIndex = this.activeDataRow;\n const ahead = firstItemIndex - dataRowIndex;\n const behind = dataRowIndex - lastItemIndex;\n if (ahead > 0) {\n this.cursor.reset(firstItemIndex + this.meta.headerRows);\n }\n else if (behind > 0) {\n this.cursor.reset(lastItemIndex - this.meta.headerRows);\n }\n }\n }\n setColumnViewport(firstItemIndex, lastItemIndex) {\n this.columnViewport = new NavigationViewport(firstItemIndex, lastItemIndex);\n }\n focusCell(rowIndex = undefined, colIndex = undefined) {\n this.mode = 1 /* Cursor */;\n this.cursor.reset(rowIndex, colIndex);\n return this.activeCell;\n }\n focusCellByElement(el) {\n const cell = targetCell(el, this.meta.gridElement.nativeElement);\n if (cell) {\n return this.focusCell(cell.rowIndex, cell.colIndex);\n }\n }\n focusNextCell(wrap = true) {\n return this.focusAdjacentCell(true, wrap);\n }\n focusPrevCell(wrap = true) {\n return this.focusAdjacentCell(false, wrap);\n }\n toggle(active) {\n this.active = active;\n this.cursor.announce();\n }\n hasFocus() {\n return this.mode === 1 /* Cursor */ || this.mode === 2 /* Content */;\n }\n autoFocusCell(start, end) {\n return !this.meta.virtualColumns || end < this.meta.columns.lockedLeafColumns.length || this.columnViewport.intersects(start, end);\n }\n focusAdjacentCell(fwd, wrap) {\n this.focusCell();\n let success = fwd ? this.moveCursorFwd() : this.moveCursorBwd();\n if (wrap && !success) {\n success = fwd ? this.cursor.moveDown(1) : this.cursor.moveUp(1);\n if (success) {\n const row = this.cursor.row;\n const colIdx = fwd ? 0 : this.cursor.lastCellIndex(row);\n this.cursor.reset(row.index, colIdx);\n }\n }\n if (success) {\n return this.activeCell;\n }\n else {\n this.mode = 0 /* Standby */;\n this.cursor.announce();\n }\n return null;\n }\n enterCell() {\n const cell = this.cursor.cell;\n if (!cell) {\n return;\n }\n const group = cell.focusGroup;\n const focusable = group && group.canFocus();\n this.mode = focusable ? 2 /* Content */ : 1 /* Cursor */;\n this.cursor.announce();\n if (focusable) {\n this.activateRow();\n group.focus();\n }\n }\n leaveCell() {\n const cell = this.cursor.cell;\n if (!cell) {\n return;\n }\n const group = cell.focusGroup;\n const focusable = group && group.canFocus();\n if (!focusable) {\n this.deactivateElements();\n }\n this.mode = 1 /* Cursor */;\n this.cursor.announce();\n }\n activateElements() {\n this.focusRoot.activate();\n }\n deactivateElements() {\n this.focusRoot.deactivate();\n }\n activateRow() {\n this.cursor.row.cells\n .forEach(cell => cell.focusGroup && cell.focusGroup.activate());\n }\n moveCursorFwd() {\n return this.localization.rtl ? this.cursor.moveLeft() : this.cursor.moveRight();\n }\n moveCursorBwd() {\n return this.localization.rtl ? this.cursor.moveRight() : this.cursor.moveLeft();\n }\n onCursorKeydown(args) {\n let preventDefault = false;\n const modifier = args.ctrlKey || args.metaKey;\n const step = modifier ? 5 : 1;\n if (!this.onCellKeydown(args)) {\n return;\n }\n const row = this.cursor.row;\n switch (args.keyCode) {\n case Keys.ArrowDown:\n preventDefault = this.cursor.moveDown(step);\n break;\n case Keys.ArrowUp:\n preventDefault = this.cursor.moveUp(step);\n break;\n case Keys.ArrowRight:\n preventDefault = this.moveCursorFwd();\n break;\n case Keys.ArrowLeft:\n preventDefault = this.moveCursorBwd();\n break;\n case Keys.PageDown:\n if (this.metadata.isVirtual && this.viewport) {\n let nextItemIndex = this.meta.headerRows + this.viewport.lastItemIndex + 1;\n if (this.metadata.hasDetailTemplate) {\n nextItemIndex++;\n }\n nextItemIndex = Math.min(this.meta.maxLogicalRowIndex, nextItemIndex);\n this.cursor.reset(nextItemIndex);\n preventDefault = true;\n }\n else if (this.metadata.hasPager) {\n this.zone.run(() => this.pagerContextService.nextPage());\n preventDefault = true;\n }\n break;\n case Keys.PageUp:\n if (this.metadata.isVirtual && this.viewport) {\n let viewportSize = this.viewport.lastItemIndex - this.viewport.firstItemIndex;\n let firstItemIndex = this.viewport.firstItemIndex;\n let nextItemIndex = Math.max(this.meta.headerRows, firstItemIndex - viewportSize - 1);\n this.cursor.reset(nextItemIndex);\n preventDefault = true;\n }\n else if (this.metadata.hasPager) {\n this.zone.run(() => this.pagerContextService.prevPage());\n preventDefault = true;\n }\n break;\n case Keys.Home:\n if (modifier) {\n if (this.meta.isVirtual) {\n this.cursor.reset(this.meta.headerRows, 0, false);\n }\n else {\n this.cursor.reset(this.model.firstRow.index, 0, false);\n }\n }\n else {\n this.cursor.reset(row.index, 0, false);\n }\n preventDefault = true;\n break;\n case Keys.End:\n if (modifier) {\n if (this.meta.isVirtual) {\n let lastRowIndex = this.meta.maxLogicalRowIndex;\n if (this.meta.hasDetailTemplate) {\n lastRowIndex--;\n }\n this.cursor.reset(lastRowIndex, this.cursor.lastCellIndex(), false);\n }\n else {\n this.cursor.reset(this.model.lastRow.index, this.cursor.lastCellIndex(this.model.lastRow), false);\n }\n }\n else {\n const lastIndex = this.cursor.lastCellIndex(row);\n const cell = this.model.findCell(lastIndex, row);\n if (cell) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n }\n else {\n this.cursor.reset(row.index, lastIndex);\n }\n }\n preventDefault = true;\n break;\n case Keys.Enter:\n case Keys.F2:\n const groupItem = row.groupItem;\n if (groupItem) {\n this.zone.run(() => this.groupsService.toggleRow(groupItem.index, groupItem.data));\n }\n else if (this.cursor.cell.detailExpandCell) {\n this.zone.run(() => this.detailsService.toggleRow(row.dataRowIndex, row.dataItem));\n }\n else {\n this.enterCell();\n if (!this.cursor.cell.focusGroup.isNavigable()) {\n preventDefault = true;\n }\n }\n break;\n default:\n if (!args.ctrlKey && !args.altKey && isPrintableCharacter(args.key)) {\n this.enterCell();\n }\n }\n if (preventDefault) {\n args.preventDefault();\n }\n }\n onContentKeydown(args) {\n if (!this.onCellKeydown(args)) {\n return;\n }\n const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.srcElement);\n if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {\n this.leaveCell();\n this.cursor.reset();\n args.stopPropagation();\n }\n else if (isNavigationKey(args.keyCode) && this.cursor.cell.focusGroup.isNavigable()) {\n this.onCursorKeydown(args);\n if (args.defaultPrevented) {\n this.leaveCell();\n }\n }\n }\n onCellKeydown(args) {\n if (this.editService.isEditingCell()) {\n const confirm = args.keyCode === Keys.Enter;\n const cancel = args.keyCode === Keys.Escape;\n const navigate = isNavigationKey(args.keyCode);\n if (confirm) {\n this.editService.closeCell(args);\n }\n else if (cancel) {\n this.editService.cancelCell();\n this.cd.detectChanges();\n }\n else if (navigate) {\n return false;\n }\n }\n this.cellKeydown.emit(args);\n return true;\n }\n onCursorChanges(args) {\n this.activeRowIndex = args.rowIndex;\n const dataRowIndex = this.activeDataRow;\n if (this.meta && (this.meta.isVirtual && this.viewport &&\n !this.viewport.containsRow(dataRowIndex) && dataRowIndex > -1)) {\n this.scrollRequestService.scrollTo({ row: dataRowIndex });\n }\n if (this.meta.virtualColumns && args.colIndex >= this.meta.columns.lockedLeafColumns.length) {\n const cell = this.activeCell;\n const { start, end } = this.model.cellRange(cell);\n if (!cell) {\n this.virtualCell = true;\n }\n if ((!cell && this.mode !== 0 /* Standby */) || (cell && !this.columnViewport.intersects(start, end))) {\n this.scrollRequestService.scrollTo({ column: args.colIndex - (this.metadata.hasDetailTemplate ? 1 : 0) });\n }\n }\n }\n onFocusOut(args) {\n if (isVisible(args.target)) {\n this.mode = 0 /* Standby */;\n }\n else {\n // Focused target is no longer visible,\n // reset to cursor mode and recapture focus.\n this.mode = 1 /* Cursor */;\n }\n this.deactivateElements();\n this.cursor.announce();\n }\n onWindowBlur() {\n this.mode = 0 /* Standby */;\n this.deactivateElements();\n this.cursor.announce();\n }\n onKeydown(args) {\n if (this.mode === 1 /* Cursor */) {\n this.onCursorKeydown(args);\n }\n else if (this.mode === 2 /* Content */) {\n this.onContentKeydown(args);\n }\n }\n onTabout() {\n // Tabbed out of the last focusable content element\n // reset to cursor mode and recapture focus.\n if (this.cursor.cell.focusGroup.isNavigable()) {\n // Unless the cell has a single focusable element,\n // otherwise we'd return to Content mode and enter an endless loop\n return;\n }\n this.leaveCell();\n this.cursor.reset();\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(PagerContextService), ɵngcc0.ɵɵinject(ScrollRequestService), ɵngcc0.ɵɵinject(GroupsService), ɵngcc0.ɵɵinject(DetailsService), ɵngcc0.ɵɵinject(FocusRoot), ɵngcc0.ɵɵinject(EditService), ɵngcc0.ɵɵinject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵinject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵinject(FocusableDirective, 8)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: NgZone },\n { type: DomEventsService },\n { type: PagerContextService },\n { type: ScrollRequestService },\n { type: GroupsService },\n { type: DetailsService },\n { type: FocusRoot },\n { type: EditService },\n { type: ChangeDetectorRef },\n { type: LocalizationService },\n { type: FocusableDirective, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: DomEventsService }, { type: PagerContextService }, { type: ScrollRequestService }, { type: GroupsService }, { type: DetailsService }, { type: FocusRoot }, { type: EditService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }, { type: FocusableDirective, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass SelectionService {\n constructor(domEvents, localDataChangesService, navigationService) {\n this.domEvents = domEvents;\n this.localDataChangesService = localDataChangesService;\n this.navigationService = navigationService;\n this.changes = new EventEmitter();\n this.lastSelectionStartIndex = 0;\n this.currentSelection = [];\n this.selectAllChecked = false;\n this.active = false;\n this.dragging = false;\n this.addSubscriptions();\n }\n get enableMarquee() {\n const checkboxOnly = this.settings && typeof this.settings === 'object' && this.settings.checkboxOnly;\n if (!this.settings || checkboxOnly) {\n return false;\n }\n const selectableSettings = this.settings.selectable;\n const dragAndMultiple = typeof (selectableSettings) === 'object' &&\n isPresent(selectableSettings) &&\n selectableSettings.mode === 'multiple' &&\n selectableSettings.enabled !== false &&\n !selectableSettings.checkboxOnly &&\n selectableSettings.drag;\n return this.active && dragAndMultiple;\n }\n init(settings) {\n this.settings = settings;\n this.currentSelection = [];\n if (settings.selectable && settings.selectable.enabled !== false) {\n const iterator$$1 = this.getIterator();\n this._selectAllState = true;\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\") {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n if (settings.rowSelected(rowArgs)) {\n this.currentSelection[item.value.index] = rowArgs;\n }\n else {\n this._selectAllState = undefined;\n }\n }\n item = iterator$$1.next();\n }\n if (this.currentSelection.length === 0) {\n this._selectAllState = false;\n }\n }\n }\n isSelected(index) {\n if (this.settings && this.active) {\n return this.options.enabled && isPresent(this.currentSelection[index]);\n }\n }\n handleClick(item, event) {\n if (this.dragging) {\n this.dragging = false;\n return;\n }\n let ev;\n const ctrlKey = event.ctrlKey || event.metaKey;\n if (this.options.mode === \"single\" && ctrlKey && this.isSelected(item.index)) {\n ev = this.toggle(item);\n }\n else if (this.options.mode === \"multiple\") {\n if (ctrlKey && !event.shiftKey) {\n ev = this.toggle(item);\n }\n else if (event.shiftKey) {\n ev = this.addAllTo(item, ctrlKey);\n }\n }\n if (!isPresent(ev)) {\n ev = this.select(item);\n this.currentSelection[item.index] = {\n dataItem: item.data,\n index: item.index\n };\n }\n if (!ev.selectedRows.length && !ev.deselectedRows.length) {\n return;\n }\n ev.ctrlKey = ctrlKey;\n ev.shiftKey = event.shiftKey;\n this.changes.emit(ev);\n }\n toggle(item) {\n let selectedRows = [];\n let deselectedRows = [];\n this.lastSelectionStartIndex = item.index;\n const rowArgs = { dataItem: item.data, index: item.index };\n if (this.isSelected(item.index)) {\n deselectedRows.push(rowArgs);\n }\n else {\n selectedRows.push(rowArgs);\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n toggleByIndex(index) {\n const iterator$$1 = this.getIterator();\n if (this.selectAllChecked && this.isSelected(index)) {\n this.selectAllChecked = false;\n }\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.index === index) {\n const itemToToggle = {\n data: item.value.data,\n index: item.value.index\n };\n if (this.isSelected(index) || this.options.mode === \"multiple\") {\n return this.toggle(itemToToggle);\n }\n else {\n return this.select(itemToToggle);\n }\n }\n item = iterator$$1.next();\n }\n }\n select(item) {\n let deselectedRows = [];\n let selectedRows = [];\n this.lastSelectionStartIndex = item.index;\n if (!this.isSelected(item.index)) {\n selectedRows.push({ dataItem: item.data, index: item.index });\n }\n this.currentSelection.forEach((row) => {\n if (row.index !== item.index) {\n deselectedRows.push(row);\n }\n });\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n //Used to manually deselect removed items\n deselect(removedItem) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.data === removedItem) {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n if (this.isSelected(rowArgs.index)) {\n let ev = {\n ctrlKey: false,\n deselectedRows: [rowArgs],\n selectedRows: []\n };\n this.changes.emit(ev);\n }\n }\n item = iterator$$1.next();\n }\n }\n addAllTo(item, ctrlKey) {\n let selectedRows = [];\n let deselectedRows = [];\n const start = Math.min(this.lastSelectionStartIndex, item.index);\n const end = Math.max(this.lastSelectionStartIndex, item.index);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if ((idx < start || idx > end) && this.isSelected(idx) && !ctrlKey) {\n deselectedRows.push(rowArgs);\n }\n if ((idx >= start && idx <= end) && !this.isSelected(idx)) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n updateAll(selectAllChecked) {\n this.selectAllChecked = selectAllChecked;\n let selectedRows = [];\n let deselectedRows = [];\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if (this.isSelected(idx) && !selectAllChecked) {\n deselectedRows.push(rowArgs);\n }\n if (!this.isSelected(idx) && selectAllChecked) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n if (!selectedRows.length && !deselectedRows.length) {\n return;\n }\n let ev = {\n ctrlKey: true,\n deselectedRows: deselectedRows,\n selectedRows: selectedRows,\n shiftKey: true\n };\n this.changes.emit(ev);\n }\n selectRange(startIndex, endIndex) {\n let selectedRows = [];\n let deselectedRows = [];\n const start = Math.min(startIndex, endIndex);\n const end = Math.max(startIndex, endIndex);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if ((idx < start || idx > end) && this.isSelected(idx)) {\n deselectedRows.push(rowArgs);\n }\n if ((idx >= start && idx <= end) && !this.isSelected(idx)) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n get selectAllState() {\n return this._selectAllState;\n }\n get selected() {\n return this.currentSelection.map((item) => {\n return item.index;\n }).filter((n) => typeof n === \"number\");\n }\n get options() {\n const defaultOptions = {\n checkboxOnly: false,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.settings)) {\n return defaultOptions;\n }\n if (typeof this.settings.selectable === 'boolean') {\n return {\n checkboxOnly: false,\n enabled: this.settings.selectable,\n mode: \"multiple\"\n };\n }\n else {\n return Object.assign(defaultOptions, this.settings.selectable);\n }\n }\n ngOnDestroy() {\n this.removeSubscriptions();\n }\n targetArgs() {\n return {\n index: this.mouseDownEventArgs.rowIndex,\n dataItem: this.mouseDownEventArgs.dataItem\n };\n }\n addSubscriptions() {\n if (!this.cellClickSubscription) {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n if (this.options.enabled && !this.options.checkboxOnly && args.type !== 'contextmenu') {\n if (this.active) {\n this.handleClick({ index: args.rowIndex, data: args.dataItem }, args.originalEvent);\n }\n }\n });\n }\n if (!this.mousedownSubscription) {\n this.mousedownSubscription = this.domEvents.cellMousedown.subscribe((args) => {\n this.mouseDownEventArgs = args;\n if ((this.options.enabled && (!this.options.mode || this.options.mode === \"multiple\") &&\n !this.options.checkboxOnly && args.originalEvent.shiftKey)) {\n if (this.active) {\n args.originalEvent.preventDefault();\n this.navigationService.focusCellByElement(args.originalEvent.target);\n }\n }\n });\n }\n if (this.localDataChangesService && !this.dataChangedSubscription) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe((args) => {\n if (this.active) {\n if (isPresent(args.action) && args.action === 'remove') {\n this.deselect(args.item);\n }\n }\n });\n }\n }\n getIterator() {\n const accessor = this.settings.view.accessor();\n if (!accessor) {\n return;\n }\n return accessor[iterator]();\n }\n removeSubscriptions() {\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n this.cellClickSubscription = null;\n }\n if (this.mousedownSubscription) {\n this.mousedownSubscription.unsubscribe();\n this.mousedownSubscription = null;\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n this.dataChangedSubscription = null;\n }\n }\n}\nSelectionService.ɵfac = function SelectionService_Factory(t) { return new (t || SelectionService)(ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(LocalDataChangesService), ɵngcc0.ɵɵinject(NavigationService)); };\nSelectionService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SelectionService, factory: SelectionService.ɵfac });\n/** @nocollapse */\nSelectionService.ctorParameters = () => [\n { type: DomEventsService },\n { type: LocalDataChangesService },\n { type: NavigationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionService, [{\n type: Injectable\n }], function () { return [{ type: DomEventsService }, { type: LocalDataChangesService }, { type: NavigationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass CellSelectionService {\n constructor(domEvents, localDataChangesService, navigationService) {\n this.domEvents = domEvents;\n this.localDataChangesService = localDataChangesService;\n this.navigationService = navigationService;\n this.changes = new EventEmitter();\n this.mouseUpEvent = new EventEmitter();\n this.currentSelection = [];\n this.active = false;\n this.dragging = false;\n this.dragSelectDeselect = false;\n this.lastSelectionItem = { itemKey: 0, columnKey: 0 };\n this.lastSelectionItemRowIndex = 0;\n this.lastSelectionItemColIndex = 0;\n this.addSubscriptions();\n }\n get enableMarquee() {\n const checkboxOnly = this.settings && typeof this.settings === 'object' && this.settings.checkboxOnly;\n if (!this.settings || checkboxOnly) {\n return false;\n }\n const selectableSettings = this.settings.selectable;\n const dragAndMultiple = typeof (selectableSettings) === 'object' &&\n isPresent(selectableSettings) &&\n selectableSettings.mode === 'multiple' &&\n selectableSettings.cell &&\n selectableSettings.enabled !== false &&\n selectableSettings.drag;\n return this.active && dragAndMultiple;\n }\n init(settings) {\n this.settings = settings;\n this.currentSelection = [];\n if (settings.selectable && settings.selectable.enabled !== false) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\") {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n settings.columns.forEach(col => {\n const selectedCellArgs = settings.cellSelected(rowArgs, col, col.leafIndex);\n if (selectedCellArgs.selected) {\n this.currentSelection.push(selectedCellArgs.item);\n }\n });\n }\n item = iterator$$1.next();\n }\n }\n }\n isCellSelected(item, col) {\n if (this.settings && this.active) {\n const selectedCellArgs = this.settings.cellSelected({ dataItem: item.data, index: item.index }, col, col.leafIndex);\n return this.options.enabled && selectedCellArgs.selected;\n }\n return false;\n }\n handleClick(item, event) {\n if (this.dragging) {\n this.dragging = false;\n return;\n }\n let ev;\n const ctrlKey = event.ctrlKey || event.metaKey;\n if (this.options.mode === \"single\" && ctrlKey && this.isCellSelected(item, item.column)) {\n ev = this.toggle(item);\n }\n else if (this.options.mode === \"multiple\") {\n if (ctrlKey && !event.shiftKey) {\n ev = this.toggle(item);\n }\n else if (event.shiftKey) {\n const startRowIndex = Math.min(this.lastSelectionItemRowIndex, item.index);\n const startColIndex = Math.min(this.lastSelectionItemColIndex, item.column.leafIndex);\n const endRowIndex = Math.max(this.lastSelectionItemRowIndex, item.index);\n const endColIndex = Math.max(this.lastSelectionItemColIndex, item.column.leafIndex);\n ev = this.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex);\n }\n }\n if (!isPresent(ev)) {\n ev = this.select(item);\n this.currentSelection = [this.lastSelectionItem];\n }\n if (!ev.selectedCells.length && !ev.deselectedCells.length) {\n return;\n }\n ev.ctrlKey = ctrlKey;\n ev.shiftKey = event.shiftKey;\n this.changes.emit(ev);\n }\n toggle(item) {\n let selectedCells = [];\n let deselectedCells = [];\n this.lastSelectionItem =\n this.settings.cellSelected({ dataItem: item.data, index: item.index }, item.column, item.column.leafIndex).item;\n this.lastSelectionItemRowIndex = item.index;\n this.lastSelectionItemColIndex = item.column.leafIndex;\n if (this.isCellSelected(item, item.column)) {\n deselectedCells.push(this.lastSelectionItem);\n }\n else {\n selectedCells.push(this.lastSelectionItem);\n }\n return {\n deselectedCells,\n selectedCells\n };\n }\n select(item) {\n const selectedCells = [];\n const deselectedCells = [];\n this.lastSelectionItem =\n this.settings.cellSelected({ dataItem: item.data, index: item.index }, item.column, item.column.leafIndex).item;\n this.lastSelectionItemRowIndex = item.index;\n this.lastSelectionItemColIndex = item.column.leafIndex;\n if (!this.isCellSelected(item, item.column)) {\n selectedCells.push(this.lastSelectionItem);\n }\n this.currentSelection.forEach((selectedItem) => {\n if (selectedItem.itemKey !== this.lastSelectionItem.itemKey || selectedItem.columnKey !== this.lastSelectionItem.columnKey) {\n deselectedCells.push(selectedItem);\n }\n });\n return {\n deselectedCells,\n selectedCells\n };\n }\n //Used to manually deselect removed items\n deselect(removedItem) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n let rowArgs;\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.data === removedItem) {\n rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n break;\n }\n item = iterator$$1.next();\n }\n if (rowArgs) {\n const cellsToRemove = this.currentSelection.filter(selectedItem => {\n const contender = this.settings.cellSelected(rowArgs, null, null).item;\n return selectedItem.itemKey === contender.itemKey;\n });\n if (cellsToRemove.length) {\n let ev = {\n ctrlKey: false,\n deselectedCells: cellsToRemove,\n selectedCells: []\n };\n this.changes.emit(ev);\n }\n }\n }\n selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex) {\n const selectedCells = [];\n const deselectedCells = [];\n const selectionStartRow = Math.min(startRowIndex, endRowIndex);\n const selectionStartCol = Math.min(startColIndex, endColIndex);\n const selectionEndRow = Math.max(startRowIndex, endRowIndex);\n const selectionEndCol = Math.max(startColIndex, endColIndex);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const data = next.value.data;\n const rowArgs = {\n dataItem: data,\n index: idx\n };\n this.settings.columns.forEach(col => {\n const { item } = this.settings.cellSelected(rowArgs, col, col.leafIndex);\n const selected = this.isCellSelected(next.value, col);\n const isInRowRange = selectionStartRow <= idx && idx <= selectionEndRow;\n const isInColRange = selectionStartCol <= col.leafIndex && col.leafIndex <= selectionEndCol;\n const isInSelectionRect = isInRowRange && isInColRange;\n if (!isInSelectionRect && selected) {\n deselectedCells.push(item);\n }\n if (isInSelectionRect && !selected) {\n selectedCells.push(item);\n }\n });\n }\n next = iterator$$1.next();\n }\n return {\n deselectedCells,\n selectedCells\n };\n }\n get options() {\n const defaultOptions = {\n checkboxOnly: false,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.settings)) {\n return defaultOptions;\n }\n if (typeof this.settings.selectable === 'boolean') {\n return {\n checkboxOnly: false,\n enabled: this.settings.selectable,\n mode: \"multiple\"\n };\n }\n else {\n return Object.assign(defaultOptions, this.settings.selectable);\n }\n }\n ngOnDestroy() {\n this.removeSubscriptions();\n }\n addSubscriptions() {\n if (!this.cellClickSubscription) {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n if (this.options.enabled && !this.options.checkboxOnly && args.type !== 'contextmenu') {\n if (this.active) {\n this.handleClick({ index: args.rowIndex, data: args.dataItem, column: args.column }, args.originalEvent);\n }\n }\n });\n }\n if (!this.mousedownSubscription) {\n this.mousedownSubscription = this.domEvents.cellMousedown.subscribe((args) => {\n this.mouseDownEventArgs = args;\n if (this.options.enabled && (!this.options.mode || this.options.mode === \"multiple\") &&\n !this.options.checkboxOnly && args.originalEvent.shiftKey) {\n if (this.active) {\n args.originalEvent.preventDefault();\n this.navigationService.focusCellByElement(args.originalEvent.target);\n }\n }\n });\n }\n if (this.localDataChangesService && !this.dataChangedSubscription) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe((args) => {\n if (this.active) {\n if (isPresent(args.action) && args.action === 'remove') {\n this.deselect(args.item);\n }\n }\n });\n }\n }\n getIterator() {\n const accessor = this.settings.view.accessor();\n if (!accessor) {\n return;\n }\n return accessor[iterator]();\n }\n removeSubscriptions() {\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n this.cellClickSubscription = null;\n }\n if (this.mousedownSubscription) {\n this.mousedownSubscription.unsubscribe();\n this.mousedownSubscription = null;\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n this.dataChangedSubscription = null;\n }\n }\n}\nCellSelectionService.ɵfac = function CellSelectionService_Factory(t) { return new (t || CellSelectionService)(ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(LocalDataChangesService), ɵngcc0.ɵɵinject(NavigationService)); };\nCellSelectionService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CellSelectionService, factory: CellSelectionService.ɵfac });\n/** @nocollapse */\nCellSelectionService.ctorParameters = () => [\n { type: DomEventsService },\n { type: LocalDataChangesService },\n { type: NavigationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellSelectionService, [{\n type: Injectable\n }], function () { return [{ type: DomEventsService }, { type: LocalDataChangesService }, { type: NavigationService }]; }, null); })();\n\nconst createElement = () => {\n const marquee = document.createElement(\"div\");\n marquee.className = \"k-marquee\";\n const marqueeColor = document.createElement(\"div\");\n marqueeColor.className = \"k-marquee-color\";\n marquee.appendChild(marqueeColor);\n return marquee;\n};\nconst POINTER_OFFSET = 2;\nconst MINIMAL_DRAG_DISTANCE = 5;\nconst offsets = {\n topLeft: { x: POINTER_OFFSET, y: POINTER_OFFSET },\n topRight: { x: -POINTER_OFFSET, y: POINTER_OFFSET },\n bottomLeft: { x: POINTER_OFFSET, y: -POINTER_OFFSET },\n bottomRight: { x: -POINTER_OFFSET, y: -POINTER_OFFSET }\n};\n/**\n * @hidden\n */\nclass GridMarqueeDirective {\n constructor(draggable, selection, cellSelection, domEvents) {\n this.draggable = draggable;\n this.selection = selection;\n this.cellSelection = cellSelection;\n this.domEvents = domEvents;\n this.selectionStarted = false;\n }\n get userSelection() {\n return (this.cellSelection.enableMarquee || this.selection.enableMarquee) ? 'none' : null;\n }\n ngOnInit() {\n this.subscriptions = (this.draggable.kendoPress.subscribe(this.start.bind(this)));\n this.subscriptions.add(this.draggable.kendoDrag.subscribe(this.moveMarquee.bind(this)));\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.clean();\n }\n start(args) {\n if (args.originalEvent.target.classList.contains('k-checkbox')) {\n this.pressArgs = null;\n return;\n }\n this.pressArgs = args;\n this.pressTarget = null;\n }\n moveMarquee(args) {\n if (!this.pressTarget) {\n this.pressTarget = this.cellSelection.active ? this.cellSelection.mouseDownEventArgs : this.selection.mouseDownEventArgs;\n }\n const press = this.pressArgs;\n if (!press) {\n return;\n }\n if (!this.selectionStarted) {\n const distance = Math.sqrt(Math.pow((args.pageX - press.pageX), 2) + Math.pow((args.pageY - press.pageY), 2));\n if (distance > MINIMAL_DRAG_DISTANCE) {\n this.selectionStarted = true;\n this.dragEndSubscription = merge(this.domEvents.cellMouseup.pipe(take(1)), this.draggable.kendoRelease.pipe(delay(1), take(1)))\n .subscribe(this.endSelection.bind(this));\n }\n else {\n return;\n }\n }\n this.initMarquee();\n const element = this.marqueeElement;\n const marqueeQuadrant = this.getMarqueeQuadrant(args.pageX, args.pageY, press.pageX, press.pageY);\n let left = Math.min(args.pageX, press.pageX);\n let top = Math.min(args.pageY, press.pageY);\n const width = Math.abs(args.pageX - press.pageX);\n const height = Math.abs(args.pageY - press.pageY);\n if (marqueeQuadrant) {\n left += offsets[marqueeQuadrant].x;\n top += offsets[marqueeQuadrant].y;\n }\n element.style.left = `${left}px`;\n element.style.top = `${top}px`;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n }\n endSelection(args) {\n if (args.type === 'mouseup' || args.type === 'touchend') {\n if (this.cellSelection.active) {\n this.cellSelection.dragging = true;\n this.cellSelection.changes.emit(this.cellSelection.selectRange(this.pressTarget.rowIndex, this.pressTarget.column.leafIndex, args.rowIndex, args.column.leafIndex));\n }\n else if (this.selection.active) {\n this.selection.dragging = true;\n this.selection.changes.emit(this.selection.selectRange(this.pressTarget.rowIndex, args.rowIndex));\n }\n }\n this.clean();\n }\n clean() {\n if (this.marqueeElement) {\n document.body.removeChild(this.marqueeElement);\n this.marqueeElement = null;\n }\n if (this.dragEndSubscription) {\n this.dragEndSubscription.unsubscribe();\n }\n this.dragEndSubscription = null;\n this.pressTarget = null;\n this.pressArgs = null;\n this.selectionStarted = false;\n this.cellSelection.active ? this.cellSelection.dragging = false : this.selection.dragging = false;\n }\n initMarquee() {\n if (!this.marqueeElement) {\n this.marqueeElement = createElement();\n document.body.appendChild(this.marqueeElement);\n }\n }\n getMarqueeQuadrant(pointerX, pointerY, startX, startY) {\n const leftHalf = pointerX < startX;\n const rightHalf = pointerX > startX;\n const topHalf = pointerY < startY;\n const bottomHalf = pointerY > startY;\n if (leftHalf && topHalf) {\n return 'topLeft';\n }\n if (leftHalf && bottomHalf) {\n return 'bottomLeft';\n }\n if (rightHalf && topHalf) {\n return 'topRight';\n }\n if (rightHalf && bottomHalf) {\n return 'bottomRight';\n }\n return null;\n }\n}\nGridMarqueeDirective.ɵfac = function GridMarqueeDirective_Factory(t) { return new (t || GridMarqueeDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(DomEventsService)); };\nGridMarqueeDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridMarqueeDirective, selectors: [[\"\", \"kendoGridSelectionMarquee\", \"\"]], hostVars: 4, hostBindings: function GridMarqueeDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"user-select\", ctx.userSelection)(\"-webkit-user-select\", ctx.userSelection);\n } } });\n/** @nocollapse */\nGridMarqueeDirective.ctorParameters = () => [\n { type: DraggableDirective },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: DomEventsService }\n];\nGridMarqueeDirective.propDecorators = {\n userSelection: [{ type: HostBinding, args: ['style.user-select',] }, { type: HostBinding, args: ['style.-webkit-user-select',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridMarqueeDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectionMarquee]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective }, { type: SelectionService }, { type: CellSelectionService }, { type: DomEventsService }]; }, { userSelection: [{\n type: HostBinding,\n args: ['style.user-select']\n }, {\n type: HostBinding,\n args: ['style.-webkit-user-select']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ZoneAwareEventEmitter extends EventEmitter {\n constructor(ngZone, isAsync = false) {\n super(isAsync);\n this.ngZone = ngZone;\n }\n subscribe(generatorOrNext, error, complete) {\n let schedulerFn;\n let errorFn = (_) => null;\n let completeFn = () => null;\n if (generatorOrNext && typeof generatorOrNext === 'object') {\n schedulerFn = (value) => { this.ngZone.run(() => generatorOrNext.next(value)); };\n if (generatorOrNext.error) {\n errorFn = (err) => { this.ngZone.run(() => generatorOrNext.error(err)); };\n }\n if (generatorOrNext.complete) {\n completeFn = () => { this.ngZone.run(() => generatorOrNext.complete()); };\n }\n }\n else {\n schedulerFn = (value) => { this.ngZone.run(() => generatorOrNext(value)); };\n if (error) {\n errorFn = (err) => { this.ngZone.run(() => error(err)); };\n }\n if (complete) {\n completeFn = () => { this.ngZone.run(() => complete()); };\n }\n }\n return super.subscribe(schedulerFn, errorFn, completeFn);\n }\n}\n\n/**\n * Represents the column cell template of the Grid ([more information and example]({% slug templates_columns_grid %}#toc-cell-template)).\n * Helps to customize the content of the cells. To define the cell template, nest an `` tag\n * with the `kendoGridCellTemplate` directive inside a `` tag.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `columnIndex`—The current column index. Use it as an alias for a template variable by utilizing the `let-columnIndex=\"columnIndex\"` syntax.\n * - `rowIndex`—The current data row index. Use it as an alias for a template variable by utilizing the `let-rowIndex=\"rowIndex\"` syntax.\n * - `dataItem`—The current data item. Represents the default context that will be assigned to any template variable which utilizes the `let-x` syntax—for example, `let-dataItem`.\n * - `column`—The current column instance. Use it as an alias for a template variable by utilizing the `let-column=\"column\"` syntax.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Data Row #: {{rowIndex}} /\n * {{dataItem.ProductName}}\n * ({{dataItem.Discontinued ? \"discontinued\" : \"active\"}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass CellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCellTemplateDirective.ɵfac = function CellTemplateDirective_Factory(t) { return new (t || CellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CellTemplateDirective, selectors: [[\"\", \"kendoGridCellTemplate\", \"\"]] });\n/** @nocollapse */\nCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group-header cell template of the Grid which helps to customize the content of the group header item.\n * To define the group header template, nest an `` tag with the `kendoGridGroupHeaderTemplate`\n * directive inside ``.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `group`—The current group item.\n * - `field`—The name of the field by which data is grouped.\n * - `value`—The current group value.\n * - `aggregates`—All aggregate values for the current group.\n * - `index`—The index of the current group.\n * - `expanded`—A boolean value indicating if the group is currently expanded.\n * ([see example]({% slug groupable_grid_with_aggregates %})).\n *\n * @example\n * ```ts\n * import { process } from '@progress/kendo-data-query';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{field}}: {{value}}\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public groups = [{ field: \"ProductName\" }];\n *\n * public gridData = process([{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ], {\n * group: this.groups\n * });\n * }\n *\n * ```\n */\nclass GroupHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderTemplateDirective.ɵfac = function GroupHeaderTemplateDirective_Factory(t) { return new (t || GroupHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderTemplateDirective, selectors: [[\"\", \"kendoGridGroupHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group-header column template of the Grid which helps to customize the content of the group headers.\n * To define the group header template, nest an `` tag with the `kendoGridGroupHeaderColumnTemplate`\n * directive inside ``. ([See example]({% slug groupable_grid_with_aggregates %})).\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `group`—The current group item.\n * - `field`—The name of the field by which data is grouped.\n * - `value`—The current group value.\n * - `aggregates`—All aggregate values for the current group.\n *\n * @example\n * ```ts\n * \n * \n * \n * Count: {{ aggregates.Discontinued.count }}\n * \n * \n * \n * ```\n */\nclass GroupHeaderColumnTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderColumnTemplateDirective.ɵfac = function GroupHeaderColumnTemplateDirective_Factory(t) { return new (t || GroupHeaderColumnTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderColumnTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderColumnTemplateDirective, selectors: [[\"\", \"kendoGridGroupHeaderColumnTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderColumnTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderColumnTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupHeaderColumnTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column edit-cell template of the Grid ([see example]({% slug editing_template_forms_grid %})).\n * Helps to customize the content of the edited cells. To define the cell template, nest an ``\n * tag with the `kendoGridEditTemplate` directive inside a `` tag.\n *\n * The template context contains the following fields:\n * - `formGroup`—The current [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }}).\n * If you use the Grid inside [Template-Driven Forms]({{ site.data.urls.angular['forms'] }}), it will be `undefined`.\n * - `rowIndex`—The current data row index. If inside a new item row, `rowIndex` is `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n */\nclass EditTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nEditTemplateDirective.ɵfac = function EditTemplateDirective_Factory(t) { return new (t || EditTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nEditTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditTemplateDirective, selectors: [[\"\", \"kendoGridEditTemplate\", \"\"]] });\n/** @nocollapse */\nEditTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridEditTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column group footer cell template of the Grid which helps to customize the group footer cell for the column.\n * To define the group footer template, nest an `` tag with the `kendoGridGroupFooterTemplate` directive\n * inside ``.\n *\n * The template context is set to the current aggregates and the following additional fields are passed:\n * - `column`—Defines an instance of the `ColumnComponent` option.\n * - `field`—The current column field name.\n * - `group`—The current group data item.\n * - `aggregates`—All aggregate values for the current group.\n *\n * @example\n * ```ts-preview\n * import { process } from '@progress/kendo-data-query';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Count: {{aggregates[field].count}}\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public groups = [{ field: \"ProductName\", aggregates: [{ field: \"ProductName\", aggregate: \"count\" }] }];\n *\n * public gridData = process([{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ], {\n * group: this.groups\n * });\n * }\n * ```\n */\nclass GroupFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupFooterTemplateDirective.ɵfac = function GroupFooterTemplateDirective_Factory(t) { return new (t || GroupFooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupFooterTemplateDirective, selectors: [[\"\", \"kendoGridGroupFooterTemplate\", \"\"]] });\n/** @nocollapse */\nGroupFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupFooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column header cell template of the Grid\n * ([more information and example]({% slug templates_columns_grid %}#toc-header-template)).\n * Helps to customize the table header cell for the column.\n * To define a header template, nest an `` tag with the\n * [`kendoGridHeaderTemplate`]({% slug api_grid_headertemplatedirective %}) directive inside the `` tag.\n *\n * The template context is set to the current column and then the following additional fields are passed:\n * * `column`—Defines an instance of the [`ColumnComponent`]({% slug api_grid_columncomponent %}) option.\n * * `columnIndex`—Defines the current column index.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass HeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTemplateDirective.ɵfac = function HeaderTemplateDirective_Factory(t) { return new (t || HeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: HeaderTemplateDirective, selectors: [[\"\", \"kendoGridHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column footer cell template of the Grid\n * ([more information and example]({% slug templates_columns_grid %}#toc-footer-template)).\n * Helps to customize the table footer cell for the column.\n * To define a footer template, nest an `` tag with the\n * [`kendoGridFooterTemplate`]({% slug api_grid_footertemplatedirective %}) directive inside the `` tag.\n *\n * The template context is set to the current column and the following additional fields are passed:\n * * `column`—Defines an instance of the [`ColumnComponent`]({% slug api_grid_columncomponent %}) option.\n * * `columnIndex`—Defines the current column index.\n *\n * For more information on how to display aggregates in the footer of the Grid,\n * refer to the article on [aggregates]({% slug groupable_grid_with_aggregates %}).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFooterTemplateDirective.ɵfac = function FooterTemplateDirective_Factory(t) { return new (t || FooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FooterTemplateDirective, selectors: [[\"\", \"kendoGridFooterTemplate\", \"\"]] });\n/** @nocollapse */\nFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the template for the column menu in the Grid. Provides an option for\n * customizing the content of the column menu for all or for specific columns.\n * To define the content template, nest an `` tag with the\n * `kendoGridColumnMenuTemplate` directive inside the `kendo-grid` or the `` component.\n *\n * The template context is passes through the following fields:\n * - `service`—Represents the [ColumnMenuService]({% slug api_grid_columnmenuservice %}).\n * - `column`—Represents the Grid column.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }, { Field1: 'Foo1', Field2: 'Bar1' }];\n * }\n *\n * ```\n */\nclass ColumnMenuTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnMenuTemplateDirective.ɵfac = function ColumnMenuTemplateDirective_Factory(t) { return new (t || ColumnMenuTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nColumnMenuTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuTemplateDirective, selectors: [[\"\", \"kendoGridColumnMenuTemplate\", \"\"]] });\n/** @nocollapse */\nColumnMenuTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnMenuTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nconst isSpanColumn = column => column.isSpanColumn;\n/**\n * @hidden\n */\nconst isCheckboxColumn = column => column.isCheckboxColumn;\nconst isColumnContainer = column => column.isColumnGroup || isSpanColumn(column);\n/**\n * The base class for the column components of the Grid.\n */\nclass ColumnBase$1 {\n constructor(parent) {\n this.parent = parent;\n /**\n * @hidden\n */\n this.matchesMedia = true;\n /**\n * The column index after reordering.\n *\n * > `orderIndex` is a read-only property. Setting this field does not affect column order.\n */\n this.orderIndex = 0;\n /**\n * @hidden\n */\n this.isColumnGroup = false;\n /**\n * @hidden\n */\n this.isSpanColumn = false;\n /**\n * Indicates whether the column is resizable.\n * @default true\n */\n this.resizable = true;\n /**\n * Indicates whether the column is reorderable.\n * @default true\n */\n this.reorderable = true;\n /**\n * The width (in pixels) below which the user is not able to resize the column by using the UI.\n */\n this.minResizableWidth = 10;\n /**\n * Toggles the locked (frozen) state of the columns ([more information and example]({% slug locked_columns_grid %})).\n *\n * @default false\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\n this.locked = false;\n /**\n * Specifies if the column can be locked or unlocked from the column menu or by reordering the columns.\n */\n this.lockable = true;\n /**\n * Specifies if the column menu will be shown for the column.\n */\n this.columnMenu = true;\n /**\n * Specifies if the column will be included in the column-chooser list.\n */\n this.includeInChooser = true;\n /**\n * @hidden\n */\n this.headerTemplates = new QueryList();\n /**\n * @hidden\n */\n this.columnMenuTemplates = new QueryList();\n if (parent && !isColumnContainer(parent)) {\n throw new Error('Columns can be nested only inside ColumnGroupComponent');\n }\n }\n /**\n * The width of the column (in pixels).\n */\n set width(value) {\n this._width = parseInt(value, 10);\n }\n get width() { return this._width; }\n /**\n * @hidden\n */\n get level() {\n if (this.parent && isSpanColumn(this.parent)) {\n return this.parent.level;\n }\n return this.parent ? this.parent.level + 1 : 0;\n }\n /**\n * @hidden\n */\n get isLocked() {\n return this.parent ? this.parent.isLocked : this.locked;\n }\n /**\n * @hidden\n */\n get colspan() {\n return 1;\n }\n /**\n * @hidden\n */\n rowspan(totalColumnLevels) {\n return this.level < totalColumnLevels ? (totalColumnLevels - this.level) + 1 : 1;\n }\n /**\n * @hidden\n */\n get headerTemplateRef() {\n const template = this.headerTemplates.first;\n return template ? template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get footerTemplateRef() {\n return this.footerTemplate ? this.footerTemplate.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get columnMenuTemplateRef() {\n const template = this.columnMenuTemplates.first;\n return template ? template.templateRef : null;\n }\n /**\n * @hidden\n */\n get displayTitle() {\n return this.title;\n }\n /**\n * @hidden\n */\n get isVisible() {\n return !this.hidden && this.matchesMedia;\n }\n}\nColumnBase$1.ɵfac = function ColumnBase$1_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nColumnBase$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnBase$1, contentQueries: function ColumnBase$1_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuTemplateDirective, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplates = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columnMenuTemplates = _t);\n } }, inputs: { resizable: \"resizable\", reorderable: \"reorderable\", minResizableWidth: \"minResizableWidth\", locked: \"locked\", lockable: \"lockable\", columnMenu: \"columnMenu\", includeInChooser: \"includeInChooser\", width: \"width\", title: \"title\", autoSize: \"autoSize\", hidden: \"hidden\", media: \"media\", style: \"style\", headerStyle: \"headerStyle\", footerStyle: \"footerStyle\", cssClass: [\"class\", \"cssClass\"], headerClass: \"headerClass\", footerClass: \"footerClass\" } });\nColumnBase$1.propDecorators = {\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n minResizableWidth: [{ type: Input }],\n title: [{ type: Input }],\n width: [{ type: Input }],\n autoSize: [{ type: Input }],\n locked: [{ type: Input }],\n hidden: [{ type: Input }],\n media: [{ type: Input }],\n lockable: [{ type: Input }],\n columnMenu: [{ type: Input }],\n includeInChooser: [{ type: Input }],\n style: [{ type: Input }],\n headerStyle: [{ type: Input }],\n footerStyle: [{ type: Input }],\n cssClass: [{ type: Input, args: ['class',] }],\n headerClass: [{ type: Input }],\n footerClass: [{ type: Input }],\n headerTemplates: [{ type: ContentChildren, args: [HeaderTemplateDirective, { descendants: false },] }],\n footerTemplate: [{ type: ContentChild, args: [FooterTemplateDirective,] }],\n columnMenuTemplates: [{ type: ContentChildren, args: [ColumnMenuTemplateDirective,] }]\n};\n\n\n/**\n * Represents the filter-cell template ([see example]({% slug builtinfiltertemplate_grid %}#toc-customizing-filter-rows)).\n */\nclass FilterCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterCellTemplateDirective.ɵfac = function FilterCellTemplateDirective_Factory(t) { return new (t || FilterCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFilterCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterCellTemplateDirective, selectors: [[\"\", \"kendoGridFilterCellTemplate\", \"\"]] });\n/** @nocollapse */\nFilterCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFilterCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the filter-menu template\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-customizing-filter-menus)).\n */\nclass FilterMenuTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterMenuTemplateDirective.ɵfac = function FilterMenuTemplateDirective_Factory(t) { return new (t || FilterMenuTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFilterMenuTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterMenuTemplateDirective, selectors: [[\"\", \"kendoGridFilterMenuTemplate\", \"\"]] });\n/** @nocollapse */\nFilterMenuTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFilterMenuTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nfunction isColumnComponent(column) {\n return isPresent(column.field);\n}\n/**\n * Represents the columns of the [Angular Data Grid]({% slug overview_grid %}).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass ColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n /**\n * Allows the column headers to be clicked and the `sortChange` event emitted.\n * You have to handle the `sortChange` event yourself and sort the data.\n */\n this.sortable = true;\n /**\n * Determines if the column can be dragged to the group panel. The default value is `true`.\n * If set to `false`, you can group the columns by the column field by using the API of the Grid.\n */\n this.groupable = true;\n /**\n * Defines the editor type ([see example]({% slug editing_reactive_forms_grid %}#toc-setup)).\n * Used when the column enters the edit mode. The default value is `text`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.editor = 'text';\n /**\n * Defines the filter type that is displayed inside the filter row. The default value is `text`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.filter = 'text';\n /**\n * Defines if a filter UI will be displayed for this column. The default value is `true`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.filterable = true;\n /**\n * Defines whether the column is editable. The default value is `true`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.editable = true;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n get groupHeaderTemplateRef() {\n return this.groupHeaderTemplate ? this.groupHeaderTemplate.templateRef : undefined;\n }\n get groupHeaderColumnTemplateRef() {\n return this.groupHeaderColumnTemplate ? this.groupHeaderColumnTemplate.templateRef : undefined;\n }\n get groupFooterTemplateRef() {\n return this.groupFooterTemplate ? this.groupFooterTemplate.templateRef : undefined;\n }\n get editTemplateRef() {\n return this.editTemplate ? this.editTemplate.templateRef : undefined;\n }\n get filterCellTemplateRef() {\n return this.filterCellTemplate ? this.filterCellTemplate.templateRef : undefined;\n }\n get filterMenuTemplateRef() {\n return this.filterMenuTemplate ? this.filterMenuTemplate.templateRef : undefined;\n }\n get displayTitle() {\n return this.title === undefined ? this.field : this.title;\n }\n}\nColumnComponent.ɵfac = function ColumnComponent_Factory(t) { return new (t || ColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnComponent, selectors: [[\"kendo-grid-column\"]], contentQueries: function ColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderColumnTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupFooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, EditTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterMenuTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderColumnTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupFooterTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.editTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterMenuTemplate = _t.first);\n } }, inputs: { sortable: \"sortable\", groupable: \"groupable\", editor: \"editor\", filter: \"filter\", filterable: \"filterable\", editable: \"editable\", field: \"field\", format: \"format\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnComponent.propDecorators = {\n field: [{ type: Input }],\n format: [{ type: Input }],\n sortable: [{ type: Input }],\n groupable: [{ type: Input }],\n editor: [{ type: Input }],\n filter: [{ type: Input }],\n filterable: [{ type: Input }],\n editable: [{ type: Input }],\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n groupHeaderTemplate: [{ type: ContentChild, args: [GroupHeaderTemplateDirective,] }],\n groupHeaderColumnTemplate: [{ type: ContentChild, args: [GroupHeaderColumnTemplateDirective,] }],\n groupFooterTemplate: [{ type: ContentChild, args: [GroupFooterTemplateDirective,] }],\n editTemplate: [{ type: ContentChild, args: [EditTemplateDirective,] }],\n filterCellTemplate: [{ type: ContentChild, args: [FilterCellTemplateDirective,] }],\n filterMenuTemplate: [{ type: ContentChild, args: [FilterMenuTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnComponent)\n }\n ],\n selector: 'kendo-grid-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { sortable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], editor: [{\n type: Input\n }], filter: [{\n type: Input\n }], filterable: [{\n type: Input\n }], editable: [{\n type: Input\n }], field: [{\n type: Input\n }], format: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], groupHeaderTemplate: [{\n type: ContentChild,\n args: [GroupHeaderTemplateDirective]\n }], groupHeaderColumnTemplate: [{\n type: ContentChild,\n args: [GroupHeaderColumnTemplateDirective]\n }], groupFooterTemplate: [{\n type: ContentChild,\n args: [GroupFooterTemplateDirective]\n }], editTemplate: [{\n type: ContentChild,\n args: [EditTemplateDirective]\n }], filterCellTemplate: [{\n type: ContentChild,\n args: [FilterCellTemplateDirective]\n }], filterMenuTemplate: [{\n type: ContentChild,\n args: [FilterMenuTemplateDirective]\n }] }); })();\n\n/**\n * @hidden\n */\nfunction isSpanColumnComponent(column) {\n return column.isSpanColumn;\n}\n/**\n * Represents a column which can be spanned over multiple data cells while the individual\n * header and footer cells are retained ([see example]({% slug spanned_columns_grid %})).\n * Enables you to achieve more flexible layout while keeping the built-in UI element for\n * [sorting]({% slug sorting_grid %}), [filtering]({% slug filtering_grid %}), and\n * [grouping]({% slug groupingbasics_grid %}). Wrap the columns that will be\n * merged inside the `` tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * }\n *\n * ```\n *\n * By default, the data cell displays the data for the specified fields. To further customize\n * the span-column functionality, use a [cell template]({% slug api_grid_celltemplatedirective %}).\n *\n * ```html-no-run\n * \n * \n * \n * \n *
    {{ dataItem.field1 }}
    \n *

    {{ dataItem.field2 }}

    \n *
    \n *
    \n * ```\n */\nclass SpanColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n /*\n * @hidden\n */\n this.isSpanColumn = true;\n this.template = new QueryList();\n this.editTemplate = new QueryList();\n /**\n * @hidden\n */\n this.childColumns = new QueryList();\n /**\n * @hidden\n */\n this.includeInChooser = false;\n this._editable = true;\n this._locked = false;\n if (parent && parent.isSpanColumn) {\n throw new Error('SpanColumn cannot be nested inside another SpanColumn');\n }\n }\n /**\n * Defines whether the edit template of the column will be rendered. The default value is `false`.\n *\n * > To enable the editing functionality for a spanned column, set an edit template for it.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * .....\n * \n * \n * \n * ```\n */\n set editable(value) {\n this._editable = value;\n }\n get editable() {\n return isPresent(this.editTemplateRef) && this._editable;\n }\n /**\n * @hidden\n * added for backwards compitability\n */\n set width(_value) {\n }\n get width() {\n return this.childColumns.reduce((total, column) => total + column.width, 0);\n }\n /**\n * @hidden\n */\n get leafIndex() {\n return this.childColumns.first.leafIndex;\n }\n /**\n * @hidden\n */\n get templateRef() {\n const template = this.template.first;\n return template ? template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get editTemplateRef() {\n const editTemplate = this.editTemplate.first;\n return editTemplate ? editTemplate.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get colspan() {\n return this.childColumns.filter(c => c.isVisible).length;\n }\n /**\n * Toggles the locked (frozen) state of the columns. Locked columns are visible\n * at all times during the horizontal scrolling of the Grid.\n *\n * For the option to work properly, make sure that:\n * - Scrolling is enabled.\n * - The `height` option of the Grid is set.\n * - The widths of all Grid columns are explicitly set in pixels. In this way,\n * the Grid adjusts the layout of the locked and unlocked columns.\n *\n * @default false\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\n set locked(value) {\n this._locked = value;\n }\n get locked() {\n return this._locked || this.childColumns.some(c => c.locked);\n }\n get childrenArray() {\n return this.childColumns.toArray();\n }\n get hasChildren() {\n return this.childColumns.length > 0;\n }\n}\nSpanColumnComponent.ɵfac = function SpanColumnComponent_Factory(t) { return new (t || SpanColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nSpanColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SpanColumnComponent, selectors: [[\"kendo-grid-span-column\"]], contentQueries: function SpanColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, EditTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnComponent, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.editTemplate = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.childColumns = _t);\n } }, inputs: { editable: \"editable\", locked: \"locked\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => SpanColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SpanColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nSpanColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nSpanColumnComponent.propDecorators = {\n template: [{ type: ContentChildren, args: [CellTemplateDirective, { descendants: false },] }],\n editTemplate: [{ type: ContentChildren, args: [EditTemplateDirective, { descendants: false },] }],\n childColumns: [{ type: ContentChildren, args: [ColumnComponent,] }],\n editable: [{ type: Input }],\n locked: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SpanColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => SpanColumnComponent)\n }\n ],\n selector: 'kendo-grid-span-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { template: [{\n type: ContentChildren,\n args: [CellTemplateDirective, { descendants: false }]\n }], editTemplate: [{\n type: ContentChildren,\n args: [EditTemplateDirective, { descendants: false }]\n }], childColumns: [{\n type: ContentChildren,\n args: [ColumnComponent]\n }], editable: [{\n type: Input\n }], locked: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst expandColumns = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ? column.childrenArray : [column]), []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst expandColumnsWithSpan = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ?\n [column].concat(column.childrenArray) :\n [column]), []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst columnsToRender = (columns) => (expandColumns(columns).filter(x => x.isVisible));\nconst sumProp = (prop) => (array) => (array || []).reduce((prev, curr) => prev + (curr[prop] || 0), 0);\n/**\n * @hidden\n */\nconst sumColumnWidths = sumProp('width');\n/**\n * @hidden\n */\nconst columnsSpan = sumProp('colspan');\n// tslint:disable-next-line:max-line-length\nconst validField = new RegExp(`^[$A-Z\\_a-z][$A-Z\\_a-z0-9\\\\.]*$`);\n/**\n * @hidden\n */\nconst isValidFieldName = (fieldName) => !isNullOrEmptyString(fieldName) && validField.test(fieldName) &&\n fieldName[0] !== \".\" && fieldName[fieldName.length - 1] !== \".\";\n/**\n * @hidden\n */\nconst children = column => column.children.filter(child => child !== column);\n/**\n * @hidden\n */\nconst leafColumns = columns => {\n return columns.reduce((acc, column) => {\n if (column.isColumnGroup) {\n acc = acc.concat(leafColumns(children(column)));\n }\n else if (column.isSpanColumn) {\n acc = acc.concat(column.childrenArray);\n }\n else {\n acc.push(column);\n }\n return acc;\n }, []).filter(x => x.isVisible); // tslint:disable-line:align\n};\n/**\n * @hidden\n */\nconst someLeafColumn = (callback, ...columns) => leafColumns(columns).some(callback);\n/**\n * @hidden\n */\nconst resizableColumns = columns => columns.filter(column => isTruthy(column.resizable) && column.isVisible);\n/**\n * @hidden\n */\nconst sortColumns = (columns) => orderBy(columns, [{ field: 'orderIndex', dir: 'asc' }]);\n/**\n * @hidden\n */\nconst isInSpanColumn = (column) => isTruthy(column.parent) && isSpanColumnComponent(column.parent);\n\n/**\n * @hidden\n */\nfunction isColumnGroupComponent(column) {\n return column.isColumnGroup;\n}\n/**\n * Represents the column group header of the Grid\n * ([more information and examples]({% slug multicolumnheaders_columns_grid %})).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Column index: {{columnIndex}} / column title: {{column.title}}\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass ColumnGroupComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n /**\n * @hidden\n */\n this.includeInChooser = false;\n /**\n * @hidden\n */\n this.isColumnGroup = true;\n /**\n * @hidden\n */\n this.minResizableWidth = 10;\n if (parent && parent.isSpanColumn) {\n throw new Error('ColumnGroupComponent cannot be nested inside SpanColumnComponent');\n }\n }\n /**\n * @hidden\n */\n rowspan() {\n return 1;\n }\n /**\n * @hidden\n */\n get colspan() {\n if (!this.children || this.children.length === 1) {\n return 1;\n }\n return columnsSpan(this.children\n .filter(child => child !== this && child.isVisible));\n }\n /**\n * @hidden\n */\n get leafIndex() {\n return this.children ? (this.firstChild || {}).leafIndex : -1;\n }\n get childrenArray() {\n return this.children.filter(c => c !== this);\n }\n get hasChildren() {\n return Boolean(this.firstChild);\n }\n get firstChild() {\n return this.children.find(column => column !== this);\n }\n}\nColumnGroupComponent.ɵfac = function ColumnGroupComponent_Factory(t) { return new (t || ColumnGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nColumnGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnGroupComponent, selectors: [[\"kendo-grid-column-group\"]], contentQueries: function ColumnGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnGroupComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnGroupComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnGroupComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnGroupComponent.propDecorators = {\n children: [{ type: ContentChildren, args: [ColumnBase$1,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnGroupComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnGroupComponent)\n }\n ],\n selector: 'kendo-grid-column-group',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { children: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }] }); })();\n\n/**\n * Represents the detail template of the Grid ([more information and examples]({% slug detailrowtemplate_grid %})).\n * To define the detail template, nest an `` tag with the `kendoGridDetailTemplate` directive inside a `` tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n *
    \n *
    {{dataItem.Category?.CategoryName}}
    \n * {{dataItem.Category?.Description}}\n *
    \n *
    \n *
    \n * `\n * })\n *\n * class AppComponent {\n * public data = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 3,\n * \"ProductName\": \"Aniseed Syrup\",\n * \"UnitPrice\": 10.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 2,\n * \"CategoryName\": \"Condiments\",\n * \"Description\": \"Sweet and savory sauces, relishes, spreads, and seasonings\"\n * }\n * }];\n *\n * }\n *\n * ```\n *\n */\nclass DetailTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._condition = () => true;\n }\n /**\n * Defines the function that indicates if a given detail row and the associated **Expand** or **Collapse** button will be displayed.\n */\n set showIf(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`showIf must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._condition = fn;\n }\n get showIf() {\n return this._condition;\n }\n}\nDetailTemplateDirective.ɵfac = function DetailTemplateDirective_Factory(t) { return new (t || DetailTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDetailTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DetailTemplateDirective, selectors: [[\"\", \"kendoGridDetailTemplate\", \"\"]], inputs: { showIf: [\"kendoGridDetailTemplateShowIf\", \"showIf\"] } });\n/** @nocollapse */\nDetailTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\nDetailTemplateDirective.propDecorators = {\n showIf: [{ type: Input, args: [\"kendoGridDetailTemplateShowIf\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DetailTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridDetailTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, { showIf: [{\n type: Input,\n args: [\"kendoGridDetailTemplateShowIf\"]\n }] }); })();\n\nconst canCreateElement = () => isDocumentAvailable() && document.createElement;\nlet cachedScrollbarWidth = null;\nlet cachedPixelRatio;\nlet cachedRtlScrollLeft = null;\nfunction scrollbarWidth() {\n if (cachedScrollbarWidth === null && canCreateElement()) {\n cachedPixelRatio = window.devicePixelRatio || 1;\n const div = document.createElement(\"div\");\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n cachedScrollbarWidth = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n }\n return cachedScrollbarWidth;\n}\nfunction rtlScrollLeft() {\n if (cachedRtlScrollLeft === null && canCreateElement()) {\n const div = document.createElement(\"div\");\n div.style.cssText = \"overflow:scroll;zoom:1;clear:both;display:block;width:100px;visibility:hidden;position:absolute;left:-10000px;direction:rtl;\";\n div.innerHTML = \"
    \";\n document.body.appendChild(div);\n const initial = div.scrollLeft;\n div.scrollLeft = -1;\n cachedRtlScrollLeft = div.scrollLeft < 0 ? div.scrollLeft : initial;\n document.body.removeChild(div);\n }\n return cachedRtlScrollLeft;\n}\n/**\n * @hidden\n * move to kendo-common\n */\nclass BrowserSupportService {\n constructor(zone, changeDetector) {\n this.zone = zone;\n this.changeDetector = changeDetector;\n this.changes = new EventEmitter();\n if (typeof window === 'undefined') {\n return;\n }\n this.zone.runOutsideAngular(() => {\n this.subscriptions = fromEvent(window, 'resize').pipe(auditTime(100)).subscribe(() => {\n if (cachedPixelRatio !== window.devicePixelRatio) {\n zone.run(() => {\n cachedScrollbarWidth = null;\n this.changes.emit();\n this.changeDetector.markForCheck();\n });\n }\n });\n });\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n this.subscriptions = null;\n }\n }\n get scrollbarWidth() {\n return scrollbarWidth();\n }\n get rtlScrollLeft() {\n return rtlScrollLeft();\n }\n}\nBrowserSupportService.ɵfac = function BrowserSupportService_Factory(t) { return new (t || BrowserSupportService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc0.ChangeDetectorRef)); };\nBrowserSupportService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BrowserSupportService, factory: BrowserSupportService.ɵfac });\n/** @nocollapse */\nBrowserSupportService.ctorParameters = () => [\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BrowserSupportService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/* tslint:disable:use-life-cycle-interface */\nconst isGroupItem = (source) => {\n return source.items !== undefined &&\n source.field !== undefined;\n};\nconst isVirtualGroupItem = (source) => {\n return source.offset !== undefined &&\n source.skipHeader !== undefined;\n};\nconst flattenGroups = (groups) => (groups.reduce((acc, curr) => {\n if (isGroupItem(curr)) {\n return acc.concat(flattenGroups(curr.items));\n }\n return acc.concat([curr]);\n}, []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst itemAt = (data, index) => {\n const first = data[0];\n if (isPresent(first) && isGroupItem(first)) {\n return flattenGroups(data)[index];\n }\n return data[index];\n};\n/**\n * @hidden\n */\nconst getIterator$1 = (data, { footers, level, dataIndex, parentGroupIndex, groupIndex }) => {\n const first = data[0];\n if (isPresent(first) && isGroupItem(first)) {\n if (isVirtualGroupItem(first)) {\n groupIndex = isPresent(first.offset) ? first.offset : groupIndex;\n }\n //tslint:disable-next-line:no-use-before-declare\n return new GroupIterator(data, footers, level, dataIndex, parentGroupIndex, groupIndex);\n }\n //tslint:disable-next-line:no-use-before-declare\n return new ItemIterator(data, dataIndex, parentGroupIndex);\n};\nclass ArrayIterator {\n constructor(arr, idx = 0) {\n this.arr = arr;\n this.idx = idx;\n this.arr = arr || [];\n }\n [iterator]() {\n return this;\n }\n next() {\n return this.idx < this.arr.length ? {\n done: false,\n value: this.arr[this.idx++]\n } : { done: true, value: undefined };\n }\n}\n/**\n * @hidden\n */\nclass Iterator {\n constructor(arr, dataIndex = 0, resultMap = (x) => x) {\n this.dataIndex = dataIndex;\n this.resultMap = resultMap;\n const iter = arr[iterator];\n this._innerIterator = iter ? arr[iterator]() : new ArrayIterator(arr);\n }\n [iterator]() {\n return this;\n }\n next() {\n return this.resultMap(this._innerIterator.next(), this.dataIndex++);\n }\n}\n/**\n * @hidden\n */\nclass ItemIterator extends Iterator {\n constructor(arr, dataIndex, groupIndex) {\n super(arr, dataIndex, (x, idx) => ({\n done: x.done,\n value: {\n data: x.value,\n groupIndex: groupIndex,\n index: idx,\n type: 'data'\n }\n }));\n }\n /**\n * The index of the next record.\n * @readonly\n * @type {number}\n */\n get index() {\n return this.dataIndex;\n }\n}\nconst prefix = (s, n) => {\n const p = s ? s + \"_\" : s;\n return `${p}${n}`;\n};\n/**\n * @hidden\n */\nclass GroupIterator {\n constructor(arr, outputFooters = false, level = 0, dataIndex = 0, parentIndex = \"\", groupIndex = 0) {\n this.arr = arr;\n this.outputFooters = outputFooters;\n this.level = level;\n this.dataIndex = dataIndex;\n this.parentIndex = parentIndex;\n this.groupIndex = groupIndex;\n this.currentGroupIndex = \"\";\n this.arr = arr || [];\n this._iterator = new Iterator(this.arr, this.dataIndex);\n }\n [iterator]() {\n return this;\n }\n nextGroupItem() {\n this.current = this._iterator.next().value;\n this._innerIterator = null;\n if (this.current) {\n this.currentGroupIndex = prefix(this.parentIndex, this.groupIndex++);\n return {\n done: false,\n value: {\n data: this.current,\n index: this.currentGroupIndex,\n level: this.level,\n type: 'group'\n }\n };\n }\n else {\n this.current = null;\n return { done: true, value: undefined };\n }\n }\n footerItem() {\n if (this.current) {\n const group = this.current;\n this.current = null;\n return {\n done: false,\n value: {\n data: group,\n groupIndex: this.currentGroupIndex,\n level: this.level,\n type: 'footer'\n }\n };\n }\n else {\n this.current = null;\n return { done: true, value: undefined };\n }\n }\n innerIterator(group) {\n if (!this._innerIterator) {\n this._innerIterator = getIterator$1(group.items, {\n dataIndex: this.dataIndex,\n footers: this.outputFooters,\n level: this.level + 1,\n parentGroupIndex: this.currentGroupIndex\n });\n }\n return this._innerIterator;\n }\n nextDataItem(group) {\n const iterator$$1 = this.innerIterator(group);\n const result = iterator$$1.next();\n if (isPresent(result.value) && !result.done && result.value.type === \"data\") {\n this.dataIndex = result.value.index + 1;\n }\n return !result.done ? result : undefined;\n }\n next() {\n if (!isPresent(this.current)) {\n return this.nextGroupItem();\n }\n const item = this.nextDataItem(this.current);\n return item ? item : (this.outputFooters ? this.footerItem() : this.nextGroupItem());\n }\n /**\n * The index of the last iterated data record.\n * @readonly\n * @type {number}\n */\n get index() {\n return this.dataIndex + 1;\n }\n}\n\n/**\n * @hidden\n */\nclass DataResultIterator {\n constructor(source, skip = 0, groupFooters = false) {\n this.source = source;\n this.skip = skip;\n this.groupFooters = groupFooters;\n this.source = this.source ? this.source : [];\n this.isObject = this.isGridDataResult(this.source);\n }\n isGridDataResult(source) {\n return source.total !== undefined && source.data !== undefined;\n }\n get total() {\n return this.isObject ? this.source.total : this.source.length;\n }\n get data() {\n return this.isObject ? this.source.data : this.source;\n }\n map(fn) {\n return this.data.map(fn);\n }\n filter(fn) {\n return this.data.filter(fn);\n }\n reduce(fn, init) {\n return this.data.reduce(fn, init);\n }\n forEach(fn) {\n this.data.forEach(fn);\n }\n some(fn) {\n return this.data.some(fn);\n }\n [iterator]() {\n return getIterator$1(this.data, {\n dataIndex: this.skip,\n footers: this.groupFooters,\n groupIndex: this.skip\n });\n }\n toString() { return this.data.toString(); }\n}\n/**\n * @hidden\n */\nclass DataCollection {\n constructor(accessor) {\n this.accessor = accessor;\n }\n get total() { return this.accessor().total; }\n get length() { return this.accessor().data.length; }\n get first() { return this.accessor().data[0]; }\n get last() { return this.accessor().data[this.length - 1]; }\n at(index) {\n return itemAt(this.accessor().data, index);\n }\n map(fn) { return this.accessor().map(fn); }\n filter(fn) {\n return this.accessor().filter(fn);\n }\n reduce(fn, init) {\n return this.accessor().reduce(fn, init);\n }\n forEach(fn) {\n this.accessor().forEach(fn);\n }\n some(fn) {\n return this.accessor().some(fn);\n }\n [iterator]() {\n return this.accessor()[iterator]();\n }\n toString() { return this.accessor().toString(); }\n}\n\n/* tslint:disable:no-input-rename */\n/**\n * @hidden\n */\nclass Selection {\n constructor(grid, cd) {\n this.grid = grid;\n this.cd = cd;\n /**\n * Defines the collection that will store the selected item keys.\n */\n this.selectedKeys = [];\n /**\n * Fires when the `selectedKeys` collection has been updated.\n */\n this.selectedKeysChange = new EventEmitter();\n this.init();\n }\n init() {\n if (!isPresent(this.grid.rowSelected)) {\n this.grid.rowSelected = (row) => {\n return this.selectedKeys.indexOf(this.getItemKey(row)) >= 0;\n };\n }\n if (!isPresent(this.grid.cellSelected)) {\n this.grid.cellSelected = (row, column, colIndex) => {\n const contender = this.getSelectionItem(row, column, colIndex);\n return {\n selected: this.selectedKeys.some(item => item.columnKey === contender.columnKey && item.itemKey === contender.itemKey),\n item: contender\n };\n };\n }\n this.selectionChangeSubscription = this.grid\n .selectionChange\n .subscribe(this.onSelectionChange.bind(this));\n }\n /**\n * @hidden\n */\n destroy() {\n this.selectionChangeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n reset() {\n this.selectedKeys = [];\n }\n getItemKey(row) {\n if (this.selectionKey) {\n if (typeof this.selectionKey === \"string\") {\n return row.dataItem[this.selectionKey];\n }\n if (typeof this.selectionKey === \"function\") {\n return this.selectionKey(row);\n }\n }\n return row.index;\n }\n getSelectionItem(row, col, colIndex) {\n const itemIdentifiers = {};\n itemIdentifiers.itemKey = this.getItemKey(row);\n if (!isPresent(col) && !isPresent(colIndex)) {\n return itemIdentifiers;\n }\n if (this.columnKey) {\n if (typeof this.columnKey === \"string\") {\n itemIdentifiers.columnKey = row.dataItem[this.columnKey];\n }\n if (typeof this.columnKey === \"function\") {\n itemIdentifiers.columnKey = this.columnKey(col, colIndex);\n }\n }\n return {\n itemKey: itemIdentifiers.itemKey,\n columnKey: itemIdentifiers.columnKey ? itemIdentifiers.columnKey : colIndex\n };\n }\n onSelectionChange(selection) {\n if (selection.selectedRows) {\n selection.deselectedRows.forEach((item) => {\n const itemKey = this.getItemKey(item);\n const itemIndex = this.selectedKeys.indexOf(itemKey);\n if (itemIndex >= 0) {\n this.selectedKeys.splice(itemIndex, 1);\n }\n });\n if (this.grid.selectableSettings.mode === \"single\" && this.selectedKeys.length > 0) {\n this.reset();\n }\n selection.selectedRows.forEach((item) => {\n const itemKey = this.getItemKey(item);\n if (this.selectedKeys.indexOf(itemKey) < 0) {\n this.selectedKeys.push(itemKey);\n }\n });\n }\n else {\n selection.deselectedCells.forEach((item) => {\n const itemIndex = this.getCellSelectionItemIndex(item);\n if (itemIndex >= 0) {\n this.selectedKeys.splice(itemIndex, 1);\n }\n });\n if (this.grid.selectableSettings.mode === \"single\" && this.selectedKeys.length > 0) {\n this.reset();\n }\n selection.selectedCells.forEach((item) => {\n const itemIndex = this.getCellSelectionItemIndex(item);\n if (itemIndex < 0) {\n this.selectedKeys.push(item);\n }\n });\n }\n this.cd.markForCheck();\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n getCellSelectionItemIndex(item) {\n return this.selectedKeys.findIndex(selectedItem => selectedItem.itemKey === item.itemKey && selectedItem.columnKey === item.columnKey);\n }\n}\nSelection.ɵfac = function Selection_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSelection.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Selection, inputs: { selectedKeys: \"selectedKeys\", selectionKey: [\"kendoGridSelectBy\", \"selectionKey\"], columnKey: \"columnKey\" }, outputs: { selectedKeysChange: \"selectedKeysChange\" } });\nSelection.propDecorators = {\n selectedKeys: [{ type: Input }],\n selectionKey: [{ type: Input, args: [\"kendoGridSelectBy\",] }],\n columnKey: [{ type: Input }],\n selectedKeysChange: [{ type: Output }]\n};\n\n\nconst reset = (...lists) => {\n let diff = false;\n for (let idx = 0; idx < lists.length; idx++) {\n const [list, columns] = lists[idx];\n diff = diff || list.length !== columns.length;\n list.reset(columns);\n }\n return diff;\n};\n/**\n * @hidden\n */\nclass ColumnsContainer {\n constructor(columns) {\n this.columns = columns;\n this.allColumns = new QueryList();\n this.leafColumns = new QueryList();\n this.lockedColumns = new QueryList();\n this.nonLockedColumns = new QueryList();\n this.lockedLeafColumns = new QueryList();\n this.nonLockedLeafColumns = new QueryList();\n this.totalLevels = 0;\n this.changes = new EventEmitter();\n this.leafColumnsToRender = [];\n this.lockedColumnsToRender = [];\n this.nonLockedColumnsToRender = [];\n this.hasGroupHeaderColumn = false;\n this.hasGroupFooter = false;\n this.hasFooter = false;\n this.unlockedWidth = 0;\n }\n refresh() {\n const currentLevels = this.totalLevels;\n const leafColumns$$1 = new Array();\n const lockedLeafColumns = new Array();\n const nonLockedLeafColumns = new Array();\n const lockedColumns = new Array();\n const nonLockedColumns = new Array();\n const allColumns = new Array();\n const leafColumnsToRender = new Array();\n const lockedColumnsToRender = new Array();\n const nonLockedColumnsToRender = new Array();\n let hasGroupHeaderColumn = false;\n let hasGroupFooter = false;\n let hasFooter = false;\n let unlockedWidth = 0;\n let leafIndex = 0;\n this.totalLevels = 0;\n this.columns().forEach(column => {\n const containerLeafColumns = column.isLocked === true ? lockedLeafColumns : nonLockedLeafColumns;\n const containerColumns = column.isLocked === true ? lockedColumns : nonLockedColumns;\n const toRenderContainer = column.isLocked === true ? lockedColumnsToRender : nonLockedColumnsToRender;\n if (!isColumnGroupComponent(column)) {\n containerLeafColumns.push(column);\n leafColumns$$1.push(column);\n leafColumnsToRender.push.apply(leafColumnsToRender, columnsToRender([column]));\n toRenderContainer.push.apply(toRenderContainer, columnsToRender([column]));\n hasGroupHeaderColumn = hasGroupHeaderColumn || someLeafColumn(leaf => Boolean(leaf.groupHeaderColumnTemplateRef), column);\n hasGroupFooter = hasGroupFooter || someLeafColumn(leaf => Boolean(leaf.groupFooterTemplateRef), column);\n hasFooter = hasFooter || someLeafColumn(leaf => Boolean(leaf.footerTemplateRef), column);\n if (!column.isLocked) {\n unlockedWidth += column.width || 0;\n }\n if (column.isSpanColumn) {\n column.childColumns.forEach(c => {\n c.leafIndex = leafIndex++;\n });\n }\n else {\n column.leafIndex = leafIndex++;\n }\n }\n containerColumns.push(column);\n allColumns.push(column);\n this.totalLevels = column.level > this.totalLevels ? column.level : this.totalLevels;\n });\n this.hasGroupHeaderColumn = hasGroupHeaderColumn;\n this.hasGroupFooter = hasGroupFooter;\n this.hasFooter = hasFooter;\n this.leafColumnsToRender = leafColumnsToRender;\n this.lockedColumnsToRender = lockedColumnsToRender;\n this.nonLockedColumnsToRender = nonLockedColumnsToRender;\n this.unlockedWidth = unlockedWidth;\n const changes = reset([this.leafColumns, leafColumns$$1], [this.lockedLeafColumns, lockedLeafColumns], [this.nonLockedLeafColumns, nonLockedLeafColumns], [this.lockedColumns, lockedColumns], [this.allColumns, allColumns], [this.nonLockedColumns, nonLockedColumns]) || currentLevels !== this.totalLevels;\n if (changes) {\n this.changes.emit();\n }\n return changes;\n }\n}\n\nconst forEachColumn = (list, callback) => {\n list.forEach((column) => {\n callback(column);\n if (column.isColumnGroup && column.hasChildren) {\n forEachColumn(column.childrenArray, callback);\n }\n });\n};\nconst forEachLevel = (list, callback) => {\n sortColumns(list)\n .forEach((column) => {\n callback(column);\n if (column.isColumnGroup && column.hasChildren) {\n forEachLevel(column.childrenArray, callback);\n }\n });\n};\nconst filterHierarchy = (list, predicate) => {\n const result = [];\n sortColumns(list)\n .forEach((column) => {\n if (predicate(column)) {\n if (column.isColumnGroup) {\n const children$$1 = filterHierarchy(column.childrenArray, predicate);\n if (children$$1.length) {\n result.push(column, ...children$$1);\n }\n }\n else if (!column.isSpanColumn || filterHierarchy(column.childrenArray, predicate).length) {\n result.push(column);\n }\n }\n });\n return result;\n};\n/**\n * @hidden\n */\nclass ColumnList {\n constructor(columns) {\n this.columns = columns;\n }\n static empty() {\n return new ColumnList(new QueryList());\n }\n forEach(callback) {\n forEachColumn(this.columns, callback);\n }\n filter(callback) {\n const result = [];\n forEachColumn(this.columns, (column) => {\n if (callback(column)) {\n result.push(column);\n }\n });\n return result;\n }\n filterHierarchy(predicate) {\n return filterHierarchy(this.columns.toArray(), predicate);\n }\n filterSort(callback) {\n const result = [];\n forEachLevel(this.columns.toArray(), (column) => {\n if (callback(column)) {\n result.push(column);\n }\n });\n return result;\n }\n toArray() {\n const result = [];\n forEachColumn(this.columns, (column) => {\n result.push(column);\n });\n return result;\n }\n rootColumns() {\n return this.columns.toArray();\n }\n}\n\n/**\n * @hidden\n */\nclass GroupInfoService {\n constructor() {\n this._columnList = ColumnList.empty;\n }\n get columns() {\n return expandColumns(this._columnList().toArray()).filter(isColumnComponent);\n }\n registerColumnsContainer(columns) {\n this._columnList = columns;\n }\n formatForGroup(item) {\n const column = this.columnForGroup(item);\n return column ? column.format : \"\";\n }\n isGroupable(groupField) {\n const [column] = this.columns.filter(x => x.field === groupField);\n return column ? column.groupable : true;\n }\n groupTitle(item) {\n const column = this.columnForGroup(item);\n return column ? (column.title || column.field) : this.groupField(item);\n }\n groupHeaderTemplate(item) {\n const column = this.columnForGroup(item);\n return column ? column.groupHeaderTemplateRef || column.groupHeaderColumnTemplateRef : undefined;\n }\n groupField(group) {\n return group.data ? group.data.field : group.field;\n }\n columnForGroup(group) {\n const field = this.groupField(group);\n const [column] = this.columns.filter(x => x.field === field);\n return column;\n }\n}\nGroupInfoService.ɵfac = function GroupInfoService_Factory(t) { return new (t || GroupInfoService)(); };\nGroupInfoService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: GroupInfoService, factory: GroupInfoService.ɵfac });\n\n\n/**\n * @hidden\n */\nclass ChangeNotificationService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new EventEmitter();\n }\n notify() {\n if (!this.subscription || this.subscription.closed) {\n this.subscription = this.ngZone.onStable\n .asObservable().pipe(take(1))\n .subscribe(() => this.changes.emit());\n }\n }\n}\nChangeNotificationService.ɵfac = function ChangeNotificationService_Factory(t) { return new (t || ChangeNotificationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nChangeNotificationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ChangeNotificationService, factory: ChangeNotificationService.ɵfac });\n/** @nocollapse */\nChangeNotificationService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChangeNotificationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * Represents the no-records template of the Grid. Provides an option to customize the\n * appearance of the item that is displayed when no data is present. To define the no-records template,\n * nest an `` tag with the `kendoGridNoRecordsTemplate` directive inside ``.\n *\n * > When the locked columns of the Grid are in use, the template is displayed in the non-locked part of the content.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * There are not products. Click here to refresh.\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data = [];\n * public refresh() {\n * this.data = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 3,\n * \"ProductName\": \"Aniseed Syrup\",\n * \"UnitPrice\": 10.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 2,\n * \"CategoryName\": \"Condiments\",\n * \"Description\": \"Sweet and savory sauces, relishes, spreads, and seasonings\"\n * }\n * }];\n *\n * }\n * }\n *\n * ```\n */\nclass NoRecordsTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNoRecordsTemplateDirective.ɵfac = function NoRecordsTemplateDirective_Factory(t) { return new (t || NoRecordsTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nNoRecordsTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NoRecordsTemplateDirective, selectors: [[\"\", \"kendoGridNoRecordsTemplate\", \"\"]] });\n/** @nocollapse */\nNoRecordsTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NoRecordsTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridNoRecordsTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\nconst set = value => pair => pair.forEach(x => x.style.height = value);\nconst clearHeight = pairs => pairs\n .filter(([left, right]) => left.style.height || right.style.height)\n .forEach(set(\"\"));\nconst zip$1 = (arr1, arr2) => {\n const result = [];\n for (let idx = 0, len = arr1.length; idx < len; idx++) {\n if (!arr2[idx]) {\n break;\n }\n result.push([arr1[idx], arr2[idx]]);\n }\n return result;\n};\nconst setHeight = heights => (row, idx) => set(`${heights[idx] + 1}px`)(row);\nconst getHeights = rows => rows.map(([left, right]) => {\n const height = left.offsetHeight;\n const offsetHeight2 = right.offsetHeight;\n if (height < offsetHeight2) {\n return offsetHeight2;\n }\n return height;\n});\n/**\n * @hidden\n */\nconst syncRowsHeight = (table1, table2) => {\n const activeElement = document.activeElement;\n const rows = zip$1(table1.rows, table2.rows);\n clearHeight(rows);\n const heights = getHeights(rows);\n [table1, table2].forEach(x => x.style.display = 'none');\n rows.forEach(setHeight(heights));\n [table1, table2].forEach(x => x.style.display = '');\n if (document.activeElement !== activeElement &&\n (table1.contains(activeElement) || table2.contains(activeElement))) {\n activeElement.focus();\n }\n};\n\n/**\n * Represents a service to set the filter descriptor\n * ([see example]({% slug reusablecustomfilters_grid %})).\n */\nclass FilterService {\n constructor() {\n /**\n * Fires when the filter descriptors is set.\n */\n this.changes = new Subject();\n }\n /**\n * Sets the filter descriptor.\n *\n * @param {CompositeFilterDescriptor} value - The filter descriptor that will be set.\n */\n filter(value) {\n this.changes.next(value);\n }\n}\nFilterService.ɵfac = function FilterService_Factory(t) { return new (t || FilterService)(); };\nFilterService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FilterService, factory: FilterService.ɵfac });\n\n\n/**\n * Represents the pager template which helps to customize the pager appearance in the Grid. To define a pager\n * template, nest an `` tag with the `kendoPagerTemplate` directive inside ``.\n *\n * The template context provides the following fields:\n * * `currentPage`—The index of the displayed page.\n * * `pageSize`—The value of the current `pageSize`.\n * * `skip`—The current skip value.\n * * `total`—The total number of records.\n * * `totalPages`—The total number of available pages.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * Current page: {{currentPage}}\n * \n *\n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass PagerTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPagerTemplateDirective.ɵfac = function PagerTemplateDirective_Factory(t) { return new (t || PagerTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPagerTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PagerTemplateDirective, selectors: [[\"\", \"kendoPagerTemplate\", \"\"]] });\n/** @nocollapse */\nPagerTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPagerTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PDFService {\n constructor() {\n this.savePDF = new EventEmitter();\n this.drawPDF = new EventEmitter();\n this.exportClick = new EventEmitter();\n this.dataChanged = new EventEmitter();\n }\n save(component) {\n this.emitEvent(this.savePDF, component);\n }\n draw(component, promise) {\n this.emitEvent(this.drawPDF, { component, promise });\n }\n emitEvent(emitter, args) {\n if (emitter.observers.length === 0) {\n if (isDevMode()) {\n throw new Error('Creating PDF requires including the PDFModule and adding the component.');\n }\n }\n else {\n emitter.emit(args);\n }\n }\n}\nPDFService.ɵfac = function PDFService_Factory(t) { return new (t || PDFService)(); };\nPDFService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PDFService, factory: PDFService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Arguments for the `pdfExport` event.\n */\nclass PDFExportEvent extends PreventableEvent {\n}\n\n/**\n * @hidden\n */\nclass SuspendService {\n constructor() {\n this.scroll = false;\n }\n}\nSuspendService.ɵfac = function SuspendService_Factory(t) { return new (t || SuspendService)(); };\nSuspendService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SuspendService, factory: SuspendService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SuspendService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/* tslint:disable: object-literal-sort-keys */\nconst bootstrapToMedia = (media) => (({\n \"xs\": \"(max-width: 576px)\",\n \"sm\": \"(min-width: 576px)\",\n \"md\": \"(min-width: 768px)\",\n \"lg\": \"(min-width: 992px)\",\n \"xl\": \"(min-width: 1200px)\"\n})[media] || media);\n/* tslint:enable: object-literal-sort-keys */\nconst browserMatchMedia = (media) => window.matchMedia(media).matches;\n/**\n * @hidden\n */\nclass ResponsiveService {\n constructor() {\n /**\n * @hidden\n */\n this.matchMedia = browserMatchMedia;\n }\n /**\n * @hidden\n */\n matchesMedia(media) {\n return !media || this.matchMedia(bootstrapToMedia(media));\n }\n}\nResponsiveService.ɵfac = function ResponsiveService_Factory(t) { return new (t || ResponsiveService)(); };\nResponsiveService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ResponsiveService, factory: ResponsiveService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResponsiveService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ExcelService {\n constructor() {\n this.saveToExcel = new EventEmitter();\n this.exportClick = new EventEmitter();\n }\n save(component) {\n if (this.saveToExcel.observers.length === 0) {\n if (isDevMode()) {\n throw new Error('Saving excel requires including the ExcelModule and adding the component.');\n }\n }\n else {\n this.saveToExcel.emit(component);\n }\n }\n}\nExcelService.ɵfac = function ExcelService_Factory(t) { return new (t || ExcelService)(); };\nExcelService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ExcelService, factory: ExcelService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Represents the toolbar template of the Grid.\n *\n * The template context has the following field:\n * - `position`—The position at which the toolbar template is rendered. The possible values are \"top\" and \"bottom\".\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    \n * \n *
    \n * \n *
    \n * \n *
    \n *
    \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public position: 'top' | 'bottom' | 'both' = 'top';\n *\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n *\n * public onClick(): void {\n * console.log(\"button was clicked\");\n * }\n *\n * public positionChange({ target }): void {\n * this.position = target.value;\n * }\n * }\n *\n * ```\n */\nclass ToolbarTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._position = \"top\";\n }\n /**\n * The position of the toolbar ([see example]({% slug toolbartemplate_grid %})).\n *\n * The possible values are:\n * - `top`—Positions the toolbar above the group panel or header.\n * - `bottom`—Positions the toolbar below the pager.\n * - `both`—Displays two toolbar instances. Positions the first one above\n * the group panel or header and the second one below the pager.\n */\n set position(position) {\n this._position = position;\n }\n get position() {\n return this._position;\n }\n}\nToolbarTemplateDirective.ɵfac = function ToolbarTemplateDirective_Factory(t) { return new (t || ToolbarTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nToolbarTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ToolbarTemplateDirective, selectors: [[\"\", \"kendoGridToolbarTemplate\", \"\"]], inputs: { position: \"position\" } });\n/** @nocollapse */\nToolbarTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\nToolbarTemplateDirective.propDecorators = {\n position: [{ type: Input, args: [\"position\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ToolbarTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridToolbarTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, { position: [{\n type: Input,\n args: [\"position\"]\n }] }); })();\n\n/**\n * @hidden\n */\nclass ScrollSyncService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new Subject();\n this.elements = [];\n this.subscriptions = new Subscription();\n this.headerSubscription = new Subscription();\n this.bodySubscription = new Subscription();\n this.subscriptions.add(this.changes.subscribe(args => this.scrollLeft(args)));\n }\n registerEmitter(el, sourceType) {\n this.unregister(sourceType);\n this.elements.push({ element: el, sourceType });\n if (sourceType === \"body\" || sourceType === \"header\") {\n this.ngZone.runOutsideAngular(() => {\n const obs = fromEvent(el, \"scroll\").pipe(map(({ target: { scrollLeft } }) => ({\n scrollLeft,\n sourceType\n })));\n const subscription = obs.pipe(distinctUntilChanged((x, y) => (x.scrollLeft === y.scrollLeft)), filter(x => !this.source || this.source === x.sourceType), tap(x => this.source = x.sourceType))\n .subscribe((x) => this.changes.next(x));\n subscription.add(obs.pipe(filter(x => this.source && this.source !== x.sourceType))\n .subscribe(() => this.source = undefined));\n if (sourceType === \"body\") {\n this.bodySubscription.add(subscription);\n }\n else {\n this.headerSubscription.add(subscription);\n }\n });\n }\n }\n /**\n * destroy\n */\n destroy() {\n this.subscriptions.unsubscribe();\n this.headerSubscription.unsubscribe();\n this.bodySubscription.unsubscribe();\n }\n scrollLeft({ scrollLeft, sourceType }) {\n this.ngZone.runOutsideAngular(() => {\n this.elements\n .filter(x => sourceType !== x.sourceType)\n .forEach(({ element }) => element.scrollLeft = scrollLeft);\n });\n }\n unregister(sourceType) {\n const index = this.elements.findIndex(x => x.sourceType === sourceType);\n if (index > -1) {\n if (sourceType === \"header\") {\n this.headerSubscription.unsubscribe();\n this.headerSubscription = new Subscription();\n }\n else if (sourceType === \"body\") {\n this.bodySubscription.unsubscribe();\n this.bodySubscription = new Subscription();\n }\n this.elements.splice(index, 1);\n }\n }\n}\nScrollSyncService.ɵfac = function ScrollSyncService_Factory(t) { return new (t || ScrollSyncService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nScrollSyncService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollSyncService, factory: ScrollSyncService.ɵfac });\n/** @nocollapse */\nScrollSyncService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollSyncService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ResizeService {\n constructor() {\n this.resizeSubscription = new Subscription(() => { });\n this.dispatcher = new Subject();\n // tslint:disable-next-line:member-ordering\n this.changes = this.dispatcher.asObservable().pipe(throttleTime(100));\n }\n connect(resizes) {\n this.resizeSubscription.add(resizes.subscribe(this.dispatcher));\n }\n destroy() {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n}\nResizeService.ɵfac = function ResizeService_Factory(t) { return new (t || ResizeService)(); };\nResizeService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ResizeService, factory: ResizeService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResizeService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nconst isLocked = column => column.parent ? isLocked(column.parent) : !!column.locked;\n/**\n * @hidden\n */\nconst resizeArgs = (column, extra) => Object.assign({\n columns: leafColumns([column]),\n locked: isLocked(column)\n}, extra); // tslint:disable-line:align\n/**\n * @hidden\n */\nclass ColumnResizingService {\n constructor() {\n this.changes = new EventEmitter();\n this.tables = [];\n this.batch = null;\n }\n start(column) {\n this.trackColumns(column);\n const columns = (this.column.isColumnGroup ? [column] : [])\n .concat(leafColumns([column]));\n this.changes.emit({\n columns: columns,\n locked: isLocked(this.column),\n type: 'start'\n });\n }\n resizeColumns(deltaPercent) {\n const action = resizeArgs(this.column, {\n deltaPercent,\n type: 'resizeColumn'\n });\n this.changes.emit(action);\n }\n resizeTable(column, delta) {\n const action = resizeArgs(column, {\n delta,\n type: 'resizeTable'\n });\n this.changes.emit(action);\n }\n resizedColumn(state$$1) {\n this.resizedColumns.push(state$$1);\n }\n end() {\n this.changes.emit({\n columns: [],\n resizedColumns: this.resizedColumns,\n type: 'end'\n });\n }\n registerTable(tableMetadata) {\n this.tables.push(tableMetadata);\n const unregisterTable = () => {\n this.tables.splice(this.tables.indexOf(tableMetadata), 1);\n };\n return unregisterTable;\n }\n measureColumns(info) {\n if (this.batch !== null) {\n this.batch.push(...info);\n }\n else {\n this.autoFitBatch(info, () => this.end());\n }\n }\n autoFit(...columns) {\n const nonLockedColumns = columns.filter(column => !column.isLocked);\n this.autoFitStart(nonLockedColumns);\n this.autoFitBatch(this.batch, () => {\n if (nonLockedColumns.length < columns.length) {\n const lockedColumns = columns.filter(column => column.isLocked);\n this.autoFitStart(lockedColumns);\n this.autoFitBatch(this.batch, () => this.end());\n }\n else {\n this.end();\n }\n });\n }\n trackColumns(column) {\n this.resizedColumns = [];\n this.column = column;\n }\n autoFitStart(columns) {\n this.batch = [];\n this.resizedColumns = [];\n if (columns.length === 0) {\n return;\n }\n const locked = columns[0].isLocked;\n this.changes.emit({\n type: 'start',\n columns,\n locked\n });\n this.changes.emit({\n type: 'triggerAutoFit',\n columns,\n locked\n });\n }\n autoFitBatch(info, onComplete) {\n const locked = info.length > 0 ? info[0].column.isLocked : false;\n const observables = this.tables\n .filter(table => table.locked === locked)\n .map(table => table.autoFit(info));\n zip(...observables)\n .pipe(take(1))\n .subscribe(widths => {\n this.changes.emit({\n columns: info.map(i => i.column),\n type: 'autoFitComplete',\n widths,\n locked\n });\n if (onComplete) {\n onComplete();\n }\n });\n this.batch = null;\n }\n}\nColumnResizingService.ɵfac = function ColumnResizingService_Factory(t) { return new (t || ColumnResizingService)(); };\nColumnResizingService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnResizingService, factory: ColumnResizingService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnResizingService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\n/**\n * @hidden\n */\nconst hasFilterMenu = (settings) => typeof settings === 'string' && settings.indexOf('menu') > -1;\n/**\n * @hidden\n */\nconst hasFilterRow = (settings) => settings === true || (typeof settings === 'string' && settings.indexOf('row') > -1);\n\nconst contains$1 = (node, predicate) => {\n while (node) {\n if (predicate(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n};\n/**\n * Arguments for the `close` event of the filter and column-menu popup.\n */\nclass PopupCloseEvent extends PreventableEvent {\n constructor(e) {\n super();\n this.originalEvent = e;\n }\n}\nconst DEFAULT_POPUP_CLASS = 'k-grid-filter-popup';\n/**\n * The service that is used for the popups of the filter and column menus\n * ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-menu-with-popup)).\n */\nclass SinglePopupService {\n constructor(popupService, renderer, ngZone, scrollSyncService, localization) {\n this.popupService = popupService;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localization = localization;\n /**\n * Fires when the filter or column menus are about to close because the user clicked outside their popups.\n * Used to prevent the popup from closing.\n */\n this.onClose = new Subject();\n this.scrollSubscription = scrollSyncService.changes.subscribe(() => this.destroy());\n }\n /**\n * @hidden\n */\n open(anchor, template, popupRef, popupClass = DEFAULT_POPUP_CLASS) {\n const toggle = isPresent(popupRef) && this.popupRef === popupRef;\n this.destroy();\n if (!toggle) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction },\n anchor: anchor,\n popupClass: popupClass,\n content: template,\n positionMode: \"absolute\"\n });\n this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');\n this.attachClose(anchor);\n }\n return this.popupRef;\n }\n /**\n * @hidden\n */\n destroy() {\n if (this.popupRef) {\n this.detachClose();\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n ngOnDestroy() {\n this.destroy();\n this.scrollSubscription.unsubscribe();\n }\n detachClose() {\n if (this.removeClick) {\n this.removeClick();\n }\n }\n attachClose(skipElement) {\n this.detachClose();\n this.ngZone.runOutsideAngular(() => this.removeClick = this.renderer.listen(\"document\", \"click\", (e) => {\n if (!contains$1(e.target, x => this.popupRef.popupElement === x || x === skipElement)) {\n const args = new PopupCloseEvent(e);\n this.onClose.next(args);\n if (!args.isDefaultPrevented()) {\n this.destroy();\n }\n }\n }));\n }\n}\nSinglePopupService.ɵfac = function SinglePopupService_Factory(t) { return new (t || SinglePopupService)(ɵngcc0.ɵɵinject(ɵngcc3.PopupService), ɵngcc0.ɵɵinject(ɵngcc0.Renderer2), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ScrollSyncService), ɵngcc0.ɵɵinject(ɵngcc1.LocalizationService)); };\nSinglePopupService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SinglePopupService, factory: SinglePopupService.ɵfac });\n/** @nocollapse */\nSinglePopupService.ctorParameters = () => [\n { type: PopupService },\n { type: Renderer2 },\n { type: NgZone },\n { type: ScrollSyncService },\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SinglePopupService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc3.PopupService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ScrollSyncService }, { type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/* tslint:disable: no-bitwise */\n/**\n * @hidden\n */\nconst append = (element) => {\n let appended = false;\n return () => {\n if (!appended) {\n document.body.appendChild(element);\n appended = true;\n }\n return element;\n };\n};\n/**\n * @hidden\n */\nconst getDocument = element => element.ownerDocument.documentElement;\n/**\n * @hidden\n */\nconst getWindow = element => element.ownerDocument.defaultView;\n/**\n * @hidden\n */\nconst offset = element => {\n const { clientTop, clientLeft } = getDocument(element);\n const { pageYOffset, pageXOffset } = getWindow(element);\n const { top, left } = element.getBoundingClientRect();\n return {\n top: top + pageYOffset - clientTop,\n left: left + pageXOffset - clientLeft\n };\n};\n/**\n * @hidden\n * If the target is before the draggable element, returns `true`.\n *\n * DOCUMENT_POSITION_FOLLOWING = 4\n */\nconst isTargetBefore = (draggable, target) => (target.compareDocumentPosition(draggable) & 4) !== 0;\n/**\n * @hidden\n * If the container and the element are the same\n * or if the container holds (contains) the element, returns `true`.\n *\n * DOCUMENT_POSITION_CONTAINED_BY = 16\n */\nconst contains$2 = (element, container) => element === container ||\n (container.compareDocumentPosition(element) & 16) !== 0;\n/**\n * @hidden\n */\nconst position = (target, before) => {\n const targetRect = offset(target);\n const { offsetWidth, offsetHeight } = target;\n const left = targetRect.left + (before ? 0 : offsetWidth);\n const top = targetRect.top;\n const height = offsetHeight;\n return { left, top, height };\n};\n\n/**\n * @hidden\n */\nclass DragAndDropService {\n constructor() {\n this.changes = new EventEmitter();\n this.register = [];\n this.lastTarget = null;\n }\n add(target) {\n this.register.push(target);\n }\n remove(target) {\n this.register = this.register.filter(current => current !== target);\n }\n notifyDrag(draggable, element, mouseEvent) {\n const target = this.targetFor(element);\n if (this.lastTarget === target) {\n return;\n }\n this.changes.next({\n draggable,\n mouseEvent,\n target: this.lastTarget,\n type: 'leave'\n });\n if (target) {\n this.changes.next({\n draggable,\n mouseEvent,\n target,\n type: 'enter'\n });\n }\n this.lastTarget = target;\n }\n notifyDrop(draggable, mouseEvent) {\n this.changes.next({\n draggable,\n mouseEvent,\n target: this.lastTarget,\n type: 'drop'\n });\n this.lastTarget = null;\n }\n targetFor(element) {\n const comparer = contains$2.bind(null, element);\n return this.register.find(({ element: { nativeElement } }) => comparer(nativeElement));\n }\n}\nDragAndDropService.ɵfac = function DragAndDropService_Factory(t) { return new (t || DragAndDropService)(); };\nDragAndDropService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DragAndDropService, factory: DragAndDropService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragAndDropService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst updateClass = (element, valid) => {\n const icon = element.querySelector('.k-icon');\n icon.className = icon.className\n .replace(/(plus|cancel)/, valid ? 'plus' : 'cancel');\n};\nconst updateLock = (element, locked = null) => {\n const icon = element.querySelectorAll('.k-icon')[1];\n const value = locked == null ? '' : (locked ? 'k-i-lock' : 'k-i-unlock');\n icon.className = icon.className\n .replace(/(k-i-unlock|k-i-lock)/, '') + ` ${value}`;\n};\nconst decorate = (element, target) => {\n const targetStyles = getComputedStyle(target);\n element.className = 'k-header k-drag-clue';\n element.style.position = 'absolute';\n element.style.zIndex = '20000';\n element.style.paddingLeft = targetStyles.paddingLeft;\n element.style.paddingTop = targetStyles.paddingTop;\n element.style.paddingBottom = targetStyles.paddingBottom;\n element.style.paddingRight = targetStyles.paddingRight;\n element.style.width = targetStyles.width;\n element.style.height = targetStyles.height;\n};\n/**\n * @hidden\n */\nclass DragHintService {\n constructor(santizer) {\n this.santizer = santizer;\n }\n create(down, target, title) {\n this.initCoords(down);\n this.dom = document.createElement(\"div\");\n decorate(this.dom, target);\n const safeTitle = this.santizer.sanitize(SecurityContext.HTML, title);\n this.dom.innerHTML = `\n \n \n \n ${safeTitle}\n `;\n }\n attach() {\n return append(this.dom);\n }\n remove() {\n if (this.dom && this.dom.parentNode) {\n (function (el) {\n setTimeout(() => document.body.removeChild(el));\n })(this.dom); // hack for IE + pointer events!\n this.dom = null;\n }\n }\n show() {\n this.dom.style.display = \"\";\n }\n hide() {\n this.dom.style.display = \"none\";\n }\n enable() {\n updateClass(this.dom, true);\n }\n disable() {\n updateClass(this.dom, false);\n }\n removeLock() {\n updateLock(this.dom);\n }\n toggleLock(locked) {\n updateLock(this.dom, locked);\n }\n move(move) {\n this.dom.style.top = this.initialTop + move.pageY + 'px';\n this.dom.style.left = this.initialLeft + move.pageX + 'px';\n }\n initCoords(down) {\n const { top, left } = offset(down.originalEvent.target);\n this.initialTop = top - down.pageY;\n this.initialLeft = left - down.pageX;\n }\n}\nDragHintService.ɵfac = function DragHintService_Factory(t) { return new (t || DragHintService)(ɵngcc0.ɵɵinject(ɵngcc4.DomSanitizer)); };\nDragHintService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DragHintService, factory: DragHintService.ɵfac });\n/** @nocollapse */\nDragHintService.ctorParameters = () => [\n { type: DomSanitizer }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragHintService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc4.DomSanitizer }]; }, null); })();\n\n/**\n * @hidden\n */\nclass DropCueService {\n create() {\n this.dom = document.createElement(\"div\");\n this.dom.className = 'k-grouping-dropclue';\n this.hide();\n }\n attach() {\n return append(this.dom);\n }\n remove() {\n if (this.dom && this.dom.parentElement) {\n document.body.removeChild(this.dom);\n this.dom = null;\n }\n }\n hide() {\n this.dom.style.display = \"none\";\n }\n position({ left, top, height }) {\n this.dom.style.display = 'block';\n this.dom.style.height = height + 'px';\n this.dom.style.top = top + 'px';\n const width = this.dom.offsetWidth / 2;\n this.dom.style.left = left - width + 'px';\n }\n}\nDropCueService.ɵfac = function DropCueService_Factory(t) { return new (t || DropCueService)(); };\nDropCueService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DropCueService, factory: DropCueService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropCueService, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ColumnReorderService {\n constructor() {\n this.changes = new EventEmitter();\n }\n reorder(e) {\n this.changes.emit(e);\n }\n}\nColumnReorderService.ɵfac = function ColumnReorderService_Factory(t) { return new (t || ColumnReorderService)(); };\nColumnReorderService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnReorderService, factory: ColumnReorderService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnReorderService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Arguments for the `columnReorder` event.\n */\nclass ColumnReorderEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor({ column, newIndex, oldIndex }) {\n super();\n this.column = column;\n this.newIndex = newIndex;\n this.oldIndex = oldIndex;\n }\n}\n\n/**\n * @hidden\n */\nclass NavigationMetadata {\n constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns) {\n this.dataRows = dataRows;\n this.headerRows = headerRows;\n this.isVirtual = isVirtual;\n this.hasPager = hasPager;\n this.hasDetailTemplate = hasDetailTemplate;\n this.gridElement = gridElement;\n this.virtualColumns = virtualColumns;\n this.columns = columns;\n }\n get maxLogicalRowIndex() {\n const dataRows = this.hasDetailTemplate ? this.dataRows * 2 : this.dataRows;\n return this.headerRows + dataRows - 1;\n }\n}\n\n// Incremented each time the service is instantiated.\nlet sequence = 0;\n/**\n * @hidden\n */\nclass IdService {\n constructor() {\n this.prefix = `k-grid${sequence++}`;\n }\n cellId(rowIndex, colIndex) {\n return `${this.prefix}-r${rowIndex}c${colIndex}`;\n }\n selectionCheckboxId(itemIndex) {\n return `${this.prefix}-checkbox${itemIndex}`;\n }\n selectAllCheckboxId() {\n return `${this.prefix}-select-all`;\n }\n}\nIdService.ɵfac = function IdService_Factory(t) { return new (t || IdService)(); };\nIdService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: IdService, factory: IdService.ɵfac });\n/** @nocollapse */\nIdService.ctorParameters = () => [];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IdService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ColumnInfoService {\n constructor() {\n this.visibilityChange = new EventEmitter();\n this.lockedChange = new EventEmitter();\n this.columnRangeChange = new EventEmitter();\n this.columnsContainer = new ColumnsContainer(() => []);\n }\n get lockedLeafColumns() {\n return this.columnsContainer.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columnsContainer.nonLockedLeafColumns;\n }\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n get totalLevels() {\n return this.columnsContainer.totalLevels;\n }\n get leafNamedColumns() {\n const columns = expandColumns(this.list().filterSort(column => !column.isColumnGroup))\n .filter(column => column.matchesMedia && column.displayTitle);\n return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);\n }\n get unlockedRootCount() {\n return this.list().rootColumns().filter(column => !column.locked && column.isVisible).length;\n }\n init(columns, list) {\n this.columnsContainer = columns;\n this.list = list;\n }\n changeVisibility(columns) {\n this.visibilityChange.emit(columns);\n }\n changeLocked(columns) {\n this.lockedChange.emit(columns);\n }\n}\nColumnInfoService.ɵfac = function ColumnInfoService_Factory(t) { return new (t || ColumnInfoService)(); };\nColumnInfoService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnInfoService, factory: ColumnInfoService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnInfoService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass SortService {\n constructor() {\n this.changes = new Subject();\n }\n sort(value) {\n this.changes.next(value);\n }\n}\nSortService.ɵfac = function SortService_Factory(t) { return new (t || SortService)(); };\nSortService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SortService, factory: SortService.ɵfac });\n\n\n/**\n * Arguments for the `columnVisibilityChange` event.\n */\nclass ColumnVisibilityChangeEvent {\n /**\n * @hidden\n */\n constructor(columns) {\n this.columns = columns;\n }\n}\n\n/**\n * Arguments for the `columnLockedChange` event.\n */\nclass ColumnLockedChangeEvent {\n /**\n * @hidden\n */\n constructor(columns) {\n this.columns = columns;\n }\n}\n\n/**\n * @hidden\n */\nconst GROUP_CELL_WIDTH = 32; // this should be the value of group-cell inside the theme!\n\n/**\n * @hidden\n */\nfunction defaultTrackBy(index, item) {\n if (item.type === 'data' && item.isEditing) {\n return item.data;\n }\n return index;\n}\n\nconst createControl = (source) => (acc, key) => {\n acc[key] = new FormControl(source[key]);\n return acc;\n};\nconst validateColumnsField = (columns) => expandColumns(columns.toArray())\n .filter(isColumnComponent)\n .filter(({ field }) => !isValidFieldName(field))\n .forEach(({ field }) => console.warn(`\n Grid column field name '${field}' does not look like a valid JavaScript identifier.\n Identifiers can contain only alphanumeric characters (including \"$\" or \"_\"), and may not start with a digit.\n Please use only valid identifier names to ensure error-free operation.\n `));\nconst handleExpandCollapseService = (service, expandEmitter, collapseEmitter, map$$1) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))\n .subscribe((x) => x.expand ? expandEmitter.emit(map$$1(x)) : collapseEmitter.emit(map$$1(x))));\nconst isInEditedCell = (element, gridElement) => closest(element, matchesClasses('k-grid-edit-cell')) &&\n closest(element, matchesNodeName('kendo-grid')) === gridElement;\nconst ɵ4$2 = EMPTY_CELL_CONTEXT;\n/**\n * Represents the Kendo UI Grid component for Angular.\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\nclass GridComponent {\n constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization) {\n this.supportService = supportService;\n this.selectionService = selectionService;\n this.cellSelectionService = cellSelectionService;\n this.wrapper = wrapper;\n this.groupInfoService = groupInfoService;\n this.groupsService = groupsService;\n this.changeNotification = changeNotification;\n this.detailsService = detailsService;\n this.editService = editService;\n this.filterService = filterService;\n this.pdfService = pdfService;\n this.responsiveService = responsiveService;\n this.renderer = renderer;\n this.excelService = excelService;\n this.ngZone = ngZone;\n this.scrollSyncService = scrollSyncService;\n this.domEvents = domEvents;\n this.columnResizingService = columnResizingService;\n this.changeDetectorRef = changeDetectorRef;\n this.columnReorderService = columnReorderService;\n this.columnInfoService = columnInfoService;\n this.navigationService = navigationService;\n this.sortService = sortService;\n this.scrollRequestService = scrollRequestService;\n /**\n * Sets the data of the Grid. If an array is provided, the Grid automatically gets the total count\n * ([more information and example]({% slug databinding_grid %})).\n */\n this.data = [];\n /**\n * Defines the scroll mode used by the Grid.\n *\n * The available options are:\n * - `none`—Renders no scrollbar.\n * - `scrollable`—The default scroll mode. It requires the setting of the `height` option.\n * - `virtual`—Displays no pager and renders a portion of the data (optimized rendering) while the user is scrolling the content.\n */\n this.scrollable = 'scrollable';\n /**\n * Enables the single-row [selection]({% slug selection_grid %}) of the Grid.\n */\n this.selectable = false;\n /**\n * A function that defines how to track changes for the data rows.\n *\n * By default, the Grid tracks changes by the index of the data item.\n * Edited rows are tracked by reference.\n * In some cases, you might need to override the default behavior,\n * for example, when you implement editing with immutable data items.\n *\n * The following example demonstrates how to track items only by index.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n * import { GridItem } from '@progress/kendo-angular-grid';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n *\n * public trackBy(index: number, item: GridItem): any {\n * console.log(item);\n * return index;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n this.trackBy = defaultTrackBy;\n /**\n * If set to `true`, the grid will render only the columns in the current viewport.\n */\n this.virtualColumns = false;\n /**\n * Enables the [filtering]({% slug filtering_grid %}) of the Grid columns that have their `field` option set.\n */\n this.filterable = false;\n /**\n * Enables the [sorting]({% slug sorting_grid %}) of the Grid columns that have their `field` option set.\n */\n this.sortable = false;\n /**\n * Configures the pager of the Grid ([see example]({% slug paging_grid %})).\n *\n * The available options are:\n * - `buttonCount: Number`—Sets the maximum numeric buttons count before the buttons are collapsed.\n * - `info: Boolean`—Toggles the information about the current page and the total number of records.\n * - `type: PagerType`—Accepts the `numeric` (buttons with numbers) and `input` (input for typing the page number) values.\n * - `pageSizes: Boolean` or `Array`—Shows a menu for selecting the page size.\n * - `previousNext: Boolean`—Toggles the **Previous** and **Next** buttons.\n */\n this.pageable = false;\n /**\n * If set to `true`, the user can group the Grid by dragging the column header cells.\n * By default, grouping is disabled ([see example]({% slug groupingbasics_grid %})).\n */\n this.groupable = false;\n /**\n * If set to `true`, the user can use dedicated shortcuts to interact with the Grid.\n * By default, navigation is disabled and the Grid content is accessible in the normal tab sequence.\n */\n this.navigable = false;\n /**\n * Indicates whether the Grid columns will be resized during initialization so that\n * they fit their headers and row content. Defaults to `false`.\n * Columns with `autoSize` set to `false` are excluded.\n * To dynamically update the column width to match the new content,\n * refer to [this example]({% slug resizing_columns_grid %}).\n */\n this.autoSize = false;\n /**\n * If set to `true`, the user can resize columns by dragging the edges (resize handles) of their header cells\n * ([see example]({% slug resizing_columns_grid %})).\n *\n * @default false\n */\n this.resizable = false;\n /**\n * If set to `true`, the user can reorder columns by dragging their header cells\n * ([see example]({% slug reordering_columns_grid %})).\n *\n * @default false\n */\n this.reorderable = false;\n /**\n * Specifies if the loading indicator of the Grid will be displayed ([see example]({% slug databinding_grid %})).\n *\n * @default false\n */\n this.loading = false;\n /**\n * Specifies if the column menu of the columns will be displayed ([see example]({% slug columnmenu_grid %})).\n *\n * @default false\n */\n this.columnMenu = false;\n /**\n * Specifies if the header of the grid will be hidden. The header is visible by default.\n *\n * > The header includes column headers and the [filter row]({% slug filtering_grid %}#toc-filter-row).\n */\n this.hideHeader = false;\n /**\n * Fires when the Grid filter is modified through the UI.\n * You have to handle the event yourself and filter the data.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires when the page of the Grid is changed ([see example]({% slug paging_grid %})).\n * You have to handle the event yourself and page the data.\n */\n this.pageChange = new EventEmitter();\n /**\n * Fires when the grouping of the Grid is changed.\n * You have to handle the event yourself and group the data ([see example]({% slug groupingbasics_grid %})).\n */\n this.groupChange = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the sorting of the Grid is changed ([see example]({% slug sorting_grid %})).\n * You have to handle the event yourself and sort the data.\n */\n this.sortChange = new EventEmitter();\n /**\n * Fires when the user selects a Grid row.\n * Emits the [`SelectionEvent`]({% slug api_grid_selectionevent %}#toc-selectionchange).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires when the data state of the Grid is changed.\n */\n this.dataStateChange = new EventEmitter();\n /**\n * Fires when the user expands a group header.\n */\n this.groupExpand = new EventEmitter();\n /**\n * Fires when the user collapses a group header.\n */\n this.groupCollapse = new EventEmitter();\n /**\n * Fires when the user expands a master row.\n */\n this.detailExpand = new EventEmitter();\n /**\n * Fires when the user collapses a master row.\n */\n this.detailCollapse = new EventEmitter();\n /**\n * Fires when the user clicks the **Edit** command button to edit a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-editing-records)).\n */\n this.edit = new EventEmitter();\n /**\n * Fires when the user clicks the **Cancel** command button to close a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-cancelling-editing)).\n */\n this.cancel = new EventEmitter();\n /**\n * Fires when the user clicks the **Save** command button to save changes in a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-saving-records)).\n */\n this.save = new EventEmitter();\n /**\n * Fires when the user clicks the **Remove** command button to remove a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-removing-records)).\n */\n this.remove = new EventEmitter();\n /**\n * Fires when the user clicks the **Add** command button to add a new row\n * ([see example]({% slug editing_template_forms_grid %}#toc-adding-records)).\n */\n this.add = new EventEmitter();\n /**\n * Fires when the user leaves an edited cell ([see example]({% slug editing_incell_grid %}#toc-basic-concepts)).\n */\n this.cellClose = new EventEmitter();\n /**\n * Fires when the user clicks a cell ([see example]({% slug editing_incell_grid %}#toc-basic-concepts)).\n */\n this.cellClick = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the user clicks the **Export to PDF** command button.\n */\n this.pdfExport = new EventEmitter();\n /**\n * Fires when the user clicks the **Export to Excel** command button.\n */\n this.excelExport = new EventEmitter();\n /**\n * Fires when the user completes the resizing of the column.\n */\n this.columnResize = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the user completes the reordering of the column.\n */\n this.columnReorder = new EventEmitter();\n /**\n * Fires when the user changes the visibility of the columns from the column menu or column chooser.\n */\n this.columnVisibilityChange = new EventEmitter();\n /**\n * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.\n */\n this.columnLockedChange = new EventEmitter();\n /**\n * Fires when the user scrolls to the last record on the page and enables endless scrolling\n * ([see example]({% slug scrollmmodes_grid %}#toc-endless-scrolling)).\n * You have to handle the event yourself and page the data.\n */\n this.scrollBottom = new EventEmitter();\n /**\n * Fires when the grid content is scrolled.\n * For performance reasons, the event is triggered outside the Angular zone. Enter the Angular zone if you make any changes that require change detection.\n */\n this.contentScroll = new EventEmitter();\n /**\n * A query list of all declared columns.\n */\n this.columns = new QueryList();\n this.footer = new QueryList();\n this.selectionDirective = false;\n this.columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {\n column.matchesMedia = this.matchesMedia(column);\n return column.isVisible;\n }));\n this.view = new DataCollection(() => new DataResultIterator(this.data, this.skip, this.hasGroupFooters));\n this.shouldGenerateColumns = true;\n this._sort = new Array();\n this._group = new Array();\n this._skip = 0;\n this.cachedWindowWidth = 0;\n this._rowSelected = null;\n this._cellSelected = null;\n this.rtl = false;\n this._rowClass = () => null;\n this.localizationSubscription = localization.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n this.groupInfoService.registerColumnsContainer(() => this.columnList);\n this.columnInfoService.init(this.columnsContainer, () => this.columnList);\n this.columnVisibilityChangeSubscription = this.columnInfoService.visibilityChange.subscribe((changed) => {\n this.columnVisibilityChange.emit(new ColumnVisibilityChangeEvent(changed));\n });\n this.columnLockedChangeSubscription = this.columnInfoService.lockedChange.subscribe((changed) => {\n this.columnLockedChange.emit(new ColumnLockedChangeEvent(changed));\n });\n this.groupExpandCollapseSubscription = handleExpandCollapseService(groupsService, this.groupExpand, this.groupCollapse, ({ dataItem: group, index }) => ({ group, groupIndex: index }));\n this.detailsServiceSubscription = handleExpandCollapseService(detailsService, this.detailExpand, this.detailCollapse, args => args);\n this.filterSubscription = this.filterService.changes.subscribe(x => {\n this.filterChange.emit(x);\n });\n this.sortSubscription = this.sortService.changes.subscribe(x => {\n this.sortChange.emit(x);\n });\n this.attachStateChangesEmitter();\n this.attachEditHandlers();\n this.attachDomEventHandlers();\n this.pdfSubscription = this.pdfService.exportClick.subscribe(this.emitPDFExportEvent.bind(this));\n this.excelSubscription = this.excelService.exportClick.subscribe(this.saveAsExcel.bind(this));\n this.columnsContainerChange();\n this.handleColumnResize();\n this.columnList = new ColumnList(this.columns);\n this.columnReorderSubscription = this.columnReorderService\n .changes.subscribe(this.reorder.bind(this));\n this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));\n }\n /**\n * Defines the number of records to be skipped by the pager.\n * Required by the [paging]({% slug paging_grid %}) functionality.\n */\n get skip() {\n return this._skip;\n }\n set skip(value) {\n if (value >= 0) {\n this._skip = value;\n }\n }\n /**\n * The descriptors by which the data will be sorted ([see example]({% slug sorting_grid %})).\n */\n set sort(value) {\n if (isArray(value)) {\n this._sort = value;\n }\n }\n get sort() {\n return this._sort;\n }\n /**\n * The descriptors by which the data will be grouped ([see example]({% slug groupingbasics_grid %})).\n */\n set group(value) {\n if (isArray(value)) {\n this._group = value;\n }\n }\n /**\n */\n get group() {\n return this._group;\n }\n /**\n * @hidden\n */\n get showTopToolbar() {\n return this.toolbarTemplate && ['top', 'both'].indexOf(this.toolbarTemplate.position) > -1;\n }\n /**\n * @hidden\n */\n get showBottomToolbar() {\n return this.toolbarTemplate && ['bottom', 'both'].indexOf(this.toolbarTemplate.position) > -1;\n }\n /**\n * @hidden\n */\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n /**\n * @hidden\n */\n get showPager() {\n return !this.isVirtual && this.pageable !== false;\n }\n /**\n * @hidden\n */\n get showGroupPanel() {\n return this.groupable && this.groupable.enabled !== false;\n }\n /**\n * @hidden\n */\n get groupableEmptyText() {\n return this.groupable.emptyText;\n }\n /**\n * @hidden\n */\n get marqueeSelection() {\n return this.selectionService.enableMarquee || this.cellSelectionService.enableMarquee;\n }\n /**\n * @hidden\n *\n * An alias for `navigable` for users who migrate from Kendo UI for jQuery.\n */\n set navigatable(value) {\n this.navigable = value;\n }\n /**\n * @hidden\n */\n get navigatable() {\n return this.navigable;\n }\n /**\n * Defines a function that is executed for every data row in the component.\n *\n * @example\n * ```ts\n * import { Component, ViewEncapsulation } from '@angular/core';\n * import { RowClassArgs } from '@progress/kendo-angular-grid';\n *\n * _@Component({\n * selector: 'my-app',\n * encapsulation: ViewEncapsulation.None,\n * styles: [`\n * .k-grid tr.even { background-color: #f45c42; }\n * .k-grid tr.odd { background-color: #41f4df; }\n * `],\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n *\n * public rowCallback(context: RowClassArgs) {\n * const isEven = context.index % 2 == 0;\n * return {\n * even: isEven,\n * odd: !isEven\n * };\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n set rowClass(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`rowClass must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._rowClass = fn;\n }\n get rowClass() {\n return this._rowClass;\n }\n /**\n * Defines a Boolean function that is executed for each data row in the component\n * ([see example]({% slug selection_grid %}#toc-setting-the-selected-rows)).\n * Determines whether the row will be selected.\n */\n set rowSelected(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`rowSelected must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._rowSelected = fn;\n }\n get rowSelected() {\n return this._rowSelected;\n }\n /**\n * Defines a function that determines the selected state of a data cell.\n * Returns an object with `selected` and `item` properties.\n * The cell is marked as selected only if the `selected` property equals `true`.\n *\n * The function is executed for each data cell and may be called more than once\n * as part of a change detection cycle. ([see example]({% slug grid_selection_custom %}toc-setting-the-selected-cells))\n */\n set cellSelected(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`cellSelected must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._cellSelected = fn;\n }\n get cellSelected() {\n return this._cellSelected;\n }\n /**\n * Returns the currently focused cell (if any).\n */\n get activeCell() {\n return this.navigationService.activeCell;\n }\n /**\n * Returns the currently focused row (if any).\n */\n get activeRow() {\n return this.navigationService.activeRow;\n }\n get dir() {\n return this.direction;\n }\n get hostClasses() {\n return true;\n }\n get lockedClasses() {\n return this.lockedLeafColumns.length > 0;\n }\n get virtualClasses() {\n return this.isVirtual;\n }\n get noScrollbarClass() {\n return this.scrollbarWidth === 0;\n }\n get detailTemplate() {\n if (this._customDetailTemplate) {\n return this._customDetailTemplate;\n }\n return this.detailTemplateChildren ? this.detailTemplateChildren.first : undefined;\n }\n set detailTemplate(detailTemplate) {\n this._customDetailTemplate = detailTemplate;\n }\n get noRecordsTemplate() {\n if (this._customNoRecordsTemplate) {\n return this._customNoRecordsTemplate;\n }\n return this.noRecordsTemplateChildren ? this.noRecordsTemplateChildren.first : undefined;\n }\n set noRecordsTemplate(customNoRecordsTemplate) {\n this._customNoRecordsTemplate = customNoRecordsTemplate;\n }\n get pagerTemplate() {\n if (this._customPagerTemplate) {\n return this._customPagerTemplate;\n }\n return this.pagerTemplateChildren ? this.pagerTemplateChildren.first : undefined;\n }\n set pagerTemplate(customPagerTemplate) {\n this._customPagerTemplate = customPagerTemplate;\n }\n get toolbarTemplate() {\n if (this._customToolbarTemplate) {\n return this._customToolbarTemplate;\n }\n return this.toolbarTemplateChildren ? this.toolbarTemplateChildren.first : undefined;\n }\n set toolbarTemplate(customToolbarTemplate) {\n this._customToolbarTemplate = customToolbarTemplate;\n }\n get scrollbarWidth() {\n return this.supportService.scrollbarWidth;\n }\n get headerPadding() {\n if (isUniversal()) {\n return \"\";\n }\n const padding = Math.max(0, this.scrollbarWidth - 1) + 'px';\n const right = this.rtl ? 0 : padding;\n const left = this.rtl ? padding : 0;\n return `0 ${right} 0 ${left}`;\n }\n get hasGroupFooters() {\n return this.columnsContainer.hasGroupFooter;\n }\n get showFooter() {\n return this.columnsContainer.hasFooter;\n }\n get showGroupFooters() {\n return this.groupable && this.groupable.showFooter;\n }\n get ariaRowCount() {\n return this.totalColumnLevels + 1 + this.view.total;\n }\n get ariaColCount() {\n return this.columnsContainer.leafColumnsToRender.length;\n }\n get isVirtual() {\n return this.scrollable === 'virtual';\n }\n get isScrollable() {\n return this.scrollable !== 'none';\n }\n get visibleColumns() {\n return this.columnsContainer.allColumns;\n }\n get lockedColumns() {\n return this.columnsContainer.lockedColumns;\n }\n get nonLockedColumns() {\n return this.columnsContainer.nonLockedColumns;\n }\n get lockedLeafColumns() {\n return this.columnsContainer.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columnsContainer.nonLockedLeafColumns;\n }\n get leafColumns() {\n return this.columnsContainer.leafColumns;\n }\n get totalColumnLevels() {\n return this.columnsContainer.totalLevels;\n }\n get headerColumns() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.viewportColumns;\n }\n return this.nonLockedColumns;\n }\n get headerLeafColumns() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.leafViewportColumns;\n }\n return this.nonLockedLeafColumns;\n }\n get lockedWidth() {\n const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;\n return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);\n }\n get nonLockedWidth() {\n if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {\n return !this.virtualColumns ? this.columnsContainer.unlockedWidth :\n this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);\n }\n return undefined;\n }\n get selectableSettings() {\n if (this.selectionService) {\n return this.selectionService.options;\n }\n return undefined;\n }\n get columnMenuTemplate() {\n const template = this.columnMenuTemplates.first;\n return template ? template.templateRef : null;\n }\n get totalCount() {\n if (this.isVirtual || !isPresent(this.pageSize)) {\n return this.view.total;\n }\n return this.pageSize;\n }\n /**\n * Expands the specified master row ([see example]({% slug hierarchy_grid %})).\n *\n * This method is provided only for backwards-compatibility with legacy versions.\n * These versions tracked the expanded state internally using the data row index.\n *\n * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})\n * or provide an isDetailExpanded callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %})\n * for examples on how to control the expanded state.\n *\n * @param index - The data row index of the master row.\n */\n expandRow(index) {\n this.toggleDetailRowLegacy(index, true);\n }\n /**\n * Collapses the specified master row ([see example]({% slug hierarchy_grid %})).\n *\n * This method is provided only for backwards-compatibility with legacy versions.\n * These versions tracked the expanded state internally using the data row index.\n *\n * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})\n * or provide an isDetailExpanded callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %})\n * for examples on how to control the expanded state.\n *\n * @param index - The data row index of the master row.\n */\n collapseRow(index) {\n this.toggleDetailRowLegacy(index, false);\n }\n /**\n * Expands a group header item for the given index. For example,\n * `0_1` expands the second inner group of the first master group.\n *\n * > * When you use the [`kendoGridGroupBinding`]({% slug api_grid_groupbindingdirective %}) directive,\n * > the `expandGroup` method is not supported.\n * > * When a Grid is pageable, the indexes of the groups are offset by the current Grid [`skip`]({% slug api_grid_gridcomponent %}#toc-skip).\n *\n * @param {string} index - The underscore separated hierarchical index of the group.\n */\n expandGroup(index) {\n if (!this.groupsService.isExpanded(index)) {\n this.groupsService.toggleRow(index, null);\n }\n }\n /**\n * Collapses a group header item for the given index. For example,\n * `0_1` collapses the second inner group of the first master group.\n *\n * > * When you use the [`kendoGridGroupBinding`]({% slug api_grid_groupbindingdirective %}) directive,\n * > the `collapseGroup` method is not supported.\n * > * When a Grid is pageable, the indexes of the groups are offset by the current Grid [`skip`]({% slug api_grid_gridcomponent %}#toc-skip).\n *\n * @param {string} index - The underscore separated hierarchical index of the group.\n */\n collapseGroup(index) {\n if (this.groupsService.isExpanded(index)) {\n this.groupsService.toggleRow(index, null);\n }\n }\n /**\n * @hidden\n */\n resetGroupsState() {\n this.groupsService.reset();\n }\n /**\n * @hidden\n */\n expandGroupChildren(groupIndex) {\n this.groupsService.expandChildren(groupIndex);\n }\n /**\n * @hidden\n */\n onDataChange() {\n this.autoGenerateColumns();\n this.changeNotification.notify();\n this.pdfService.dataChanged.emit();\n if (isPresent(this.defaultSelection)) {\n this.defaultSelection.reset();\n }\n this.initSelectionService();\n this.updateNavigationMetadata();\n }\n ngOnChanges(changes) {\n if (isChanged(\"data\", changes)) {\n this.onDataChange();\n }\n if (this.lockedLeafColumns.length && anyChanged([\"pageSize\", \"skip\", \"sort\", \"group\"], changes)) {\n this.changeNotification.notify();\n }\n if (anyChanged([\"pageSize\", \"scrollable\", 'virtualColumns'], changes)) {\n this.updateNavigationMetadata();\n }\n if (isChanged(\"virtualColumns\", changes)) {\n this.viewportColumns = this.leafViewportColumns = null;\n }\n if (isChanged(\"height\", changes, false)) {\n this.renderer.setStyle(this.wrapper.nativeElement, 'height', `${this.height}px`);\n }\n if (isChanged(\"filterable\", changes) && this.lockedColumns.length) {\n this.syncHeaderHeight(this.ngZone.onStable.asObservable().pipe(take(1)));\n }\n if (anyChanged([\"columnMenu\", \"sortable\", \"filterable\"], changes, false)) {\n this.columnMenuOptions = this.columnMenu && Object.assign({\n filter: Boolean(this.filterable),\n sort: Boolean(this.sortable)\n }, this.columnMenu); // tslint:disable-line:align\n }\n if (isChanged(\"scrollable\", changes) && this.isScrollable) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.attachScrollSync());\n }\n if (isChanged(\"selectable\", changes) && this.shouldResetSelection(changes.selectable)) {\n if (this.defaultSelection) {\n this.defaultSelection.reset();\n }\n else if (this.selectionDirective) {\n this.selectionDirective.reset();\n }\n }\n }\n ngAfterViewInit() {\n this.attachScrollSync();\n this.attachElementEventHandlers();\n this.updateNavigationMetadata();\n this.applyAutoSize();\n }\n ngAfterContentChecked() {\n this.columnsContainer.refresh();\n this.verifySettings();\n this.initSelectionService();\n }\n ngAfterContentInit() {\n this.shouldGenerateColumns = !this.columns.length;\n this.autoGenerateColumns();\n this.columnList = new ColumnList(this.columns);\n this.columnsChangeSubscription = this.columns.changes.subscribe(() => this.verifySettings());\n }\n ngOnInit() {\n if (this.navigable) {\n this.navigationService.init(this.navigationMetadata());\n }\n }\n ngOnDestroy() {\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n if (this.stateChangeSubscription) {\n this.stateChangeSubscription.unsubscribe();\n }\n if (this.groupExpandCollapseSubscription) {\n this.groupExpandCollapseSubscription.unsubscribe();\n }\n if (this.detailsServiceSubscription) {\n this.detailsServiceSubscription.unsubscribe();\n }\n if (this.editServiceSubscription) {\n this.editServiceSubscription.unsubscribe();\n }\n if (this.pdfSubscription) {\n this.pdfSubscription.unsubscribe();\n }\n if (this.filterSubscription) {\n this.filterSubscription.unsubscribe();\n }\n if (this.sortSubscription) {\n this.sortSubscription.unsubscribe();\n }\n if (this.columnsChangeSubscription) {\n this.columnsChangeSubscription.unsubscribe();\n }\n if (this.excelSubscription) {\n this.excelSubscription.unsubscribe();\n }\n if (this.columnsContainerChangeSubscription) {\n this.columnsContainerChangeSubscription.unsubscribe();\n }\n if (this.scrollSyncService) {\n this.scrollSyncService.destroy();\n }\n if (this.detachElementEventHandlers) {\n this.detachElementEventHandlers();\n }\n if (this.defaultSelection) {\n this.defaultSelection.destroy();\n }\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n }\n if (this.footerChangeSubscription) {\n this.footerChangeSubscription.unsubscribe();\n }\n this.ngZone = null;\n if (this.columnResizingSubscription) {\n this.columnResizingSubscription.unsubscribe();\n }\n if (this.columnReorderSubscription) {\n this.columnReorderSubscription.unsubscribe();\n }\n if (this.localizationSubscription) {\n this.localizationSubscription.unsubscribe();\n }\n if (this.columnVisibilityChangeSubscription) {\n this.columnVisibilityChangeSubscription.unsubscribe();\n }\n if (this.columnLockedChangeSubscription) {\n this.columnLockedChangeSubscription.unsubscribe();\n }\n if (this.focusElementSubscription) {\n this.focusElementSubscription.unsubscribe();\n }\n this.columnRangeChangeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n attachScrollSync() {\n if (isUniversal()) {\n return;\n }\n if (this.header) {\n this.scrollSyncService.registerEmitter(this.header.nativeElement, \"header\");\n }\n if (this.footer) {\n this.footerChangeSubscription = observe(this.footer)\n .subscribe(footers => footers\n .map(footer => footer.nativeElement)\n .filter(isPresent)\n .forEach(element => this.scrollSyncService.registerEmitter(element, \"footer\")));\n }\n }\n /**\n * Switches the specified table row in the edit mode ([see example]({% slug editing_template_forms_grid %}#toc-editing-records)).\n *\n * @param rowIndex - The data row index that will be switched in the edit mode.\n * @param group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }})\n * that describes the edit form.\n * @param options - Additional options configuring the focus target once the editor opens.\n */\n editRow(rowIndex, group, options) {\n this.editService.editRow(rowIndex, group);\n if (isPresent(options) && options.skipFocus) {\n return;\n }\n const row = `tr[data-kendo-grid-item-index=\"${rowIndex}\"]`;\n const columnIndex = options && options.columnIndex;\n const target = isNaN(columnIndex) ? row : `${row} td[data-kendo-grid-column-index=\"${columnIndex}\"]`;\n this.focusEditElement(target);\n }\n /**\n * Closes the editor for a given row ([see example]({% slug editing_template_forms_grid %}#toc-cancelling-editing)).\n *\n * @param {number} index - The row index that will be switched out of the edit mode. If no index is provided, it is assumed\n * that the new item editor will be closed.\n */\n closeRow(index) {\n this.editService.close(index);\n }\n /**\n * Creates a new row editor ([see example]({% slug editing_template_forms_grid %}#toc-adding-records)).\n *\n * @param {FormGroup} group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }}) that describes\n * the edit form. If called with a data item, it will build the `FormGroup` from the data item fields.\n */\n addRow(group) {\n const isFormGroup = group instanceof FormGroup;\n if (!isFormGroup) {\n const fields = Object.keys(group).reduce(createControl(group), {}); // FormBuilder?\n group = new FormGroup(fields);\n }\n this.editService.addRow(group);\n this.focusEditElement('.k-grid-add-row');\n }\n /**\n * Puts the cell that is specified by the table row and column in edit mode.\n *\n * @param {number} rowIndex - The data row index that will be switched in the edit mode.\n * @param {number|string|any} column - The leaf column index, or the field name or the column instance that should be edited.\n * @param {FormGroup} group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }})\n * that describes the edit form.\n */\n editCell(rowIndex, column, group) {\n const instance = this.columnInstance(column);\n this.editService.editCell(rowIndex, instance, group);\n this.focusEditElement('.k-grid-edit-cell');\n }\n /**\n * Closes the current cell in edit mode and fires\n * the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.\n *\n * @return {boolean} Indicates whether the edited cell was closed.\n * A `false` value indicates that the\n * [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event was prevented.\n */\n closeCell() {\n return !this.editService.closeCell();\n }\n /**\n * Closes the current cell in edit mode.\n */\n cancelCell() {\n this.editService.cancelCell();\n }\n /**\n * Returns a flag which indicates if a row or a cell is currently edited.\n *\n * @return {boolean} A flag which indicates if a row or a cell is currently edited.\n */\n isEditing() {\n return this.editService.isEditing();\n }\n /**\n * Returns a flag which indicates if a cell is currently edited.\n *\n * @return {boolean} A flag which indicates if a cell is currently being edited.\n */\n isEditingCell() {\n return this.editService.isEditingCell();\n }\n /**\n * Initiates the PDF export ([see example]({% slug pdfexport_grid %})).\n */\n saveAsPDF() {\n this.pdfService.save(this);\n }\n /**\n * Exports the Grid element to a Drawing [`Group`]({% slug api_kendo-drawing_group %}) by using the `kendo-grid-pdf` component options.\n * ([see example]({% slug pdfexport_grid %}#toc-exporting-multiple-grids-to-the-same-pdf)).\n *\n * @return {Promise} - A promise that will be resolved with the Drawing `Group`.\n */\n drawPDF() {\n const promise = createPromise();\n this.pdfService.draw(this, promise);\n return promise;\n }\n /**\n * Initiates the Excel export ([see example]({% slug excelexport_grid %})).\n */\n saveAsExcel() {\n this.excelService.save(this);\n }\n /**\n * Applies the minimum possible width for the specified column,\n * so that the whole text fits without wrapping. This method expects the Grid\n * to be resizable (set `resizable` to `true`).\n * Makes sense to execute this method only\n * after the Grid is already populated with data.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n autoFitColumn(column) {\n this.columnResizingService.autoFit(column);\n }\n /**\n * Adjusts the width of the specified columns to fit the entire content, including headers, without wrapping.\n * If no columns are specified, `autoFitColumns` is applied to all columns.\n *\n * This method requires the Grid to be resizable (set `resizable` to `true`).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n autoFitColumns(columns = this.columns) {\n let cols;\n if (columns instanceof QueryList) {\n cols = columns.toArray();\n }\n else {\n cols = columns;\n }\n this.columnResizingService.autoFit(...cols);\n }\n /**\n * @hidden\n */\n notifyPageChange(source, event) {\n if (source === \"list\" && !this.isVirtual) {\n return;\n }\n this.pageChange.emit(event);\n }\n /**\n * @hidden\n */\n notifyScrollBottom() {\n if (this.scrollable === 'none') {\n return;\n }\n if (hasObservers(this.scrollBottom)) {\n this.ngZone.run(() => this.scrollBottom.emit({ sender: this }));\n }\n }\n /**\n * @hidden\n */\n focusEditElement(containerSelector) {\n if (this.focusElementSubscription) {\n this.focusElementSubscription.unsubscribe();\n }\n this.ngZone.runOutsideAngular(() => {\n this.focusElementSubscription = this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const wrapper = this.wrapper.nativeElement;\n if (!this.setEditFocus(wrapper.querySelector(containerSelector)) && this.isLocked) {\n this.setEditFocus(wrapper.querySelector(`.k-grid-content ${containerSelector}`));\n }\n this.focusElementSubscription = null;\n });\n });\n }\n /**\n * Focuses the last active or the first cell of the Grid.\n *\n * @returns {NavigationCell} The focused cell.\n */\n focus() {\n this.assertNavigable();\n return this.navigationService.focusCell();\n }\n /**\n * Focuses the cell with the specified row and column index.\n *\n * The row index is based on the logical structure of the Grid and does not correspond to the data item index:\n * * Header rows are included, starting at index 0.\n * * Group headers and footers are included.\n * * The row indexing is absolute and does not change with paging.\n *\n * If the Grid is configured for scrolling, including virtual scrolling, the scroll position will be updated.\n * If the row is not present on the current page, the method will have no effect.\n *\n * @param rowIndex - The logical row index to focus. The top header row has an index 0.\n * @param colIndex - The column index to focus.\n * @returns {NavigationCell} The focused cell.\n *\n */\n focusCell(rowIndex, colIndex) {\n this.assertNavigable();\n return this.navigationService.focusCell(rowIndex, colIndex);\n }\n /**\n * Focuses the next cell, optionally wrapping to the next row.\n *\n * @param wrap - A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.\n * @returns {NavigationCell} The focused cell. If the focus is already on the last cell, returns `null`.\n */\n focusNextCell(wrap = true) {\n this.assertNavigable();\n return this.navigationService.focusNextCell(wrap);\n }\n /**\n * Focuses the previous cell. Optionally wraps to the previous row.\n *\n * @param wrap - A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.\n * @returns {NavigationCell} The focused cell. If the focus is already on the first cell, returns `null`.\n */\n focusPrevCell(wrap = true) {\n this.assertNavigable();\n return this.navigationService.focusPrevCell(wrap);\n }\n /**\n * Scrolls to the specified row and column\n */\n scrollTo(request) {\n this.scrollRequestService.scrollTo(request);\n }\n /**\n * Changes the position of the specified column.\n * The reordering of columns operates only on the level\n * which is inferred by the source column.\n * For the `reorderColumn` method to work properly,\n * the `source` column has to be visible.\n *\n * @param {ColumnBase} source - The column whose position will be changed.\n * @param {number} destIndex - The new position of the column.\n * @param {ColumnReorderConfig} options - Additional options.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n *\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n reorderColumn(source, destIndex, options = { before: false }) {\n const columnsForLevel = this.columnsForLevel(source.level);\n let target = columnsForLevel[destIndex];\n if (!target) {\n return;\n }\n const lastNonLocked = target.isLocked &&\n !source.isLocked &&\n this.columnsContainer.nonLockedColumns.length === 1;\n if (lastNonLocked) {\n return;\n }\n if (isSpanColumnComponent(target) && !options.before) {\n target = target.childColumns.last;\n }\n this.reorder({\n before: options.before,\n source: source,\n target: target\n });\n }\n /**\n * A function which determines if a specific row is expanded.\n */\n set isDetailExpanded(callback) {\n this.detailsService.userCallback = callback;\n }\n get isDetailExpanded() {\n return this.detailsService.userCallback;\n }\n /**\n * @hidden\n */\n reorder({ target, source, before, changeContainer }) {\n this.ngZone.run(() => {\n const columnsForLevel = this.columnsForLevel(source.level);\n let newIndex = columnsForLevel.indexOf(target);\n if (target.parent && target.parent.isSpanColumn) {\n newIndex = columnsForLevel.indexOf(target.parent);\n if (before) {\n target = target.parent;\n }\n }\n let oldIndex = columnsForLevel.indexOf(source);\n if (changeContainer) {\n if (before && 0 < newIndex && oldIndex < newIndex) { // dropped before the first not locked column\n newIndex--;\n }\n else if (!before && oldIndex > newIndex) { // dropped after the last locked column\n newIndex++;\n }\n }\n const args = new ColumnReorderEvent({\n column: source,\n oldIndex: oldIndex,\n newIndex: newIndex\n });\n this.columnReorder.emit(args);\n if (args.isDefaultPrevented()) {\n return;\n }\n if (changeContainer) {\n this.columnLockedChange.emit(new ColumnLockedChangeEvent([source]));\n }\n this.updateColumnIndices({ source, target, before });\n if (source.locked !== target.locked) {\n source.locked = target.locked;\n }\n this.columnsContainer.refresh();\n this.changeDetectorRef.markForCheck();\n });\n }\n updateColumnIndices({ source, target, before }) {\n const expandedColumns = expandColumnsWithSpan(this.columnsForLevel(source.level));\n const sourceColumnIndex = expandedColumns.indexOf(source);\n let nextSourceIndex = 0;\n let nextIndex = 0;\n let toSkip = 1;\n // Possible only when called from the API.\n if (source.isSpanColumn) {\n toSkip += source.childColumns.length;\n }\n let i = 0;\n while (i < expandedColumns.length) {\n let column = expandedColumns[i];\n if (column === target) {\n nextSourceIndex = before ? nextIndex : nextIndex + 1;\n nextIndex = before ? nextIndex + toSkip : nextIndex;\n column.orderIndex = nextIndex;\n if (nextSourceIndex === nextIndex + 1) {\n nextIndex += toSkip;\n }\n }\n else if (column === source) {\n i += toSkip;\n continue;\n }\n else {\n column.orderIndex = nextIndex;\n }\n nextIndex++;\n i++;\n }\n for (i = sourceColumnIndex; i < sourceColumnIndex + toSkip; i++) {\n expandedColumns[i].orderIndex = nextSourceIndex++;\n }\n this.updateIndicesForLevel(source.level + 1);\n }\n updateIndicesForLevel(level) {\n const colsForParentLevel = this.columnsForLevel(level - 1);\n const colsForLevel = [];\n sortColumns(colsForParentLevel).forEach((c) => {\n if (c.isColumnGroup) {\n colsForLevel.push(...c.childrenArray.sort((a, b) => a.orderIndex - b.orderIndex));\n }\n });\n expandColumnsWithSpan(colsForLevel).map((c, i) => c.orderIndex = i);\n if (level < this.columnsContainer.totalLevels) {\n this.updateIndicesForLevel(level + 1);\n }\n }\n columnsForLevel(level) {\n return this.columnsContainer\n .allColumns.filter(column => column.level === level);\n }\n initSelectionService() {\n if (!this.selectable) {\n this.selectionService.ngOnDestroy();\n this.cellSelectionService.ngOnDestroy();\n return;\n }\n if (!this.selectionDirective && !isPresent(this.defaultSelection)) {\n this.defaultSelection = new Selection(this, this.changeDetectorRef);\n }\n const cellSelectionMode = this.selectable['cell'];\n const activeService = cellSelectionMode ? this.cellSelectionService : this.selectionService;\n const inactiveService = cellSelectionMode ? this.selectionService : this.cellSelectionService;\n if (inactiveService.active) {\n inactiveService.ngOnDestroy();\n activeService.addSubscriptions();\n inactiveService.active = false;\n }\n activeService.active = true;\n activeService.init({\n cellSelected: cellSelectionMode ? this.cellSelected : undefined,\n rowSelected: cellSelectionMode ? undefined : this.rowSelected,\n selectable: this.selectable,\n view: this.view,\n columns: cellSelectionMode ? this.columnList.toArray() : undefined\n });\n if (!this.selectionDirective && !this.selectableSettings.enabled) {\n this.defaultSelection.reset();\n }\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n if (cellSelectionMode) {\n this.selectionSubscription = this.cellSelectionService.changes.subscribe((event) => {\n this.ngZone.run(() => this.selectionChange.emit(event));\n });\n }\n else {\n this.selectionSubscription = this.selectionService.changes.subscribe((event) => {\n this.ngZone.run(() => this.selectionChange.emit(event));\n });\n }\n }\n setEditFocus(element) {\n if (element) {\n return this.navigationService.tryFocus(element);\n }\n }\n columnInstance(column) {\n let instance;\n if (typeof column === 'number') {\n instance = this.columnsContainer.lockedLeafColumns.toArray()\n .concat(this.columnsContainer.nonLockedLeafColumns.toArray())[column];\n }\n else if (typeof column === 'string') {\n instance = this.columnList.filter((item) => item.field === column)[0];\n }\n else {\n instance = column;\n }\n if (!instance && isDevMode()) {\n throw new Error(`Invalid column ${column}`);\n }\n return instance;\n }\n verifySettings() {\n if (isDevMode()) {\n const locked = this.lockedLeafColumns.length || (this.columnMenu && this.columnMenu.lock);\n if (locked && this.detailTemplate) {\n throw new Error('Having both detail template and locked columns is not supported.');\n }\n if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {\n throw new Error('There should be at least one non-locked column');\n }\n if ((locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {\n throw new Error((locked ? 'Locked' : 'Virtual') + ' columns feature requires all columns to have set width.');\n }\n if (locked && !this.isScrollable) {\n throw new Error('Locked columns are only supported when scrolling is enabled.');\n }\n if (this.columnList.filter(isColumnGroupComponent).filter((x) => !x.hasChildren).length) {\n throw new Error('ColumnGroupComponent should contain ColumnComponent or CommandColumnComponent.');\n }\n if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {\n throw new Error('Locked child columns require their parent columns to be locked.');\n }\n if ((this.rowHeight || this.detailRowHeight) && !this.isVirtual) {\n throw new Error('Row height and detail row height settings require virtual scrolling mode to be enabled.');\n }\n validateColumnsField(this.columnList);\n }\n }\n autoGenerateColumns() {\n if (this.shouldGenerateColumns && !this.columns.length && this.view.length) {\n this.columns.reset(Object.keys(this.view.at(0)).map(field => {\n let column = new ColumnComponent();\n column.field = field;\n return column;\n }));\n }\n }\n attachStateChangesEmitter() {\n this.stateChangeSubscription =\n merge(this.pageChange.pipe(map(x => ({\n filter: this.filter, group: this.group, skip: x.skip, sort: this.sort, take: x.take\n }))), this.sortChange.pipe(map(sort => ({ filter: this.filter, group: this.group, skip: this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(map(group => ({\n filter: this.filter, group: group, skip: this.skip, sort: this.sort, take: this.pageSize\n }))), this.filterChange.pipe(map(filter$$1 => ({\n filter: filter$$1, group: this.group, skip: 0, sort: this.sort, take: this.pageSize\n }))))\n .subscribe(x => {\n this.closeCell();\n this.cancelCell();\n this.dataStateChange.emit(x);\n });\n }\n attachEditHandlers() {\n if (!this.editService) {\n return;\n }\n this.editServiceSubscription = this.editService\n .changes.subscribe(this.emitCRUDEvent.bind(this));\n }\n emitCRUDEvent(args) {\n const { action, rowIndex, formGroup } = args;\n let dataItem = this.view.at(rowIndex - this.skip);\n if (action !== 'add' && !dataItem) {\n dataItem = formGroup.value;\n }\n this.closeCell();\n Object.assign(args, {\n dataItem: dataItem,\n sender: this\n });\n switch (action) {\n case 'add':\n this.add.emit(args);\n break;\n case 'cancel':\n this.cancel.emit(args);\n break;\n case 'edit':\n this.edit.emit(args);\n break;\n case 'remove':\n this.remove.emit(args);\n break;\n case 'save':\n this.save.emit(args);\n break;\n case 'cellClose':\n this.cellClose.emit(args);\n break;\n default: break;\n }\n }\n attachDomEventHandlers() {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n this.cellClick.emit(Object.assign({ sender: this }, args));\n });\n }\n attachElementEventHandlers() {\n if (isUniversal()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const ariaRoot = this.ariaRoot.nativeElement;\n this.ngZone.runOutsideAngular(() => {\n const resizeCheck = this.resizeCheck.bind(this);\n const resizeSubscription = this.renderer.listen('window', 'resize', resizeCheck);\n const orientationSubscription = this.renderer.listen('window', 'orientationchange', resizeCheck);\n const documentClickSubscription = this.renderer.listen('document', 'click', (args) => {\n const activeElement = document.activeElement;\n if (this.editService.shouldCloseCell() &&\n !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&\n !(activeElement &&\n (closest(activeElement, matchesClasses('k-animation-container')) ||\n isInEditedCell(activeElement, this.wrapper.nativeElement)))) {\n this.editService.closeCell(args);\n }\n });\n const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {\n const activeElement = document.activeElement;\n if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&\n isInEditedCell(activeElement, this.wrapper.nativeElement))) {\n this.editService.closeCell(args);\n }\n this.domEvents.windowBlur.emit(args);\n });\n const clickSubscription = this.renderer.listen(wrapper, 'click', (args) => {\n this.domEvents.click.emit(args);\n });\n const keydownSubscription = this.renderer.listen(wrapper, 'keydown', (args) => {\n this.domEvents.keydown.emit(args);\n });\n // focusIn and focusOut are relative to the element with ARIA role \"grid\"\n let focused = false;\n const focusInSubscription = this.renderer.listen(ariaRoot, 'focusin', (args) => {\n this.domEvents.focus.emit(args);\n if (!focused) {\n this.domEvents.focusIn.emit(args);\n focused = true;\n }\n });\n const focusOutSubscription = this.renderer.listen(ariaRoot, 'focusout', (args) => {\n const next = args.relatedTarget || document.activeElement;\n const outside = !closest(next, (node) => node === ariaRoot);\n if (outside) {\n this.domEvents.focusOut.emit(args);\n focused = false;\n }\n });\n this.detachElementEventHandlers = () => {\n resizeSubscription();\n orientationSubscription();\n documentClickSubscription();\n windowBlurSubscription();\n clickSubscription();\n keydownSubscription();\n focusInSubscription();\n focusOutSubscription();\n };\n });\n }\n matchesMedia(c) {\n return this.responsiveService.matchesMedia(c.media);\n }\n resizeCheck() {\n if (window.innerWidth !== this.cachedWindowWidth) {\n this.cachedWindowWidth = window.innerWidth;\n let hasChanges = false;\n this.columnList.filterHierarchy(column => {\n const matchesMedia = this.matchesMedia(column);\n if (column.matchesMedia !== matchesMedia) {\n hasChanges = true;\n column.matchesMedia = matchesMedia;\n }\n return column.isVisible;\n });\n if (hasChanges) {\n this.ngZone.run(() => {\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n }\n emitPDFExportEvent() {\n const args = new PDFExportEvent();\n this.pdfExport.emit(args);\n if (!args.isDefaultPrevented()) {\n this.saveAsPDF();\n }\n }\n syncHeaderHeight(observable) {\n return observable\n .pipe(filter(() => isPresent(this.lockedHeader)))\n .subscribe(() => syncRowsHeight(this.lockedHeader.nativeElement.children[0], this.header.nativeElement.children[0]));\n }\n columnsContainerChange() {\n this.columnsContainerChangeSubscription =\n this.syncHeaderHeight(this.columnsContainer.changes.pipe(filter(() => this.lockedColumns.length > 0), switchMap(() => this.ngZone.onStable.asObservable().pipe(take(1)))));\n }\n handleColumnResize() {\n const resizes = this.columnResizingService.changes;\n this.columnResizingSubscription = resizes.pipe(tap(e => {\n if (e.type === 'start') {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-grid-column-resizing');\n }\n else if (e.type === 'end') {\n this.renderer.removeClass(this.wrapper.nativeElement, 'k-grid-column-resizing');\n }\n }), filter(e => e.type === 'start'), switchMap(() => resizes.pipe(\n // tslint:disable-next-line: rxjs-no-unsafe-takeuntil\n takeUntil(resizes.pipe(filter(e => e.type === 'triggerAutoFit'))), filter(e => e.type === 'end'))))\n .subscribe(this.notifyResize.bind(this));\n }\n notifyResize(e) {\n const args = e.resizedColumns\n .filter(item => isTruthy(item.column.resizable) && !item.column.isColumnGroup)\n .map(item => ({\n column: item.column,\n newWidth: item.column.width,\n oldWidth: item.oldWidth\n }));\n this.columnResize.emit(args);\n }\n assertNavigable() {\n if (isDevMode() && !this.navigable) {\n throw new Error('The Grid should be configured as [navigable]=\"true\" to control focus');\n }\n }\n navigationMetadata() {\n const isVirtual = this.isVirtual;\n const pageSize = this.pageSize;\n const dataRows = isVirtual ? this.view.total : pageSize;\n const addRowOffset = this.editService.hasNewItem ? 1 : 0;\n const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;\n const headerRows = this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;\n return new NavigationMetadata(dataRows, headerRows, isVirtual, this.showPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer);\n }\n updateNavigationMetadata() {\n this.navigationService.metadata = this.navigationMetadata();\n }\n applyAutoSize() {\n const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);\n if (cols.length > 0) {\n this.ngZone.onStable.pipe(take(1)).subscribe(_ => this.autoFitColumns(cols));\n }\n }\n onColumnRangeChange(range) {\n const viewportColumns = this.viewportColumns = [];\n const leafViewportColumns = this.columnsContainer\n .nonLockedLeafColumns.toArray().slice(range.start, range.end + 1);\n for (let idx = 0; idx < leafViewportColumns.length; idx++) {\n let column = leafViewportColumns[idx];\n while (column.parent) {\n column = column.parent;\n }\n const toAdd = [column];\n while (toAdd.length) {\n column = toAdd.shift();\n viewportColumns.push(column);\n if (column.isColumnGroup) {\n toAdd.unshift.apply(toAdd, column.childrenArray);\n }\n }\n const lastFromGroup = viewportColumns[viewportColumns.length - 1];\n column = leafViewportColumns[idx];\n while (column !== lastFromGroup && idx < leafViewportColumns.length) {\n idx++;\n column = leafViewportColumns[idx];\n }\n }\n if (range.start > 0) {\n const first = leafViewportColumns[0];\n let offset = range.offset;\n let current = viewportColumns[0];\n let index = 0;\n while (current !== first) {\n offset -= current.isColumnGroup ? 0 : current.width;\n index++;\n current = viewportColumns[index];\n }\n if (offset > 0) {\n const totalLevels = this.columnsContainer.totalLevels;\n let previous;\n for (let idx = 0; idx <= totalLevels; idx++) {\n const offsetColumn = idx < totalLevels ? new ColumnGroupComponent(previous) : new ColumnBase$1(previous);\n previous = offsetColumn;\n offsetColumn.title = \"\\u00A0\";\n offsetColumn.width = offset;\n viewportColumns.unshift(offsetColumn);\n }\n }\n }\n this.leafViewportColumns = viewportColumns.filter(c => !c.isColumnGroup);\n }\n toggleDetailRowLegacy(index, expand) {\n const hasCallback = typeof this.isDetailExpanded === 'function';\n if (isDevMode() && hasCallback) {\n throw new Error('The expandRow and collapseRow methods should not be called when using the ' +\n 'kendoGridDetailsExpandBy directive or the isDetailExpanded callback. ' +\n 'These methods are provided only for backwards compatibility with legacy versions.');\n }\n if (!isDevMode() && hasCallback) {\n return;\n }\n if (this.detailsService.isExpanded(index, null) !== expand) {\n this.detailsService.toggleRow(index, null);\n }\n }\n shouldResetSelection(selectableChanges) {\n const previousValue = selectableChanges.previousValue;\n if (!previousValue) {\n // Selection was disabled, no need to reset.\n return false;\n }\n const currentValue = selectableChanges.currentValue;\n if (!currentValue || currentValue.enabled === false) {\n // Selection disabled, reset.\n return true;\n }\n return previousValue.cell !== currentValue.cell;\n }\n}\nGridComponent.ɵfac = function GridComponent_Factory(t) { return new (t || GridComponent)(ɵngcc0.ɵɵdirectiveInject(BrowserSupportService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GroupInfoService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ResponsiveService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(DomEventsService), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ColumnReorderService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(SortService), ɵngcc0.ɵɵdirectiveInject(ScrollRequestService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGridComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GridComponent, selectors: [[\"kendo-grid\"]], contentQueries: function GridComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DetailTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoRecordsTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PagerTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolbarTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuTemplateDirective, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.detailTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noRecordsTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pagerTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columnMenuTemplates = _t);\n } }, viewQuery: function GridComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(_c1, true);\n ɵngcc0.ɵɵviewQuery(_c2, true);\n ɵngcc0.ɵɵviewQuery(_c3, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedHeader = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.header = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ariaRoot = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footer = _t);\n } }, hostVars: 11, hostBindings: function GridComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-grid\", ctx.hostClasses)(\"k-grid-lockedcolumns\", ctx.lockedClasses)(\"k-grid-virtual\", ctx.virtualClasses)(\"k-grid-no-scrollbar\", ctx.noScrollbarClass);\n } }, inputs: { data: \"data\", scrollable: \"scrollable\", selectable: \"selectable\", trackBy: \"trackBy\", virtualColumns: \"virtualColumns\", filterable: \"filterable\", sortable: \"sortable\", pageable: \"pageable\", groupable: \"groupable\", navigable: \"navigable\", autoSize: \"autoSize\", resizable: \"resizable\", reorderable: \"reorderable\", loading: \"loading\", columnMenu: \"columnMenu\", hideHeader: \"hideHeader\", skip: \"skip\", sort: \"sort\", group: \"group\", navigatable: \"navigatable\", rowClass: \"rowClass\", rowSelected: \"rowSelected\", cellSelected: \"cellSelected\", isDetailExpanded: \"isDetailExpanded\", pageSize: \"pageSize\", height: \"height\", rowHeight: \"rowHeight\", detailRowHeight: \"detailRowHeight\", filter: \"filter\" }, outputs: { filterChange: \"filterChange\", pageChange: \"pageChange\", groupChange: \"groupChange\", sortChange: \"sortChange\", selectionChange: \"selectionChange\", dataStateChange: \"dataStateChange\", groupExpand: \"groupExpand\", groupCollapse: \"groupCollapse\", detailExpand: \"detailExpand\", detailCollapse: \"detailCollapse\", edit: \"edit\", cancel: \"cancel\", save: \"save\", remove: \"remove\", add: \"add\", cellClose: \"cellClose\", cellClick: \"cellClick\", pdfExport: \"pdfExport\", excelExport: \"excelExport\", columnResize: \"columnResize\", columnReorder: \"columnReorder\", columnVisibilityChange: \"columnVisibilityChange\", columnLockedChange: \"columnLockedChange\", scrollBottom: \"scrollBottom\", contentScroll: \"contentScroll\" }, exportAs: [\"kendoGrid\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BrowserSupportService,\n LocalizationService,\n ColumnInfoService,\n SelectionService,\n CellSelectionService,\n DetailsService,\n GroupsService,\n GroupInfoService,\n ChangeNotificationService,\n EditService,\n PDFService,\n SuspendService,\n {\n provide: CELL_CONTEXT,\n useValue: ɵ4$2\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.grid'\n },\n FilterService,\n ResponsiveService,\n PagerContextService,\n ExcelService,\n ScrollSyncService,\n ResizeService,\n LocalDataChangesService,\n DomEventsService,\n ColumnResizingService,\n SinglePopupService,\n DragAndDropService,\n DragHintService,\n DropCueService,\n ColumnReorderService,\n NavigationService,\n FocusRoot,\n IdService,\n ScrollRequestService,\n SortService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: function () { let i18n_4; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label visible in the Grid group panel when it is empty\n * @meaning kendo.grid.groupPanelEmpty\n */\n const MSG_EXTERNAL_1430663748859427158$$DIST_FESM2015_INDEX_JS_5 = goog.getMsg(\"Drag a column header and drop it here to group by that column\");\n i18n_4 = MSG_EXTERNAL_1430663748859427158$$DIST_FESM2015_INDEX_JS_5;\n }\n else {\n i18n_4 = $localize `:kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty␟30bcb3a2fbc22fcab6ca805e74b90adb8ba1ae96␟1430663748859427158:Drag a column header and drop it here to group by that column`;\n } let i18n_6; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label visible in the Grid when there are no records\n * @meaning kendo.grid.noRecords\n */\n const MSG_EXTERNAL_1243399825085142134$$DIST_FESM2015_INDEX_JS_7 = goog.getMsg(\"No records available.\");\n i18n_6 = MSG_EXTERNAL_1243399825085142134$$DIST_FESM2015_INDEX_JS_7;\n }\n else {\n i18n_6 = $localize `:kendo.grid.noRecords|The label visible in the Grid when there are no records␟ff9cfd4bf3e40305db251f2b6961796c0550b4b0␟1243399825085142134:No records available.`;\n } let i18n_8; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the first page button in Grid pager\n * @meaning kendo.grid.pagerFirstPage\n */\n const MSG_EXTERNAL_5647145449685906398$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"Go to the first page\");\n i18n_8 = MSG_EXTERNAL_5647145449685906398$$DIST_FESM2015_INDEX_JS_9;\n }\n else {\n i18n_8 = $localize `:kendo.grid.pagerFirstPage|The label for the first page button in Grid pager␟b405dfc5ee42415daa08d54847d3010de1821111␟5647145449685906398:Go to the first page`;\n } let i18n_10; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the previous page button in Grid pager\n * @meaning kendo.grid.pagerPreviousPage\n */\n const MSG_EXTERNAL_6745088753482690847$$DIST_FESM2015_INDEX_JS_11 = goog.getMsg(\"Go to the previous page\");\n i18n_10 = MSG_EXTERNAL_6745088753482690847$$DIST_FESM2015_INDEX_JS_11;\n }\n else {\n i18n_10 = $localize `:kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager␟47aa4fe05f5a2577d3336971d7c44ce48802b860␟6745088753482690847:Go to the previous page`;\n } let i18n_12; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the next page button in Grid pager\n * @meaning kendo.grid.pagerNextPage\n */\n const MSG_EXTERNAL_5510985262435270859$$DIST_FESM2015_INDEX_JS_13 = goog.getMsg(\"Go to the next page\");\n i18n_12 = MSG_EXTERNAL_5510985262435270859$$DIST_FESM2015_INDEX_JS_13;\n }\n else {\n i18n_12 = $localize `:kendo.grid.pagerNextPage|The label for the next page button in Grid pager␟90031133fca899b4e491d9fc51128c1a184afb30␟5510985262435270859:Go to the next page`;\n } let i18n_14; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the last page button in Grid pager\n * @meaning kendo.grid.pagerLastPage\n */\n const MSG_EXTERNAL_4539768510520419313$$DIST_FESM2015_INDEX_JS_15 = goog.getMsg(\"Go to the last page\");\n i18n_14 = MSG_EXTERNAL_4539768510520419313$$DIST_FESM2015_INDEX_JS_15;\n }\n else {\n i18n_14 = $localize `:kendo.grid.pagerLastPage|The label for the last page button in Grid pager␟fe84f2ea868286ce03e50b6e55558c16d675c753␟4539768510520419313:Go to the last page`;\n } let i18n_16; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label before the current page number in the Grid pager\n * @meaning kendo.grid.pagerPage\n */\n const MSG_EXTERNAL_5228228287003939680$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"Page\");\n i18n_16 = MSG_EXTERNAL_5228228287003939680$$DIST_FESM2015_INDEX_JS_17;\n }\n else {\n i18n_16 = $localize `:kendo.grid.pagerPage|The label before the current page number in the Grid pager␟89c1f616c25bb610824cd8a26473a03921df48bd␟5228228287003939680:Page`;\n } let i18n_18; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label before the total pages number in the Grid pager\n * @meaning kendo.grid.pagerOf\n */\n const MSG_EXTERNAL_7004642096327889102$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"of\");\n i18n_18 = MSG_EXTERNAL_7004642096327889102$$DIST_FESM2015_INDEX_JS_19;\n }\n else {\n i18n_18 = $localize `:kendo.grid.pagerOf|The label before the total pages number in the Grid pager␟0c9abe48f5d4bd2cb51846712e41864fc64aad6a␟7004642096327889102:of`;\n } let i18n_20; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label after the total pages number in the Grid pager\n * @meaning kendo.grid.pagerItems\n */\n const MSG_EXTERNAL_700193548223931835$$DIST_FESM2015_INDEX_JS_21 = goog.getMsg(\"items\");\n i18n_20 = MSG_EXTERNAL_700193548223931835$$DIST_FESM2015_INDEX_JS_21;\n }\n else {\n i18n_20 = $localize `:kendo.grid.pagerItems|The label after the total pages number in the Grid pager␟7c1704d11bfb77340485acd891439c2b6c6616ca␟700193548223931835:items`;\n } let i18n_22; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the pager input in the Grid pager\n * @meaning kendo.grid.pagerPageNumberInputTitle\n */\n const MSG_EXTERNAL_2090461908134774363$$DIST_FESM2015_INDEX_JS_23 = goog.getMsg(\"Page Number\");\n i18n_22 = MSG_EXTERNAL_2090461908134774363$$DIST_FESM2015_INDEX_JS_23;\n }\n else {\n i18n_22 = $localize `:kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager␟f8bad8f2c7345e4fe531480e3034f7d3e954d383␟2090461908134774363:Page Number`;\n } let i18n_24; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the page size chooser in the Grid pager\n * @meaning kendo.grid.pagerItemsPerPage\n */\n const MSG_EXTERNAL_8838594644885628398$$DIST_FESM2015_INDEX_JS_25 = goog.getMsg(\"items per page\");\n i18n_24 = MSG_EXTERNAL_8838594644885628398$$DIST_FESM2015_INDEX_JS_25;\n }\n else {\n i18n_24 = $localize `:kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager␟3331fe7ec45f299afaa4c1e08ea25c493eda9144␟8838594644885628398:items per page`;\n } let i18n_26; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the filter cell or icon\n * @meaning kendo.grid.filter\n */\n const MSG_EXTERNAL_7977992299945497789$$DIST_FESM2015_INDEX_JS_27 = goog.getMsg(\"Filter\");\n i18n_26 = MSG_EXTERNAL_7977992299945497789$$DIST_FESM2015_INDEX_JS_27;\n }\n else {\n i18n_26 = $localize `:kendo.grid.filter|The label of the filter cell or icon␟21a04b7b090dac60e0449cb6e435b7e879173c75␟7977992299945497789:Filter`;\n } let i18n_28; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the equal filter operator\n * @meaning kendo.grid.filterEqOperator\n */\n const MSG_EXTERNAL_4328959145426393682$$DIST_FESM2015_INDEX_JS_29 = goog.getMsg(\"Is equal to\");\n i18n_28 = MSG_EXTERNAL_4328959145426393682$$DIST_FESM2015_INDEX_JS_29;\n }\n else {\n i18n_28 = $localize `:kendo.grid.filterEqOperator|The text of the equal filter operator␟8b31e1604d10a2f8709dcb1ed5c237e33cffc135␟4328959145426393682:Is equal to`;\n } let i18n_30; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the not equal filter operator\n * @meaning kendo.grid.filterNotEqOperator\n */\n const MSG_EXTERNAL_8497658332767349737$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"Is not equal to\");\n i18n_30 = MSG_EXTERNAL_8497658332767349737$$DIST_FESM2015_INDEX_JS_31;\n }\n else {\n i18n_30 = $localize `:kendo.grid.filterNotEqOperator|The text of the not equal filter operator␟d46e14d35d89d2fadf5c852abf5557643510a013␟8497658332767349737:Is not equal to`;\n } let i18n_32; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is null filter operator\n * @meaning kendo.grid.filterIsNullOperator\n */\n const MSG_EXTERNAL_1298299704757177797$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"Is null\");\n i18n_32 = MSG_EXTERNAL_1298299704757177797$$DIST_FESM2015_INDEX_JS_33;\n }\n else {\n i18n_32 = $localize `:kendo.grid.filterIsNullOperator|The text of the is null filter operator␟078c50eb1fe8b2b43fcc40c5e7f4493152310c2f␟1298299704757177797:Is null`;\n } let i18n_34; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is not null filter operator\n * @meaning kendo.grid.filterIsNotNullOperator\n */\n const MSG_EXTERNAL_8362279767336741540$$DIST_FESM2015_INDEX_JS_35 = goog.getMsg(\"Is not null\");\n i18n_34 = MSG_EXTERNAL_8362279767336741540$$DIST_FESM2015_INDEX_JS_35;\n }\n else {\n i18n_34 = $localize `:kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator␟70b39eeaf2674907b2e59b414baf17e032b464dc␟8362279767336741540:Is not null`;\n } let i18n_36; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is empty filter operator\n * @meaning kendo.grid.filterIsEmptyOperator\n */\n const MSG_EXTERNAL_4762263229995523226$$DIST_FESM2015_INDEX_JS_37 = goog.getMsg(\"Is empty\");\n i18n_36 = MSG_EXTERNAL_4762263229995523226$$DIST_FESM2015_INDEX_JS_37;\n }\n else {\n i18n_36 = $localize `:kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator␟a4e77e444b4e9b63851ac818e20136212b06c750␟4762263229995523226:Is empty`;\n } let i18n_38; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is not empty filter operator\n * @meaning kendo.grid.filterIsNotEmptyOperator\n */\n const MSG_EXTERNAL_8245213618709258015$$DIST_FESM2015_INDEX_JS_39 = goog.getMsg(\"Is not empty\");\n i18n_38 = MSG_EXTERNAL_8245213618709258015$$DIST_FESM2015_INDEX_JS_39;\n }\n else {\n i18n_38 = $localize `:kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator␟dee7553c341248e90aef4a8e7438c52e667e68be␟8245213618709258015:Is not empty`;\n } let i18n_40; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the starts with filter operator\n * @meaning kendo.grid.filterStartsWithOperator\n */\n const MSG_EXTERNAL_6087783423599420507$$DIST_FESM2015_INDEX_JS_41 = goog.getMsg(\"Starts with\");\n i18n_40 = MSG_EXTERNAL_6087783423599420507$$DIST_FESM2015_INDEX_JS_41;\n }\n else {\n i18n_40 = $localize `:kendo.grid.filterStartsWithOperator|The text of the starts with filter operator␟da43b363b636156e3ccdbb64a0788bdeab51e992␟6087783423599420507:Starts with`;\n } let i18n_42; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the contains filter operator\n * @meaning kendo.grid.filterContainsOperator\n */\n const MSG_EXTERNAL_3831180413287131758$$DIST_FESM2015_INDEX_JS_43 = goog.getMsg(\"Contains\");\n i18n_42 = MSG_EXTERNAL_3831180413287131758$$DIST_FESM2015_INDEX_JS_43;\n }\n else {\n i18n_42 = $localize `:kendo.grid.filterContainsOperator|The text of the contains filter operator␟5b568a46d2e34ebde7dd53a7e599cbbb7dc6bae1␟3831180413287131758:Contains`;\n } let i18n_44; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the does not contain filter operator\n * @meaning kendo.grid.filterNotContainsOperator\n */\n const MSG_EXTERNAL_7331253838216904826$$DIST_FESM2015_INDEX_JS_45 = goog.getMsg(\"Does not contain\");\n i18n_44 = MSG_EXTERNAL_7331253838216904826$$DIST_FESM2015_INDEX_JS_45;\n }\n else {\n i18n_44 = $localize `:kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator␟be06aa4fde7fa722c9de5a45f241ff595071d718␟7331253838216904826:Does not contain`;\n } let i18n_46; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the ends with filter operator\n * @meaning kendo.grid.filterEndsWithOperator\n */\n const MSG_EXTERNAL_3662435311670509156$$DIST_FESM2015_INDEX_JS_47 = goog.getMsg(\"Ends with\");\n i18n_46 = MSG_EXTERNAL_3662435311670509156$$DIST_FESM2015_INDEX_JS_47;\n }\n else {\n i18n_46 = $localize `:kendo.grid.filterEndsWithOperator|The text of the ends with filter operator␟a54b2ecffb41f0603ceedc7ea5a40b7d130e2fa1␟3662435311670509156:Ends with`;\n } let i18n_48; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the greater than or equal filter operator\n * @meaning kendo.grid.filterGteOperator\n */\n const MSG_EXTERNAL_4542824413455511831$$DIST_FESM2015_INDEX_JS_49 = goog.getMsg(\"Is greater than or equal to\");\n i18n_48 = MSG_EXTERNAL_4542824413455511831$$DIST_FESM2015_INDEX_JS_49;\n }\n else {\n i18n_48 = $localize `:kendo.grid.filterGteOperator|The text of the greater than or equal filter operator␟68471603db771d0304d02fe086da9701c16911c3␟4542824413455511831:Is greater than or equal to`;\n } let i18n_50; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the greater than filter operator\n * @meaning kendo.grid.filterGtOperator\n */\n const MSG_EXTERNAL_1527483349261806183$$DIST_FESM2015_INDEX_JS_51 = goog.getMsg(\"Is greater than\");\n i18n_50 = MSG_EXTERNAL_1527483349261806183$$DIST_FESM2015_INDEX_JS_51;\n }\n else {\n i18n_50 = $localize `:kendo.grid.filterGtOperator|The text of the greater than filter operator␟ae68acc0e18252a348bdfb32112996d81e5305de␟1527483349261806183:Is greater than`;\n } let i18n_52; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the less than or equal filter operator\n * @meaning kendo.grid.filterLteOperator\n */\n const MSG_EXTERNAL_4840714404733417604$$DIST_FESM2015_INDEX_JS_53 = goog.getMsg(\"Is less than or equal to\");\n i18n_52 = MSG_EXTERNAL_4840714404733417604$$DIST_FESM2015_INDEX_JS_53;\n }\n else {\n i18n_52 = $localize `:kendo.grid.filterLteOperator|The text of the less than or equal filter operator␟e48d50a6422c616a00b95025adc5283aff4fa8cb␟4840714404733417604:Is less than or equal to`;\n } let i18n_54; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the less than filter operator\n * @meaning kendo.grid.filterLtOperator\n */\n const MSG_EXTERNAL_498627126459578706$$DIST_FESM2015_INDEX_JS_55 = goog.getMsg(\"Is less than\");\n i18n_54 = MSG_EXTERNAL_498627126459578706$$DIST_FESM2015_INDEX_JS_55;\n }\n else {\n i18n_54 = $localize `:kendo.grid.filterLtOperator|The text of the less than filter operator␟c4d58f0e509cb7e37014715dd91546a724210d70␟498627126459578706:Is less than`;\n } let i18n_56; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the IsTrue boolean filter option\n * @meaning kendo.grid.filterIsTrue\n */\n const MSG_EXTERNAL_2361673238316312251$$DIST_FESM2015_INDEX_JS_57 = goog.getMsg(\"Is True\");\n i18n_56 = MSG_EXTERNAL_2361673238316312251$$DIST_FESM2015_INDEX_JS_57;\n }\n else {\n i18n_56 = $localize `:kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option␟d5f1e9028bc60c30e8f8e0f9cfeb872512446cea␟2361673238316312251:Is True`;\n } let i18n_58; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the IsFalse boolean filter option\n * @meaning kendo.grid.filterIsFalse\n */\n const MSG_EXTERNAL_7759366406135608407$$DIST_FESM2015_INDEX_JS_59 = goog.getMsg(\"Is False\");\n i18n_58 = MSG_EXTERNAL_7759366406135608407$$DIST_FESM2015_INDEX_JS_59;\n }\n else {\n i18n_58 = $localize `:kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option␟6d34731320e2536fd78f4a9e08f0b8dcd01edf3d␟7759366406135608407:Is False`;\n } let i18n_60; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the (All) boolean filter option\n * @meaning kendo.grid.filterBooleanAll\n */\n const MSG_EXTERNAL_9215343856736761875$$DIST_FESM2015_INDEX_JS_61 = goog.getMsg(\"(All)\");\n i18n_60 = MSG_EXTERNAL_9215343856736761875$$DIST_FESM2015_INDEX_JS_61;\n }\n else {\n i18n_60 = $localize `:kendo.grid.filterBooleanAll|The text of the (All) boolean filter option␟4da1456a62bafe2614ed2bc05a2c790a64a4dd0b␟9215343856736761875:(All)`;\n } let i18n_62; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the after or equal date filter operator\n * @meaning kendo.grid.filterAfterOrEqualOperator\n */\n const MSG_EXTERNAL_1964413288176201979$$DIST_FESM2015_INDEX_JS_63 = goog.getMsg(\"Is after or equal to\");\n i18n_62 = MSG_EXTERNAL_1964413288176201979$$DIST_FESM2015_INDEX_JS_63;\n }\n else {\n i18n_62 = $localize `:kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator␟d7dac1bbc2372d578a9d2bca099de766043aed7e␟1964413288176201979:Is after or equal to`;\n } let i18n_64; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the after date filter operator\n * @meaning kendo.grid.filterAfterOperator\n */\n const MSG_EXTERNAL_3078502182807244703$$DIST_FESM2015_INDEX_JS_65 = goog.getMsg(\"Is after\");\n i18n_64 = MSG_EXTERNAL_3078502182807244703$$DIST_FESM2015_INDEX_JS_65;\n }\n else {\n i18n_64 = $localize `:kendo.grid.filterAfterOperator|The text of the after date filter operator␟bff777df0d0831cc02679227422fab4ef2763fa9␟3078502182807244703:Is after`;\n } let i18n_66; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the before date filter operator\n * @meaning kendo.grid.filterBeforeOperator\n */\n const MSG_EXTERNAL_3348865631071358219$$DIST_FESM2015_INDEX_JS_67 = goog.getMsg(\"Is before\");\n i18n_66 = MSG_EXTERNAL_3348865631071358219$$DIST_FESM2015_INDEX_JS_67;\n }\n else {\n i18n_66 = $localize `:kendo.grid.filterBeforeOperator|The text of the before date filter operator␟35ef5cf367670f15432c9f8761bc85fbdb2b1830␟3348865631071358219:Is before`;\n } let i18n_68; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the before or equal date filter operator\n * @meaning kendo.grid.filterBeforeOrEqualOperator\n */\n const MSG_EXTERNAL_6582064037090631388$$DIST_FESM2015_INDEX_JS_69 = goog.getMsg(\"Is before or equal to\");\n i18n_68 = MSG_EXTERNAL_6582064037090631388$$DIST_FESM2015_INDEX_JS_69;\n }\n else {\n i18n_68 = $localize `:kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator␟27a6b29ffbc1eb498de8d7af20051461a2e842ec␟6582064037090631388:Is before or equal to`;\n } let i18n_70; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the filter button\n * @meaning kendo.grid.filterFilterButton\n */\n const MSG_EXTERNAL_5185263258022896121$$DIST_FESM2015_INDEX_JS_71 = goog.getMsg(\"Filter\");\n i18n_70 = MSG_EXTERNAL_5185263258022896121$$DIST_FESM2015_INDEX_JS_71;\n }\n else {\n i18n_70 = $localize `:kendo.grid.filterFilterButton|The text of the filter button␟4f1c08d0b056646cdb668da669e2e15825adfe4d␟5185263258022896121:Filter`;\n } let i18n_72; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the clear filter button\n * @meaning kendo.grid.filterClearButton\n */\n const MSG_EXTERNAL_3031209415830321799$$DIST_FESM2015_INDEX_JS_73 = goog.getMsg(\"Clear\");\n i18n_72 = MSG_EXTERNAL_3031209415830321799$$DIST_FESM2015_INDEX_JS_73;\n }\n else {\n i18n_72 = $localize `:kendo.grid.filterClearButton|The text of the clear filter button␟06e4e4dadede6f91f261cdbb7fb174246a135238␟3031209415830321799:Clear`;\n } let i18n_74; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the And filter logic\n * @meaning kendo.grid.filterAndLogic\n */\n const MSG_EXTERNAL_512662285155477884$$DIST_FESM2015_INDEX_JS_75 = goog.getMsg(\"And\");\n i18n_74 = MSG_EXTERNAL_512662285155477884$$DIST_FESM2015_INDEX_JS_75;\n }\n else {\n i18n_74 = $localize `:kendo.grid.filterAndLogic|The text of the And filter logic␟f73fbcc2f813d469e4a34491950ca01ea1ac8f60␟512662285155477884:And`;\n } let i18n_76; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the Or filter logic\n * @meaning kendo.grid.filterOrLogic\n */\n const MSG_EXTERNAL_1964926727342405367$$DIST_FESM2015_INDEX_JS_77 = goog.getMsg(\"Or\");\n i18n_76 = MSG_EXTERNAL_1964926727342405367$$DIST_FESM2015_INDEX_JS_77;\n }\n else {\n i18n_76 = $localize `:kendo.grid.filterOrLogic|The text of the Or filter logic␟04e64780de0fc1c3a9986997e0808ec53a5f2a63␟1964926727342405367:Or`;\n } let i18n_78; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The loading text\n * @meaning kendo.grid.loading\n */\n const MSG_EXTERNAL_5425510787229531767$$DIST_FESM2015_INDEX_JS_79 = goog.getMsg(\"Loading\");\n i18n_78 = MSG_EXTERNAL_5425510787229531767$$DIST_FESM2015_INDEX_JS_79;\n }\n else {\n i18n_78 = $localize `:kendo.grid.loading|The loading text␟781c049cc69efc30bc8053af9ace3cb4b04bd438␟5425510787229531767:Loading`;\n } let i18n_80; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the column menu icon\n * @meaning kendo.grid.columnMenu\n */\n const MSG_EXTERNAL_2820335494528144626$$DIST_FESM2015_INDEX_JS_81 = goog.getMsg(\"Column Menu\");\n i18n_80 = MSG_EXTERNAL_2820335494528144626$$DIST_FESM2015_INDEX_JS_81;\n }\n else {\n i18n_80 = $localize `:kendo.grid.columnMenu|The title of the column menu icon␟3596c6b21d39223adc5c352daec9938474a8cc0d␟2820335494528144626:Column Menu`;\n } let i18n_82; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the columns item\n * @meaning kendo.grid.columns\n */\n const MSG_EXTERNAL_5332162737795508854$$DIST_FESM2015_INDEX_JS_83 = goog.getMsg(\"Columns\");\n i18n_82 = MSG_EXTERNAL_5332162737795508854$$DIST_FESM2015_INDEX_JS_83;\n }\n else {\n i18n_82 = $localize `:kendo.grid.columns|The text shown in the column menu for the columns item␟9b841399fbb3d81f2401f98b4f4763834b72a1e5␟5332162737795508854:Columns`;\n } let i18n_84; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the lock item\n * @meaning kendo.grid.lock\n */\n const MSG_EXTERNAL_5849203148124173556$$DIST_FESM2015_INDEX_JS_85 = goog.getMsg(\"Lock\");\n i18n_84 = MSG_EXTERNAL_5849203148124173556$$DIST_FESM2015_INDEX_JS_85;\n }\n else {\n i18n_84 = $localize `:kendo.grid.lock|The text shown in the column menu for the lock item␟f356cae509dec3dc1b7156326b9a0328a79c62a8␟5849203148124173556:Lock`;\n } let i18n_86; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the unlock item\n * @meaning kendo.grid.unlock\n */\n const MSG_EXTERNAL_6968586378603932789$$DIST_FESM2015_INDEX_JS_87 = goog.getMsg(\"Unlock\");\n i18n_86 = MSG_EXTERNAL_6968586378603932789$$DIST_FESM2015_INDEX_JS_87;\n }\n else {\n i18n_86 = $localize `:kendo.grid.unlock|The text shown in the column menu for the unlock item␟f33355540003068372e39ba7f3def794869ea9f8␟6968586378603932789:Unlock`;\n } let i18n_88; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the sort icon\n * @meaning kendo.grid.sortable\n */\n const MSG_EXTERNAL_3824304972336788145$$DIST_FESM2015_INDEX_JS_89 = goog.getMsg(\"Sortable\");\n i18n_88 = MSG_EXTERNAL_3824304972336788145$$DIST_FESM2015_INDEX_JS_89;\n }\n else {\n i18n_88 = $localize `:kendo.grid.sortable|The label of the sort icon␟a692ba271be066ce379f942ff67094e1ea989f4c␟3824304972336788145:Sortable`;\n } let i18n_90; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the sort ascending item\n * @meaning kendo.grid.sortAscending\n */\n const MSG_EXTERNAL_6297762560864270240$$DIST_FESM2015_INDEX_JS_91 = goog.getMsg(\"Sort Ascending\");\n i18n_90 = MSG_EXTERNAL_6297762560864270240$$DIST_FESM2015_INDEX_JS_91;\n }\n else {\n i18n_90 = $localize `:kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item␟96beffd8446c5455f3bbdc313c946db32df7dcc2␟6297762560864270240:Sort Ascending`;\n } let i18n_92; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the sort descending item\n * @meaning kendo.grid.sortDescending\n */\n const MSG_EXTERNAL_5605073536641230977$$DIST_FESM2015_INDEX_JS_93 = goog.getMsg(\"Sort Descending\");\n i18n_92 = MSG_EXTERNAL_5605073536641230977$$DIST_FESM2015_INDEX_JS_93;\n }\n else {\n i18n_92 = $localize `:kendo.grid.sortDescending|The text shown in the column menu for the sort descending item␟208d0538d4c2537a1cbf456941e34a2884053d52␟5605073536641230977:Sort Descending`;\n } let i18n_94; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is sorted ascending\n * @meaning kendo.grid.sortedAscending\n */\n const MSG_EXTERNAL_6275944032047713540$$DIST_FESM2015_INDEX_JS_95 = goog.getMsg(\"Sorted Ascending\");\n i18n_94 = MSG_EXTERNAL_6275944032047713540$$DIST_FESM2015_INDEX_JS_95;\n }\n else {\n i18n_94 = $localize `:kendo.grid.sortedAscending|The status announcement when a column is sorted ascending␟947c64329461efd9f8a9aa2c51acbbd099170aa5␟6275944032047713540:Sorted Ascending`;\n } let i18n_96; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is sorted descending\n * @meaning kendo.grid.sortedDescending\n */\n const MSG_EXTERNAL_8155280769473236383$$DIST_FESM2015_INDEX_JS_97 = goog.getMsg(\"Sorted Descending\");\n i18n_96 = MSG_EXTERNAL_8155280769473236383$$DIST_FESM2015_INDEX_JS_97;\n }\n else {\n i18n_96 = $localize `:kendo.grid.sortedDescending|The status announcement when a column is sorted descending␟092a688d1b2b6d873bdc29beaaf43c3f45336581␟8155280769473236383:Sorted Descending`;\n } let i18n_98; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is no longer sorted\n * @meaning kendo.grid.sortedDefault\n */\n const MSG_EXTERNAL_5229177293891232538$$DIST_FESM2015_INDEX_JS_99 = goog.getMsg(\"Not Sorted\");\n i18n_98 = MSG_EXTERNAL_5229177293891232538$$DIST_FESM2015_INDEX_JS_99;\n }\n else {\n i18n_98 = $localize `:kendo.grid.sortedDefault|The status announcement when a column is no longer sorted␟66e99ea340974022c07c52a6f668f5573e7edab0␟5229177293891232538:Not Sorted`;\n } let i18n_100; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu or column chooser for the columns apply button\n * @meaning kendo.grid.columnsApply\n */\n const MSG_EXTERNAL_34213208292862969$$DIST_FESM2015_INDEX_JS_101 = goog.getMsg(\"Apply\");\n i18n_100 = MSG_EXTERNAL_34213208292862969$$DIST_FESM2015_INDEX_JS_101;\n }\n else {\n i18n_100 = $localize `:kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button␟04600bd6e362cf9da9f7f9c4666eab2c88eb6a90␟34213208292862969:Apply`;\n } let i18n_102; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu or column chooser for the columns reset button\n * @meaning kendo.grid.columnsReset\n */\n const MSG_EXTERNAL_4465838259914958827$$DIST_FESM2015_INDEX_JS_103 = goog.getMsg(\"Reset\");\n i18n_102 = MSG_EXTERNAL_4465838259914958827$$DIST_FESM2015_INDEX_JS_103;\n }\n else {\n i18n_102 = $localize `:kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button␟94d3b472d99994a5cca9930afd4cf0ac2774c382␟4465838259914958827:Reset`;\n } let i18n_104; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the expand icon of detail rows.\n * @meaning kendo.grid.detailExpand\n */\n const MSG_EXTERNAL_6952757249912226136$$DIST_FESM2015_INDEX_JS_105 = goog.getMsg(\"Expand Details\");\n i18n_104 = MSG_EXTERNAL_6952757249912226136$$DIST_FESM2015_INDEX_JS_105;\n }\n else {\n i18n_104 = $localize `:kendo.grid.detailExpand|The title of the expand icon of detail rows.␟ad6629bb6e79235623cfce486ef48087dbe96fb5␟6952757249912226136:Expand Details`;\n } let i18n_106; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the collapse icon of detail rows.\n * @meaning kendo.grid.detailCollapse\n */\n const MSG_EXTERNAL_6065477639036399169$$DIST_FESM2015_INDEX_JS_107 = goog.getMsg(\"Collapse Details\");\n i18n_106 = MSG_EXTERNAL_6065477639036399169$$DIST_FESM2015_INDEX_JS_107;\n }\n else {\n i18n_106 = $localize `:kendo.grid.detailCollapse|The title of the collapse icon of detail rows.␟ace0c0a58fbb211e8678efb3bd6ac9bb587144c3␟6065477639036399169:Collapse Details`;\n } let i18n_108; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the Today button of the Date filter.\n * @meaning kendo.grid.filterDateToday\n */\n const MSG_EXTERNAL_1656723147090613075$$DIST_FESM2015_INDEX_JS_109 = goog.getMsg(\"TODAY\");\n i18n_108 = MSG_EXTERNAL_1656723147090613075$$DIST_FESM2015_INDEX_JS_109;\n }\n else {\n i18n_108 = $localize `:kendo.grid.filterDateToday|The text of the Today button of the Date filter.␟745058f85d92ee5228977277195262978828c4c8␟1656723147090613075:TODAY`;\n } let i18n_110; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Toggle button of the Date filter.\n * @meaning kendo.grid.filterDateToggle\n */\n const MSG_EXTERNAL_15438307630389352$$DIST_FESM2015_INDEX_JS_111 = goog.getMsg(\"Toggle Calendar\");\n i18n_110 = MSG_EXTERNAL_15438307630389352$$DIST_FESM2015_INDEX_JS_111;\n }\n else {\n i18n_110 = $localize `:kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter.␟2c916ea2cbd37665e512219650c37dc17b9ef0c0␟15438307630389352:Toggle Calendar`;\n } let i18n_112; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Decrement button of the Numeric filter.\n * @meaning kendo.grid.filterNumericDecrement\n */\n const MSG_EXTERNAL_534533728304192410$$DIST_FESM2015_INDEX_JS_113 = goog.getMsg(\"Decrement\");\n i18n_112 = MSG_EXTERNAL_534533728304192410$$DIST_FESM2015_INDEX_JS_113;\n }\n else {\n i18n_112 = $localize `:kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter.␟7f991d698abebb2e50570f9aef14126ae931c513␟534533728304192410:Decrement`;\n } let i18n_114; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Increment button of the Numeric filter.\n * @meaning kendo.grid.filterNumericIncrement\n */\n const MSG_EXTERNAL_5462143714591662391$$DIST_FESM2015_INDEX_JS_115 = goog.getMsg(\"Increment\");\n i18n_114 = MSG_EXTERNAL_5462143714591662391$$DIST_FESM2015_INDEX_JS_115;\n }\n else {\n i18n_114 = $localize `:kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter.␟25bc8b86968819d3f687aa6dde652800bd4b6b2a␟5462143714591662391:Increment`;\n } return [[\"kendoGridLocalizedMessages\", \"\", \"groupPanelEmpty\", i18n_4, \"noRecords\", i18n_6, \"pagerFirstPage\", i18n_8, \"pagerPreviousPage\", i18n_10, \"pagerNextPage\", i18n_12, \"pagerLastPage\", i18n_14, \"pagerPage\", i18n_16, \"pagerOf\", i18n_18, \"pagerItems\", i18n_20, \"pagerPageNumberInputTitle\", i18n_22, \"pagerItemsPerPage\", i18n_24, \"filter\", i18n_26, \"filterEqOperator\", i18n_28, \"filterNotEqOperator\", i18n_30, \"filterIsNullOperator\", i18n_32, \"filterIsNotNullOperator\", i18n_34, \"filterIsEmptyOperator\", i18n_36, \"filterIsNotEmptyOperator\", i18n_38, \"filterStartsWithOperator\", i18n_40, \"filterContainsOperator\", i18n_42, \"filterNotContainsOperator\", i18n_44, \"filterEndsWithOperator\", i18n_46, \"filterGteOperator\", i18n_48, \"filterGtOperator\", i18n_50, \"filterLteOperator\", i18n_52, \"filterLtOperator\", i18n_54, \"filterIsTrue\", i18n_56, \"filterIsFalse\", i18n_58, \"filterBooleanAll\", i18n_60, \"filterAfterOrEqualOperator\", i18n_62, \"filterAfterOperator\", i18n_64, \"filterBeforeOperator\", i18n_66, \"filterBeforeOrEqualOperator\", i18n_68, \"filterFilterButton\", i18n_70, \"filterClearButton\", i18n_72, \"filterAndLogic\", i18n_74, \"filterOrLogic\", i18n_76, \"loading\", i18n_78, \"columnMenu\", i18n_80, \"columns\", i18n_82, \"lock\", i18n_84, \"unlock\", i18n_86, \"sortable\", i18n_88, \"sortAscending\", i18n_90, \"sortDescending\", i18n_92, \"sortedAscending\", i18n_94, \"sortedDescending\", i18n_96, \"sortedDefault\", i18n_98, \"columnsApply\", i18n_100, \"columnsReset\", i18n_102, \"detailExpand\", i18n_104, \"detailCollapse\", i18n_106, \"filterDateToday\", i18n_108, \"filterDateToggle\", i18n_110, \"filterNumericDecrement\", i18n_112, \"filterNumericIncrement\", i18n_114], [\"position\", \"top\", 4, \"ngIf\"], [3, \"text\", \"groups\", \"change\", 4, \"ngIf\"], [\"role\", \"grid\", 1, \"k-grid-aria-root\"], [\"ariaRoot\", \"\"], [3, \"ngIf\"], [3, \"template\", \"pageSize\", \"total\", \"skip\", \"options\", \"pageChange\", 4, \"ngIf\"], [\"position\", \"bottom\", 4, \"ngIf\"], [\"position\", \"top\"], [3, \"text\", \"groups\", \"change\"], [\"class\", \"k-grid-header\", \"role\", \"presentation\", 3, \"padding\", 4, \"ngIf\"], [\"kendoDraggable\", \"\", \"kendoGridSelectionMarquee\", \"\", 3, \"data\", \"rowHeight\", \"detailRowHeight\", \"total\", \"take\", \"groups\", \"groupable\", \"skip\", \"trackBy\", \"columns\", \"selectable\", \"filterable\", \"detailTemplate\", \"noRecordsTemplate\", \"rowClass\", \"loading\", \"isVirtual\", \"virtualColumns\", \"enableDrag\", \"pageChange\", \"scrollBottom\", \"contentScroll\"], [\"class\", \"k-grid-footer\", 3, \"padding\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-header\"], [\"role\", \"presentation\", \"class\", \"k-grid-header-locked\", 3, \"width\", 4, \"ngIf\"], [\"role\", \"presentation\", \"data-scrollable\", \"\", 1, \"k-grid-header-wrap\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"header\", \"\"], [\"role\", \"presentation\", 3, \"virtualColumns\"], [\"kendoGridColGroup\", \"\", \"role\", \"presentation\", 3, \"columns\", \"groups\", \"detailTemplate\"], [\"kendoGridHeader\", \"\", \"role\", \"presentation\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"sort\", \"filter\", \"filterable\", \"groupable\", \"reorderable\", \"groups\", \"sortable\", \"columnMenu\", \"columnMenuTemplate\", \"lockedColumnsCount\", \"totalColumnsCount\", \"detailTemplate\"], [\"class\", \"k-width-container\", \"role\", \"presentation\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-header-locked\"], [\"lockedHeader\", \"\"], [\"role\", \"presentation\", 3, \"locked\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"sort\", \"groups\", \"filter\", \"filterable\", \"groupable\", \"reorderable\", \"sortable\", \"columnMenu\", \"columnMenuTemplate\", \"totalColumnsCount\", \"detailTemplate\"], [\"role\", \"presentation\", 1, \"k-width-container\"], [1, \"k-grid-footer\"], [\"class\", \"k-grid-footer-locked\", 3, \"width\", 4, \"ngIf\"], [\"data-scrollable\", \"\", 1, \"k-grid-footer-wrap\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"footer\", \"\"], [\"role\", \"presentation\"], [\"kendoGridColGroup\", \"\", 3, \"columns\", \"groups\", \"detailTemplate\"], [\"kendoGridFooter\", \"\", 3, \"logicalRowIndex\", \"scrollable\", \"groups\", \"columns\", \"lockedColumnsCount\", \"detailTemplate\"], [1, \"k-grid-footer-locked\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"groups\", \"columns\", \"detailTemplate\", \"logicalRowIndex\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"groups\", \"groupable\", \"reorderable\", \"sort\", \"sortable\", \"filter\", \"filterable\", \"columnMenu\", \"columnMenuTemplate\", \"detailTemplate\", 4, \"ngIf\"], [\"kendoGridTableBody\", \"\", \"kendoDraggable\", \"\", \"kendoGridSelectionMarquee\", \"\", 3, \"groups\", \"data\", \"skip\", \"columns\", \"selectable\", \"filterable\", \"noRecordsTemplate\", \"detailTemplate\", \"showGroupFooters\", \"trackBy\", \"rowClass\", \"enableDrag\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"logicalRowIndex\", \"groups\", \"columns\", \"detailTemplate\", 4, \"ngIf\"], [\"kendoGridLoading\", \"\", 4, \"ngIf\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"groups\", \"groupable\", \"reorderable\", \"sort\", \"sortable\", \"filter\", \"filterable\", \"columnMenu\", \"columnMenuTemplate\", \"detailTemplate\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"logicalRowIndex\", \"groups\", \"columns\", \"detailTemplate\"], [\"kendoGridLoading\", \"\"], [3, \"template\", \"pageSize\", \"total\", \"skip\", \"options\", \"pageChange\"], [\"position\", \"bottom\"]]; }, template: function GridComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵtemplate(1, GridComponent_kendo_grid_toolbar_1_Template, 1, 0, \"kendo-grid-toolbar\", 1);\n ɵngcc0.ɵɵtemplate(2, GridComponent_kendo_grid_group_panel_2_Template, 1, 2, \"kendo-grid-group-panel\", 2);\n ɵngcc0.ɵɵelementStart(3, \"div\", 3, 4);\n ɵngcc0.ɵɵtemplate(5, GridComponent_ng_template_5_Template, 3, 21, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(6, GridComponent_ng_template_6_Template, 6, 20, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, GridComponent_kendo_pager_7_Template, 1, 5, \"kendo-pager\", 6);\n ɵngcc0.ɵɵtemplate(8, GridComponent_kendo_grid_toolbar_8_Template, 1, 0, \"kendo-grid-toolbar\", 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showTopToolbar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showGroupPanel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-rowcount\", ctx.ariaRowCount)(\"aria-colcount\", ctx.ariaColCount);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isScrollable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.isScrollable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showPager);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showBottomToolbar);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc5.NgIf, ToolbarComponent, GroupPanelComponent, ListComponent, ɵngcc2.DraggableDirective, GridMarqueeDirective, ResizableContainerDirective, TableDirective, ColGroupComponent, HeaderComponent, FooterComponent, TableBodyComponent, LoadingComponent, PagerComponent]; }, styles: [\" .k-grid .k-grid-aria-root {\\n display: flex;\\n flex-direction: column;\\n flex: 1 1 auto;\\n overflow: hidden;\\n }\\n\\n .k-grid .k-filter-row td {\\n white-space: nowrap;\\n }\"], encapsulation: 2 });\n/** @nocollapse */\nGridComponent.ctorParameters = () => [\n { type: BrowserSupportService },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: ElementRef },\n { type: GroupInfoService },\n { type: GroupsService },\n { type: ChangeNotificationService },\n { type: DetailsService },\n { type: EditService },\n { type: FilterService },\n { type: PDFService },\n { type: ResponsiveService },\n { type: Renderer2 },\n { type: ExcelService },\n { type: NgZone },\n { type: ScrollSyncService },\n { type: DomEventsService },\n { type: ColumnResizingService },\n { type: ChangeDetectorRef },\n { type: ColumnReorderService },\n { type: ColumnInfoService },\n { type: NavigationService },\n { type: SortService },\n { type: ScrollRequestService },\n { type: LocalizationService }\n];\nGridComponent.propDecorators = {\n data: [{ type: Input }],\n pageSize: [{ type: Input }],\n height: [{ type: Input }],\n rowHeight: [{ type: Input }],\n detailRowHeight: [{ type: Input }],\n skip: [{ type: Input }],\n scrollable: [{ type: Input }],\n selectable: [{ type: Input }],\n sort: [{ type: Input }],\n trackBy: [{ type: Input }],\n filter: [{ type: Input }],\n group: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n filterable: [{ type: Input }],\n sortable: [{ type: Input }],\n pageable: [{ type: Input }],\n groupable: [{ type: Input }],\n navigable: [{ type: Input }],\n navigatable: [{ type: Input }],\n autoSize: [{ type: Input }],\n rowClass: [{ type: Input }],\n rowSelected: [{ type: Input }],\n cellSelected: [{ type: Input }],\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n loading: [{ type: Input }],\n columnMenu: [{ type: Input }],\n hideHeader: [{ type: Input }],\n filterChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n groupChange: [{ type: Output }],\n sortChange: [{ type: Output }],\n selectionChange: [{ type: Output }],\n dataStateChange: [{ type: Output }],\n groupExpand: [{ type: Output }],\n groupCollapse: [{ type: Output }],\n detailExpand: [{ type: Output }],\n detailCollapse: [{ type: Output }],\n edit: [{ type: Output }],\n cancel: [{ type: Output }],\n save: [{ type: Output }],\n remove: [{ type: Output }],\n add: [{ type: Output }],\n cellClose: [{ type: Output }],\n cellClick: [{ type: Output }],\n pdfExport: [{ type: Output }],\n excelExport: [{ type: Output }],\n columnResize: [{ type: Output }],\n columnReorder: [{ type: Output }],\n columnVisibilityChange: [{ type: Output }],\n columnLockedChange: [{ type: Output }],\n scrollBottom: [{ type: Output }],\n contentScroll: [{ type: Output }],\n columns: [{ type: ContentChildren, args: [ColumnBase$1,] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-grid',] }],\n lockedClasses: [{ type: HostBinding, args: ['class.k-grid-lockedcolumns',] }],\n virtualClasses: [{ type: HostBinding, args: ['class.k-grid-virtual',] }],\n noScrollbarClass: [{ type: HostBinding, args: ['class.k-grid-no-scrollbar',] }],\n detailTemplateChildren: [{ type: ContentChildren, args: [DetailTemplateDirective,] }],\n noRecordsTemplateChildren: [{ type: ContentChildren, args: [NoRecordsTemplateDirective,] }],\n pagerTemplateChildren: [{ type: ContentChildren, args: [PagerTemplateDirective,] }],\n toolbarTemplateChildren: [{ type: ContentChildren, args: [ToolbarTemplateDirective,] }],\n columnMenuTemplates: [{ type: ContentChildren, args: [ColumnMenuTemplateDirective,] }],\n lockedHeader: [{ type: ViewChild, args: [\"lockedHeader\",] }],\n header: [{ type: ViewChild, args: [\"header\",] }],\n footer: [{ type: ViewChildren, args: [\"footer\",] }],\n ariaRoot: [{ type: ViewChild, args: ['ariaRoot',] }],\n isDetailExpanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridComponent, [{\n type: Component,\n args: [{\n encapsulation: ViewEncapsulation.None,\n exportAs: 'kendoGrid',\n providers: [\n BrowserSupportService,\n LocalizationService,\n ColumnInfoService,\n SelectionService,\n CellSelectionService,\n DetailsService,\n GroupsService,\n GroupInfoService,\n ChangeNotificationService,\n EditService,\n PDFService,\n SuspendService,\n {\n provide: CELL_CONTEXT,\n useValue: ɵ4$2\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.grid'\n },\n FilterService,\n ResponsiveService,\n PagerContextService,\n ExcelService,\n ScrollSyncService,\n ResizeService,\n LocalDataChangesService,\n DomEventsService,\n ColumnResizingService,\n SinglePopupService,\n DragAndDropService,\n DragHintService,\n DropCueService,\n ColumnReorderService,\n NavigationService,\n FocusRoot,\n IdService,\n ScrollRequestService,\n SortService\n ],\n selector: 'kendo-grid',\n styles: [\n // Styles for backwards compatibility with kendo-theme-default@v2.46.0 and earlier.\n ` .k-grid .k-grid-aria-root {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .k-grid .k-filter-row td {\n white-space: nowrap;\n }`\n ],\n template: `\n \n \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n \n \n `\n }]\n }], function () { return [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: ɵngcc0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: ɵngcc0.Renderer2 }, { type: ExcelService }, { type: ɵngcc0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: ɵngcc1.LocalizationService }]; }, { data: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], selectable: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }], filterable: [{\n type: Input\n }], sortable: [{\n type: Input\n }], pageable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], navigable: [{\n type: Input\n }], autoSize: [{\n type: Input\n }], resizable: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], loading: [{\n type: Input\n }], columnMenu: [{\n type: Input\n }], hideHeader: [{\n type: Input\n }], filterChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], groupChange: [{\n type: Output\n }], sortChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], dataStateChange: [{\n type: Output\n }], groupExpand: [{\n type: Output\n }], groupCollapse: [{\n type: Output\n }], detailExpand: [{\n type: Output\n }], detailCollapse: [{\n type: Output\n }], edit: [{\n type: Output\n }], cancel: [{\n type: Output\n }], save: [{\n type: Output\n }], remove: [{\n type: Output\n }], add: [{\n type: Output\n }], cellClose: [{\n type: Output\n }], cellClick: [{\n type: Output\n }], pdfExport: [{\n type: Output\n }], excelExport: [{\n type: Output\n }], columnResize: [{\n type: Output\n }], columnReorder: [{\n type: Output\n }], columnVisibilityChange: [{\n type: Output\n }], columnLockedChange: [{\n type: Output\n }], scrollBottom: [{\n type: Output\n }], contentScroll: [{\n type: Output\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }], footer: [{\n type: ViewChildren,\n args: [\"footer\"]\n }], skip: [{\n type: Input\n }], sort: [{\n type: Input\n }], group: [{\n type: Input\n }], navigatable: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], rowSelected: [{\n type: Input\n }], cellSelected: [{\n type: Input\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-grid']\n }], lockedClasses: [{\n type: HostBinding,\n args: ['class.k-grid-lockedcolumns']\n }], virtualClasses: [{\n type: HostBinding,\n args: ['class.k-grid-virtual']\n }], noScrollbarClass: [{\n type: HostBinding,\n args: ['class.k-grid-no-scrollbar']\n }], isDetailExpanded: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], height: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }], detailRowHeight: [{\n type: Input\n }], filter: [{\n type: Input\n }], detailTemplateChildren: [{\n type: ContentChildren,\n args: [DetailTemplateDirective]\n }], noRecordsTemplateChildren: [{\n type: ContentChildren,\n args: [NoRecordsTemplateDirective]\n }], pagerTemplateChildren: [{\n type: ContentChildren,\n args: [PagerTemplateDirective]\n }], toolbarTemplateChildren: [{\n type: ContentChildren,\n args: [ToolbarTemplateDirective]\n }], columnMenuTemplates: [{\n type: ContentChildren,\n args: [ColumnMenuTemplateDirective]\n }], lockedHeader: [{\n type: ViewChild,\n args: [\"lockedHeader\"]\n }], header: [{\n type: ViewChild,\n args: [\"header\"]\n }], ariaRoot: [{\n type: ViewChild,\n args: ['ariaRoot']\n }] }); })();\n\n/**\n * @hidden\n */\nconst update = (arr, idx, value) => ([\n ...arr.slice(0, idx + 1),\n ...(arr.slice(idx + 1).map(x => x + value))\n]);\n/**\n * @hidden\n */\nclass RowHeightService {\n constructor(total = 0, rowHeight, detailRowHeight) {\n this.total = total;\n this.rowHeight = rowHeight;\n this.detailRowHeight = detailRowHeight;\n this.offsets = [];\n this.heights = [];\n let agg = 0;\n for (let idx = 0; idx < total; idx++) {\n this.offsets.push(agg);\n agg += rowHeight;\n this.heights.push(rowHeight);\n }\n }\n height(rowIndex) {\n return this.heights[rowIndex];\n }\n expandDetail(rowIndex) {\n if (this.height(rowIndex) === this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight);\n }\n }\n collapseDetail(rowIndex) {\n if (this.height(rowIndex) > this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight * -1);\n }\n }\n isExpanded(rowIndex) {\n return this.height(rowIndex) > this.rowHeight;\n }\n index(position) {\n if (position < 0) {\n return undefined;\n }\n const result = this.offsets.reduce((prev, current, idx) => {\n if (prev !== undefined) {\n return prev;\n }\n else if (current === position) {\n return idx;\n }\n else if (current > position) {\n return idx - 1;\n }\n return undefined;\n }, undefined); // tslint:disable-line:align\n return result === undefined ? this.total - 1 : result;\n }\n offset(rowIndex) {\n return this.offsets[rowIndex];\n }\n totalHeight() {\n return this.heights.reduce((prev, curr) => prev + curr, 0);\n }\n updateRowHeight(rowIndex, value) {\n if (this.total > 0) {\n this.heights[rowIndex] += value;\n this.offsets = update(this.offsets, rowIndex, value);\n }\n }\n}\n\n/**\n * @hidden\n */\nclass ScrollAction {\n constructor(offset) {\n this.offset = offset;\n }\n}\n/**\n * @hidden\n */\nclass PageAction {\n constructor(skip, take$$1) {\n this.skip = skip;\n this.take = take$$1;\n }\n}\n/**\n * @hidden\n */\nclass ScrollBottomAction {\n}\nconst SCROLL_BOTTOM_THRESHOLD = 2;\n/**\n * @hidden\n */\nclass ScrollerService {\n constructor(scrollObservable) {\n this.scrollObservable = scrollObservable;\n this.firstLoaded = 0;\n }\n create(rowHeightService, skip, take$$1, total) {\n this.rowHeightService = rowHeightService;\n this.firstLoaded = skip;\n this.lastLoaded = skip + take$$1;\n this.take = take$$1;\n this.total = total;\n this.lastScrollTop = 0;\n const subject = new BehaviorSubject(new ScrollAction(this.rowHeightService.offset(skip)));\n this.subscription = Observable.create(observer => {\n this.unsubscribe();\n this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));\n }).subscribe(x => subject.next(x));\n return subject;\n }\n destroy() {\n this.unsubscribe();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n onScroll({ scrollTop, offsetHeight, scrollHeight, clientHeight }, observer) {\n if (this.lastScrollTop === scrollTop) {\n return;\n }\n const up = this.lastScrollTop >= scrollTop;\n this.lastScrollTop = scrollTop;\n let firstItemIndex = this.rowHeightService.index(scrollTop);\n let firstItemOffset = this.rowHeightService.offset(firstItemIndex);\n const lastItemIndex = this.rowHeightService.index(scrollTop + offsetHeight);\n if (!up) {\n if (lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total) {\n const overflow = (firstItemIndex + this.take) - this.total;\n if (overflow > 0) {\n firstItemIndex = firstItemIndex - overflow;\n firstItemOffset = this.rowHeightService.offset(firstItemIndex);\n }\n this.firstLoaded = firstItemIndex;\n observer.next(new ScrollAction(firstItemOffset));\n let nextTake = this.firstLoaded + this.take;\n this.lastLoaded = Math.min(nextTake, this.total);\n nextTake = nextTake > this.total ? this.total - this.firstLoaded : this.take;\n observer.next(new PageAction(this.firstLoaded, this.take));\n }\n else {\n const atBottom = scrollHeight - clientHeight - scrollTop < SCROLL_BOTTOM_THRESHOLD;\n if (atBottom) {\n observer.next(new ScrollBottomAction());\n }\n }\n }\n if (up && firstItemIndex < this.firstLoaded) {\n const nonVisibleBuffer = Math.floor(this.take * 0.3);\n this.firstLoaded = Math.max(firstItemIndex - nonVisibleBuffer, 0);\n observer.next(new ScrollAction(this.rowHeightService.offset(this.firstLoaded)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded, this.take));\n }\n }\n unsubscribe() {\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = undefined;\n }\n }\n}\n\n/**\n * @hidden\n */\nconst NON_DATA_CELL_CLASSES = 'k-hierarchy-cell k-detail-cell k-group-cell';\n/**\n * @hidden\n */\nconst NON_DATA_ROW_CLASSES = 'k-grouping-row k-group-footer k-detail-row k-grid-norecords';\n/**\n * @hidden\n */\nconst IGNORE_TARGET_CLASSSES = 'k-icon';\n/**\n * @hidden\n */\nconst IGNORE_CONTAINER_CLASSES = 'k-widget k-grid-ignore-click';\n\nconst elementAt = (index, elements, elementOffset) => {\n for (let idx = 0, elementIdx = 0; idx < elements.length; idx++) {\n const offset = elementOffset(elements[idx]);\n if (elementIdx <= index && index <= elementIdx + offset - 1) {\n return elements[idx];\n }\n elementIdx += offset;\n }\n};\nconst rowAt = (index, rows) => elementAt(index, rows, row => row.hasAttribute('data-kendo-grid-item-index') ? 1 : 0);\nconst cellAt = (index, cells) => elementAt(index, cells, cell => !hasClasses(cell, NON_DATA_CELL_CLASSES) ? parseInt(cell.getAttribute('colSpan'), 10) || 1 : 0);\nconst EMPTY_OBJECT = {};\n/**\n * @hidden\n */\nconst SCROLLER_FACTORY_TOKEN = new InjectionToken('grid-scroll-service-factory');\n/**\n * @hidden\n */\nfunction DEFAULT_SCROLLER_FACTORY(observable) {\n return new ScrollerService(observable);\n}\nconst wheelDeltaY = (e) => {\n const deltaY = e.wheelDeltaY;\n if (e.wheelDelta && (deltaY === undefined || deltaY)) {\n return e.wheelDelta;\n }\n else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n return (-e.detail) * 10;\n }\n return 0;\n};\nconst preventLockedScroll = (args, element) => {\n const delta = wheelDeltaY(args);\n const scrollTop = element.scrollTop;\n const allowScroll = (scrollTop === 0 && 0 < delta) || (element.scrollHeight <= element.offsetHeight + scrollTop && delta < 0);\n if (!allowScroll) {\n event.preventDefault();\n }\n};\nconst translateY = (renderer, value) => el => renderer.setStyle(el, \"transform\", `translateY(${value}px)`);\nconst maybeNativeElement = el => el ? el.nativeElement : null;\nconst hasScrollbar = (el, parent) => el.nativeElement.offsetWidth > parent.nativeElement.clientWidth;\nconst setHeight$1 = renderer => ({ el, height }) => renderer.setStyle(el, \"height\", `${height}px`);\nconst bufferSize = 1;\n/**\n * @hidden\n */\nclass ListComponent {\n constructor(scrollerFactory, detailsService, changeNotification, suspendService, groupsService, ngZone, renderer, scrollSyncService, resizeService, editService, supportService, navigationService, scrollRequestService, localization, columnResizingService, changeDetector, pdfService, columnInfo) {\n this.changeNotification = changeNotification;\n this.suspendService = suspendService;\n this.groupsService = groupsService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.scrollSyncService = scrollSyncService;\n this.resizeService = resizeService;\n this.editService = editService;\n this.supportService = supportService;\n this.navigationService = navigationService;\n this.localization = localization;\n this.columnResizingService = columnResizingService;\n this.changeDetector = changeDetector;\n this.pdfService = pdfService;\n this.columnInfo = columnInfo;\n this.groups = [];\n this.skip = 0;\n this.columns = new ColumnsContainer(() => []);\n this.selectable = false;\n this.groupable = false;\n this.trackBy = defaultTrackBy;\n this.contentScroll = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.scrollBottom = new EventEmitter();\n this.columnsStartIdx = 0;\n this.resizeSensors = new QueryList();\n this.dispatcher = new Subject();\n this.containerScrollTop = 0;\n this.scrollLeft = 0;\n this.rtl = false;\n this.scroller = scrollerFactory(this.dispatcher);\n this.subscriptions =\n detailsService.changes.subscribe(x => this.detailExpand(x)).add(scrollRequestService.requests.subscribe(x => this.scrollTo(x)));\n }\n get hostClass() {\n return true;\n }\n get hostRole() {\n return 'presentation';\n }\n get showFooter() {\n return this.groupable && this.groupable.showFooter;\n }\n get totalWidth() {\n if (this.virtualColumns && this.columns.unlockedWidth) {\n return this.columns.unlockedWidth;\n }\n }\n get lockedLeafColumns() {\n return this.columns.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columns.nonLockedLeafColumns;\n }\n get nonLockedColumnsToRender() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.viewportColumns;\n }\n return this.nonLockedLeafColumns;\n }\n get leafColumns() {\n return this.columns.leafColumnsToRender;\n }\n get lockedWidth() {\n const groupCellsWidth = this.groups.length * GROUP_CELL_WIDTH;\n return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);\n }\n get nonLockedWidth() {\n if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {\n return sumColumnWidths(expandColumns(this.nonLockedColumnsToRender.toArray()));\n }\n return undefined;\n }\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n ngOnInit() {\n this.init();\n this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowSync.bind(this)));\n this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowNavigationLocked.bind(this)));\n this.subscriptions.add(merge(this.columns.changes, this.resizeService.changes).subscribe(() => {\n if (this.virtualColumns) {\n this.ngZone.run(() => {\n this.updateViewportColumns();\n this.changeDetector.markForCheck();\n });\n }\n }));\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl));\n }\n ngOnChanges(changes) {\n const hasInitialSkip = changes.skip && changes.skip.firstChange && changes.skip.currentValue > 0;\n if (hasInitialSkip) {\n this.handleInitialScrollToSkip();\n }\n if (isChanged(\"skip\", changes) && !this.rebind) {\n this.skipScroll = true;\n this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);\n }\n if (anyChanged([\"total\", \"take\"], changes)) {\n this.init();\n }\n this.rebind = false;\n }\n ngDoCheck() {\n if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {\n this.updateViewportColumns();\n }\n }\n ngAfterViewInit() {\n if (this.skip && this.isVirtual) {\n this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);\n }\n this.resetNavigationViewport();\n this.attachContainerScroll();\n this.initResizeService();\n }\n ngAfterViewChecked() {\n const isLocked = this.isLocked;\n if (isLocked && !this.hasLockedContainer) {\n this.syncRowsHeight();\n }\n this.hasLockedContainer = isLocked;\n }\n syncRowsHeight() {\n if (this.lockedContainer) {\n syncRowsHeight(this.lockedTable.nativeElement, this.table.nativeElement);\n }\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.resizeService) {\n this.resizeService.destroy();\n }\n this.cleanupScroller();\n }\n init() {\n if (this.suspendService.scroll) {\n return;\n }\n this.rowHeightService = new RowHeightService(this.total, this.rowHeight, this.detailRowHeight);\n this.totalHeight = this.rowHeightService.totalHeight();\n if (!isUniversal()) {\n this.ngZone.runOutsideAngular(this.createScroller.bind(this));\n }\n }\n lockedScroll() {\n if (!this.suspendService.scroll) {\n const lockedScrollTop = this.lockedContainer.nativeElement.scrollTop;\n if (lockedScrollTop !== this.containerScrollTop) {\n this.container.nativeElement.scrollTop = this.containerScrollTop = lockedScrollTop;\n }\n }\n }\n lockedMousewheel(args) {\n if (!args.ctrlKey) {\n preventLockedScroll(args, this.container.nativeElement);\n const scrollDelta = wheelDeltaY(args);\n this.container.nativeElement.scrollTop -= scrollDelta;\n }\n }\n lockedKeydown(args) {\n if (args.keyCode === Keys.PageDown || args.keyCode === Keys.PageUp) {\n const dir = args.keyCode === Keys.PageDown ? 1 : -1;\n const element = this.container.nativeElement;\n element.scrollTop += element.offsetHeight * dir * 0.8;\n args.preventDefault();\n }\n }\n detailExpand({ index, expand }) {\n if (expand) {\n this.rowHeightService.expandDetail(index);\n }\n else {\n this.rowHeightService.collapseDetail(index);\n }\n this.totalHeight = this.rowHeightService.totalHeight();\n this.resetNavigationViewport();\n }\n attachContainerScroll() {\n if (isUniversal()) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(fromEvent(this.container.nativeElement, 'scroll').pipe(map((event) => event.target), filter(() => !this.suspendService.scroll), tap((target) => {\n this.onContainerScroll(target);\n this.resetNavigationViewport();\n if (this.virtualColumns) {\n this.handleColumnScroll();\n }\n const rowViewport = this.navigationService.viewport || EMPTY_OBJECT;\n const columnViewport = this.navigationService.columnViewport || EMPTY_OBJECT;\n this.contentScroll.emit({\n scrollLeft: target.scrollLeft,\n scrollTop: target.scrollTop,\n startRow: rowViewport.firstItemIndex,\n endRow: rowViewport.lastItemIndex,\n startColumn: columnViewport.firstItemIndex,\n endColumn: columnViewport.lastItemIndex\n });\n })).subscribe(this.dispatcher));\n });\n this.scrollSyncService.registerEmitter(this.container.nativeElement, \"body\");\n }\n createScroller() {\n this.cleanupScroller();\n const observable = this.scroller\n .create(this.rowHeightService, this.skip, this.take, this.total);\n this.skipScroll = false;\n this.scrollerSubscription = observable.pipe(filter((x) => x instanceof PageAction), filter(() => {\n const temp = this.skipScroll;\n this.skipScroll = false;\n return !temp;\n }), tap(() => this.rebind = true))\n .subscribe((x) => this.ngZone.run(() => this.pageChange.emit(x)));\n this.scrollerSubscription.add(observable.pipe(filter((x) => x instanceof ScrollAction))\n .subscribe(this.scroll.bind(this)));\n this.scrollerSubscription.add(observable.pipe(filter((x) => x instanceof ScrollBottomAction))\n .subscribe(() => this.scrollBottom.emit()));\n }\n scroll({ offset = 0 }) {\n if (this.isVirtual) {\n [\n maybeNativeElement(this.table),\n maybeNativeElement(this.lockedTable)\n ].filter(isPresent).forEach(translateY(this.renderer, offset));\n }\n this.resetNavigationViewport();\n }\n onContainerScroll({ scrollTop }) {\n this.containerScrollTop = scrollTop;\n if (this.lockedContainer) {\n this.lockedContainer.nativeElement.scrollTop = scrollTop;\n }\n }\n handleInitialScrollToSkip() {\n const shouldScroll = () => this.isVirtual && this.skip > 0 && this.total > 0;\n const sub = this.changeNotification.changes\n .pipe(filter(shouldScroll))\n .subscribe(_ => {\n this.scrollTo({ row: this.skip });\n sub.unsubscribe();\n });\n }\n handleRowSync() {\n const isLocked = () => isPresent(this.lockedContainer);\n const onStable = () => this.ngZone.onStable.asObservable().pipe(take(1));\n return merge(this.changeNotification.changes, this.groupsService.changes\n .pipe(filter(isLocked), switchMapTo(onStable())), this.editService.changed, this.resizeService.changes, this.columnResizingService.changes\n .pipe(filter(change => change.type === 'end')), this.supportService.changes)\n .pipe(tap(() => this.resetNavigationViewport()), filter(isLocked))\n .subscribe(() => {\n const scrollTop = this.container.nativeElement.scrollTop;\n const scrollLeft = this.container.nativeElement.scrollLeft;\n this.syncRowsHeight();\n this.syncContainerHeight();\n this.lockedContainer.nativeElement.scrollTop = this.container.nativeElement.scrollTop = scrollTop;\n // fixes scroll left position in IE when editing\n this.container.nativeElement.scrollLeft = scrollLeft;\n this.resizeSensors.forEach(sensor => sensor.acceptSize());\n });\n }\n handleRowNavigationLocked() {\n return this.navigationService.changes.pipe(filter(() => isPresent(this.lockedContainer)), delay(10)).subscribe((args) => {\n if (this.lockedLeafColumns.length <= args.prevColIndex && args.colIndex < this.lockedLeafColumns.length) {\n const cell = this.navigationService.activeCell;\n if (cell && cell.colIndex + cell.colSpan < args.prevColIndex) {\n this.container.nativeElement.scrollLeft = 0;\n }\n }\n });\n }\n scrollToVirtualRow(itemIndex) {\n if (isPresent(this.detailTemplate)) {\n itemIndex = Math.floor(itemIndex / 2);\n }\n const offset = this.rowHeightService.offset(itemIndex);\n this.container.nativeElement.scrollTop = offset;\n this.resetNavigationViewport();\n }\n scrollTo({ row, column }) {\n if (isNumber(row)) {\n if (this.isVirtual) {\n this.scrollToVirtualRow(row);\n }\n else {\n const element = rowAt(row, this.table.nativeElement.rows);\n if (element) {\n this.container.nativeElement.scrollTop = element.offsetTop;\n }\n }\n }\n if (isNumber(column)) {\n column -= this.lockedLeafColumns.length;\n if (this.virtualColumns) {\n const columns = this.columns.leafColumnsToRender;\n let offset = 0;\n for (let idx = 0; idx < column; idx++) {\n offset += columns[idx].width || 0;\n }\n const startOffset = this.lockedLeafColumns.length ? 0 : this.groups.length * GROUP_CELL_WIDTH + (this.detailTemplate && column > 0 ? GROUP_CELL_WIDTH : 0);\n this.container.nativeElement.scrollLeft = this.normalizeScrollLeft(offset + startOffset);\n }\n else if (column === 0 && this.detailTemplate) {\n this.container.nativeElement.scrollLeft = this.normalizeScrollLeft(0);\n }\n else {\n const firstRow = rowAt(0, this.table.nativeElement.rows);\n if (firstRow) {\n const element = cellAt(column, firstRow.cells);\n if (element) {\n this.container.nativeElement.scrollLeft = this.elementScrollLeft(element);\n }\n }\n }\n }\n }\n resetNavigationViewport() {\n if (!this.container || !this.navigationService.enabled ||\n !this.navigationService.needsViewport() || this.data.length === 0) {\n return;\n }\n const { scrollTop, offsetHeight } = this.container.nativeElement;\n const scrollBottom = scrollTop + offsetHeight;\n const firstItemIndex = this.rowHeightService.index(scrollTop);\n let lastItemIndex = this.rowHeightService.index(scrollBottom);\n const lastItemOffset = this.rowHeightService.offset(lastItemIndex);\n const lastItemOverflows = lastItemOffset + this.rowHeight > scrollBottom;\n if (lastItemIndex > 0 && lastItemOverflows) {\n lastItemIndex--;\n }\n let viewportStart = firstItemIndex;\n let viewportEnd = lastItemIndex;\n if (isPresent(this.detailTemplate)) {\n viewportStart *= 2;\n viewportEnd *= 2;\n const firstItemHeight = this.rowHeightService.offset(firstItemIndex);\n if (firstItemHeight + this.rowHeight < scrollTop) {\n viewportStart++;\n }\n const lastItemHeight = this.rowHeightService.height(lastItemIndex);\n const lastItemExpanded = this.rowHeightService.isExpanded(lastItemIndex);\n const lastItemDetailOverflows = lastItemOffset + lastItemHeight > scrollBottom;\n if (lastItemExpanded && !lastItemDetailOverflows) {\n viewportEnd++;\n }\n }\n this.navigationService.setViewport(viewportStart, viewportEnd);\n }\n cleanupScroller() {\n if (this.scrollerSubscription) {\n this.scrollerSubscription.unsubscribe();\n }\n if (this.scroller) {\n this.scroller.destroy();\n }\n }\n initResizeService() {\n this.resizeService.connect(merge(...this.resizeSensors.map(sensor => sensor.resize)));\n }\n syncContainerHeight() {\n [maybeNativeElement(this.lockedContainer)]\n .filter(isPresent)\n .map(el => {\n el.style.height = '';\n let height = this.container.nativeElement.offsetHeight;\n if (hasScrollbar(this.table, this.container)) {\n height -= this.supportService.scrollbarWidth;\n }\n return { el, height };\n })\n .forEach(setHeight$1(this.renderer));\n }\n updateViewportColumns(range) {\n const columns = this.columns.nonLockedLeafColumns.toArray();\n let { startIdx, endIdx, offset } = range || this.calculateViewportColumns();\n const start = Math.max(0, startIdx - bufferSize);\n const end = Math.min(endIdx + bufferSize, columns.length - 1);\n if (start < startIdx) {\n for (let idx = startIdx - 1; idx >= start; idx--) {\n offset -= columns[idx].width;\n }\n }\n let currentColumns = columns.slice(start, end + 1);\n this.viewportColumnsWidth = currentColumns.reduce((total, column) => total + column.width, 0);\n if (start > 0) {\n const offsetColumn = new ColumnBase$1();\n offsetColumn.width = offset;\n currentColumns.unshift(offsetColumn);\n }\n this.viewportColumns = new QueryList();\n this.viewportColumns.reset(currentColumns);\n this.columnsStartIdx = start;\n this.columnsEndIdx = end;\n this.columnInfo.columnRangeChange.emit({ start, end, offset });\n if (!range) {\n this.updateColumnViewport(startIdx, endIdx);\n }\n }\n handleColumnScroll() {\n const container = this.container.nativeElement;\n const scrollLeft = container.scrollLeft;\n if (this.scrollLeft !== scrollLeft) {\n this.scrollLeft = scrollLeft;\n const range = this.calculateViewportColumns();\n this.updateColumnViewport(range.startIdx, range.endIdx);\n if (range.startIdx < this.columnsStartIdx || this.columnsEndIdx < range.endIdx) {\n cancelAnimationFrame(this.columnUpdateFrame);\n this.columnUpdateFrame = requestAnimationFrame(() => {\n this.ngZone.run(() => {\n this.updateViewportColumns(range);\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n }\n updateColumnViewport(startIdx, endIdx) {\n const lockedCount = this.lockedLeafColumns.length;\n const leafColumns$$1 = this.nonLockedLeafColumns.toArray();\n const viewportStart = lockedCount + startIdx + (this.detailTemplate && startIdx > 0 ? 1 : 0);\n let viewportEnd = lockedCount + endIdx + (this.detailTemplate ? 1 : 0);\n for (let idx = 0; idx < leafColumns$$1.length; idx++) {\n const column = leafColumns$$1[idx];\n if (column.isSpanColumn) {\n viewportEnd += column.childColumns.length;\n }\n }\n this.navigationService.setColumnViewport(viewportStart, viewportEnd);\n }\n calculateViewportColumns() {\n const { scrollLeft, clientWidth } = this.container.nativeElement;\n const columns = this.columns.nonLockedLeafColumns.toArray();\n const normalizedScrollLeft = this.normalizeScrollLeft(scrollLeft);\n const viewportEnd = normalizedScrollLeft + clientWidth;\n let startIdx;\n let endIdx = 0;\n let current = 0;\n let offset = 0;\n let idx;\n for (idx = 0; idx < columns.length; idx++) {\n const column = columns[idx];\n current += column.width || 0;\n if (startIdx === undefined && current > normalizedScrollLeft) {\n startIdx = idx;\n offset = current - (column.width || 0);\n }\n if (current >= viewportEnd) {\n endIdx = idx;\n break;\n }\n }\n if (!endIdx && idx > 0) {\n endIdx = columns.length - 1;\n }\n return { startIdx, endIdx, offset };\n }\n viewportWidthChange() {\n const currentWidth = this.viewportColumns.toArray().reduce((total, column) => total + column.width, 0);\n return currentWidth !== this.viewportColumnsWidth;\n }\n normalizeScrollLeft(position) {\n return this.rtl ? rtlScrollPosition(position, this.container.nativeElement, this.supportService.rtlScrollLeft) : position;\n }\n elementScrollLeft(element) {\n if (this.rtl) {\n return this.normalizeScrollLeft(this.container.nativeElement.scrollWidth - element.offsetLeft - element.offsetWidth);\n }\n return element.offsetLeft;\n }\n}\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(ɵngcc0.ɵɵdirectiveInject(SCROLLER_FACTORY_TOKEN), ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(SuspendService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(ResizeService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(BrowserSupportService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ScrollRequestService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService)); };\nListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-grid-list\"]], viewQuery: function ListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c117, true);\n ɵngcc0.ɵɵviewQuery(_c118, true);\n ɵngcc0.ɵɵviewQuery(_c119, true);\n ɵngcc0.ɵɵviewQuery(_c120, true);\n ɵngcc0.ɵɵviewQuery(ResizeSensorComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedTable = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.table = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeSensors = _t);\n } }, hostVars: 3, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.hostRole);\n ɵngcc0.ɵɵclassProp(\"k-grid-container\", ctx.hostClass);\n } }, inputs: { groups: \"groups\", skip: \"skip\", columns: \"columns\", selectable: \"selectable\", groupable: \"groupable\", trackBy: \"trackBy\", data: \"data\", total: \"total\", rowHeight: \"rowHeight\", detailRowHeight: \"detailRowHeight\", take: \"take\", detailTemplate: \"detailTemplate\", noRecordsTemplate: \"noRecordsTemplate\", filterable: \"filterable\", rowClass: \"rowClass\", loading: \"loading\", virtualColumns: \"virtualColumns\", isVirtual: \"isVirtual\" }, outputs: { contentScroll: \"contentScroll\", pageChange: \"pageChange\", scrollBottom: \"scrollBottom\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 32, consts: [[\"class\", \"k-grid-content-locked\", \"role\", \"presentation\", 3, \"width\", \"kendoEventsOutsideAngular\", \"scope\", 4, \"ngIf\"], [\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-grid-content\", \"k-virtual-content\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"container\", \"\"], [\"role\", \"presentation\", 1, \"k-grid-table-wrap\"], [\"role\", \"presentation\", 1, \"k-grid-table\", 3, \"virtualColumns\"], [\"table\", \"\"], [\"kendoGridColGroup\", \"\", \"role\", \"presentation\", 3, \"groups\", \"columns\", \"detailTemplate\"], [\"kendoGridTableBody\", \"\", \"role\", \"presentation\", 3, \"skipGroupDecoration\", \"data\", \"groups\", \"showGroupFooters\", \"columns\", \"allColumns\", \"detailTemplate\", \"noRecordsTemplate\", \"lockedColumnsCount\", \"totalColumnsCount\", \"skip\", \"selectable\", \"trackBy\", \"filterable\", \"rowClass\", \"virtualColumns\"], [4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-height-container\"], [\"class\", \"k-width-container\", \"role\", \"presentation\", 4, \"ngIf\"], [\"kendoGridLoading\", \"\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-content-locked\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"lockedContainer\", \"\"], [\"role\", \"presentation\", 1, \"k-grid-table\", 3, \"locked\"], [\"lockedTable\", \"\"], [\"kendoGridTableBody\", \"\", \"role\", \"presentation\", 3, \"groups\", \"isLocked\", \"data\", \"noRecordsText\", \"columns\", \"totalColumnsCount\", \"detailTemplate\", \"showGroupFooters\", \"skip\", \"selectable\", \"trackBy\", \"filterable\", \"rowClass\"], [\"role\", \"presentation\", 1, \"k-width-container\"], [\"kendoGridLoading\", \"\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_div_0_Template, 10, 30, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵelementStart(3, \"div\", 3);\n ɵngcc0.ɵɵelementStart(4, \"table\", 4, 5);\n ɵngcc0.ɵɵelement(6, \"colgroup\", 6);\n ɵngcc0.ɵɵelement(7, \"tbody\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, ListComponent_kendo_resize_sensor_8_Template, 1, 0, \"kendo-resize-sensor\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, ListComponent_kendo_resize_sensor_9_Template, 1, 0, \"kendo-resize-sensor\", 8);\n ɵngcc0.ɵɵelementStart(10, \"div\", 9);\n ɵngcc0.ɵɵelement(11, \"div\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(12, ListComponent_div_12_Template, 2, 2, \"div\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(13, ListComponent_div_13_Template, 1, 0, \"div\", 11);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx.lockedLeafColumns.length)(\"lockedWidth\", ctx.lockedWidth + 1);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"virtualColumns\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"groups\", ctx.isLocked ? ɵngcc0.ɵɵpureFunction0(31, _c116) : ctx.groups)(\"columns\", ctx.nonLockedColumnsToRender)(\"detailTemplate\", ctx.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"skipGroupDecoration\", ctx.isLocked)(\"data\", ctx.data)(\"groups\", ctx.groups)(\"showGroupFooters\", ctx.showFooter)(\"columns\", ctx.nonLockedColumnsToRender)(\"allColumns\", ctx.nonLockedLeafColumns)(\"detailTemplate\", ctx.detailTemplate)(\"noRecordsTemplate\", ctx.noRecordsTemplate)(\"lockedColumnsCount\", ctx.lockedLeafColumns.length)(\"totalColumnsCount\", ctx.leafColumns.length)(\"skip\", ctx.skip)(\"selectable\", ctx.selectable)(\"trackBy\", ctx.trackBy)(\"filterable\", ctx.filterable)(\"rowClass\", ctx.rowClass)(\"virtualColumns\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked || ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx.totalHeight, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.loading);\n } }, directives: function () { return [ɵngcc5.NgIf, ResizableContainerDirective, TableDirective, ColGroupComponent, TableBodyComponent, ɵngcc2.EventsOutsideAngularDirective, ɵngcc2.ResizeSensorComponent, LoadingComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nListComponent.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [SCROLLER_FACTORY_TOKEN,] }] },\n { type: DetailsService },\n { type: ChangeNotificationService },\n { type: SuspendService },\n { type: GroupsService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ScrollSyncService },\n { type: ResizeService },\n { type: EditService },\n { type: BrowserSupportService },\n { type: NavigationService },\n { type: ScrollRequestService },\n { type: LocalizationService },\n { type: ColumnResizingService },\n { type: ChangeDetectorRef },\n { type: PDFService },\n { type: ColumnInfoService }\n];\nListComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: [\"class.k-grid-container\",] }],\n hostRole: [{ type: HostBinding, args: [\"attr.role\",] }],\n data: [{ type: Input }],\n groups: [{ type: Input }],\n total: [{ type: Input }],\n rowHeight: [{ type: Input }],\n detailRowHeight: [{ type: Input }],\n take: [{ type: Input }],\n skip: [{ type: Input }],\n columns: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n noRecordsTemplate: [{ type: Input }],\n selectable: [{ type: Input }],\n groupable: [{ type: Input }],\n filterable: [{ type: Input }],\n rowClass: [{ type: Input }],\n loading: [{ type: Input }],\n trackBy: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n isVirtual: [{ type: Input }],\n contentScroll: [{ type: Output }],\n pageChange: [{ type: Output }],\n scrollBottom: [{ type: Output }],\n container: [{ type: ViewChild, args: [\"container\", { static: true },] }],\n lockedContainer: [{ type: ViewChild, args: [\"lockedContainer\",] }],\n lockedTable: [{ type: ViewChild, args: [\"lockedTable\",] }],\n table: [{ type: ViewChild, args: [\"table\",] }],\n resizeSensors: [{ type: ViewChildren, args: [ResizeSensorComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }\n ],\n selector: 'kendo-grid-list',\n template: `\n
    \n
    \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [SCROLLER_FACTORY_TOKEN]\n }] }, { type: DetailsService }, { type: ChangeNotificationService }, { type: SuspendService }, { type: GroupsService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ScrollSyncService }, { type: ResizeService }, { type: EditService }, { type: BrowserSupportService }, { type: NavigationService }, { type: ScrollRequestService }, { type: ɵngcc1.LocalizationService }, { type: ColumnResizingService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PDFService }, { type: ColumnInfoService }]; }, { groups: [{\n type: Input\n }], skip: [{\n type: Input\n }], columns: [{\n type: Input\n }], selectable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], contentScroll: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], scrollBottom: [{\n type: Output\n }], resizeSensors: [{\n type: ViewChildren,\n args: [ResizeSensorComponent]\n }], hostClass: [{\n type: HostBinding,\n args: [\"class.k-grid-container\"]\n }], hostRole: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], data: [{\n type: Input\n }], total: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }], detailRowHeight: [{\n type: Input\n }], take: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], noRecordsTemplate: [{\n type: Input\n }], filterable: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], loading: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }], isVirtual: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: [\"container\", { static: true }]\n }], lockedContainer: [{\n type: ViewChild,\n args: [\"lockedContainer\"]\n }], lockedTable: [{\n type: ViewChild,\n args: [\"lockedTable\"]\n }], table: [{\n type: ViewChild,\n args: [\"table\"]\n }] }); })();\n\n/**\n * A directive which encapsulates the in-memory handling of data operations such as [paging]({% slug paging_grid %}),\n * [sorting]({% slug sorting_grid %}), and [grouping]({% slug groupingbasics_grid %})\n * ([more information and examples]({% slug automaticoperations_grid %})).\n */\nclass DataBindingDirective {\n constructor(grid, changeDetector, localDataChangesService) {\n this.grid = grid;\n this.changeDetector = changeDetector;\n this.localDataChangesService = localDataChangesService;\n this.state = {\n skip: 0\n };\n this.originalData = [];\n if (localDataChangesService) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe(this.rebind.bind(this));\n }\n }\n /**\n * Defines the number of records that will be skipped by the pager.\n */\n set skip(value) {\n if (!isPresent(value)) {\n value = 0;\n }\n this.grid.skip = this.state.skip = value;\n }\n /**\n * Defines the descriptors by which the data will be sorted.\n */\n set sort(value) {\n this.grid.sort = this.state.sort = value;\n }\n /**\n * Defines the descriptor by which the data will be filtered.\n */\n set filter(value) {\n this.grid.filter = this.state.filter = value;\n }\n /**\n * Defines the page size used by the Grid pager.\n */\n set pageSize(value) {\n this.grid.pageSize = this.state.take = value;\n }\n /**\n * The descriptors by which the data will be grouped.\n */\n set group(value) {\n this.grid.group = this.state.group = value;\n }\n /**\n * The array of data which will be used to populate the Grid.\n */\n set data(value) {\n this.originalData = value || [];\n if (this.localDataChangesService) {\n this.localDataChangesService.data = value;\n }\n this.dataChanged = true;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.applyState(this.state);\n this.stateChangeSubscription = this.grid\n .dataStateChange\n .subscribe(this.onStateChange.bind(this));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.stateChangeSubscription) {\n this.stateChangeSubscription.unsubscribe();\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged([\"pageSize\", \"skip\", \"sort\", \"group\", \"filter\"], changes)) {\n this.rebind();\n }\n }\n ngDoCheck() {\n if (this.dataChanged) {\n this.updateGridData();\n }\n }\n /**\n * @hidden\n */\n onStateChange(state$$1) {\n this.applyState(state$$1);\n this.rebind();\n }\n /**\n * @hidden\n */\n rebind() {\n this.data = this.originalData;\n this.updateGridData();\n this.notifyDataChange();\n }\n /**\n * Notifies the Grid that its data has changed.\n */\n notifyDataChange() {\n this.grid.onDataChange();\n if (this.changeDetector) {\n this.changeDetector.markForCheck();\n }\n }\n process(state$$1) {\n return process(this.originalData, state$$1);\n }\n applyState({ skip, take: take$$1, sort, group, filter: filter$$1 }) {\n this.skip = skip;\n this.pageSize = take$$1;\n this.sort = sort;\n this.group = group;\n this.filter = filter$$1;\n }\n updateGridData() {\n this.grid.data = this.process(this.state);\n this.dataChanged = false;\n }\n}\nDataBindingDirective.ɵfac = function DataBindingDirective_Factory(t) { return new (t || DataBindingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nDataBindingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DataBindingDirective, selectors: [[\"\", \"kendoGridBinding\", \"\"]], inputs: { skip: \"skip\", sort: \"sort\", filter: \"filter\", pageSize: \"pageSize\", group: \"group\", data: [\"kendoGridBinding\", \"data\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nDataBindingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef },\n { type: LocalDataChangesService }\n];\nDataBindingDirective.propDecorators = {\n skip: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n pageSize: [{ type: Input }],\n group: [{ type: Input }],\n data: [{ type: Input, args: [\"kendoGridBinding\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DataBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridBinding]'\n }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: LocalDataChangesService }]; }, { skip: [{\n type: Input\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], group: [{\n type: Input\n }], data: [{\n type: Input,\n args: [\"kendoGridBinding\"]\n }] }); })();\n\n/**\n * A directive which stores the row selection state of the Grid in memory\n * ([see example]({% slug selection_grid %}#toc-during-data-operations)).\n */\nclass SelectionDirective extends Selection {\n constructor(grid, cd) {\n super(grid, cd);\n this.grid = grid;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (this.grid.selectable === false) {\n this.grid.selectable = true;\n }\n this.grid.selectionDirective = this;\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n super.destroy();\n }\n}\nSelectionDirective.ɵfac = function SelectionDirective_Factory(t) { return new (t || SelectionDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSelectionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectionDirective, selectors: [[\"\", \"kendoGridSelectBy\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nSelectionDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectBy]'\n }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/**\n * A directive which controls the expanded state of the master detail rows.\n */\nclass ExpandDetailsDirective {\n constructor(grid) {\n this.grid = grid;\n /**\n * Fires when the expandedDetailKeys are changed.\n */\n this.expandedDetailKeysChange = new EventEmitter();\n /**\n * Defines the collection that will store the expanded keys.\n */\n this.expandedDetailKeys = [];\n /**\n * Specifies if the items should be initially expanded.\n * @default false\n */\n this.initiallyExpanded = false;\n this.subscriptions = new Subscription();\n this.grid.isDetailExpanded = this.isExpanded.bind(this);\n this.subscriptions.add(merge(this.grid.detailExpand.pipe(map(e => (Object.assign({ expand: true }, e)))), this.grid.detailCollapse.pipe(map(e => (Object.assign({ expand: false }, e))))).subscribe(this.toggleState.bind(this)));\n }\n /**\n * Defines the item key that will be stored in the `expandedDetailKeys` collection ([see example]({% slug master_detail_expanded_state_grid %}#toc-built-in-directive)).\n */\n get expandDetailsKey() {\n return this._expandBy;\n }\n set expandDetailsKey(key) {\n if (isString(key)) {\n this._expandBy = getter(key);\n }\n else {\n this._expandBy = key;\n }\n }\n /**\n *\n * @hidden\n * A deprecated alias for setting the `expandDetailsKey` property.\n */\n get expandDetailBy() {\n return this.expandDetailsKey;\n }\n set expandDetailBy(key) {\n this.expandDetailsKey = key;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n get keyGetter() {\n return this._expandBy || getter(undefined);\n }\n /**\n * @hidden\n */\n isExpanded(args) {\n const key = this.keyGetter(args.dataItem);\n return this.expandedDetailKeys.indexOf(key) > -1 ? !this.initiallyExpanded : this.initiallyExpanded;\n }\n toggleState(args) {\n const key = this.keyGetter(args.dataItem);\n if (Boolean(this.initiallyExpanded) !== args.expand) {\n this.expandedDetailKeys.push(key);\n }\n else {\n const index = this.expandedDetailKeys.indexOf(key);\n this.expandedDetailKeys.splice(index, 1);\n }\n this.expandedDetailKeysChange.emit(this.expandedDetailKeys);\n }\n}\nExpandDetailsDirective.ɵfac = function ExpandDetailsDirective_Factory(t) { return new (t || ExpandDetailsDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent)); };\nExpandDetailsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ExpandDetailsDirective, selectors: [[\"\", \"kendoGridExpandDetailsBy\", \"\"]], inputs: { expandedDetailKeys: \"expandedDetailKeys\", initiallyExpanded: \"initiallyExpanded\", expandDetailsKey: [\"kendoGridExpandDetailsBy\", \"expandDetailsKey\"], expandDetailBy: \"expandDetailBy\" }, outputs: { expandedDetailKeysChange: \"expandedDetailKeysChange\" }, exportAs: [\"kendoGridExpandDetailsBy\"] });\n/** @nocollapse */\nExpandDetailsDirective.ctorParameters = () => [\n { type: GridComponent }\n];\nExpandDetailsDirective.propDecorators = {\n expandedDetailKeysChange: [{ type: Output }],\n expandDetailsKey: [{ type: Input, args: ['kendoGridExpandDetailsBy',] }],\n expandDetailBy: [{ type: Input }],\n expandedDetailKeys: [{ type: Input }],\n initiallyExpanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExpandDetailsDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridExpandDetailsBy]',\n exportAs: 'kendoGridExpandDetailsBy'\n }]\n }], function () { return [{ type: GridComponent }]; }, { expandedDetailKeysChange: [{\n type: Output\n }], expandedDetailKeys: [{\n type: Input\n }], initiallyExpanded: [{\n type: Input\n }], expandDetailsKey: [{\n type: Input,\n args: ['kendoGridExpandDetailsBy']\n }], expandDetailBy: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { groupPanelEmpty: \"groupPanelEmpty\", noRecords: \"noRecords\", pagerFirstPage: \"pagerFirstPage\", pagerLastPage: \"pagerLastPage\", pagerPreviousPage: \"pagerPreviousPage\", pagerNextPage: \"pagerNextPage\", pagerPage: \"pagerPage\", pagerItemsPerPage: \"pagerItemsPerPage\", pagerOf: \"pagerOf\", pagerItems: \"pagerItems\", pagerPageNumberInputTitle: \"pagerPageNumberInputTitle\", filter: \"filter\", filterEqOperator: \"filterEqOperator\", filterNotEqOperator: \"filterNotEqOperator\", filterIsNullOperator: \"filterIsNullOperator\", filterIsNotNullOperator: \"filterIsNotNullOperator\", filterIsEmptyOperator: \"filterIsEmptyOperator\", filterIsNotEmptyOperator: \"filterIsNotEmptyOperator\", filterStartsWithOperator: \"filterStartsWithOperator\", filterContainsOperator: \"filterContainsOperator\", filterNotContainsOperator: \"filterNotContainsOperator\", filterEndsWithOperator: \"filterEndsWithOperator\", filterGteOperator: \"filterGteOperator\", filterGtOperator: \"filterGtOperator\", filterLteOperator: \"filterLteOperator\", filterLtOperator: \"filterLtOperator\", filterIsTrue: \"filterIsTrue\", filterIsFalse: \"filterIsFalse\", filterBooleanAll: \"filterBooleanAll\", filterAfterOrEqualOperator: \"filterAfterOrEqualOperator\", filterAfterOperator: \"filterAfterOperator\", filterBeforeOperator: \"filterBeforeOperator\", filterBeforeOrEqualOperator: \"filterBeforeOrEqualOperator\", filterFilterButton: \"filterFilterButton\", filterClearButton: \"filterClearButton\", filterAndLogic: \"filterAndLogic\", filterOrLogic: \"filterOrLogic\", loading: \"loading\", columnMenu: \"columnMenu\", columns: \"columns\", lock: \"lock\", unlock: \"unlock\", sortable: \"sortable\", sortAscending: \"sortAscending\", sortDescending: \"sortDescending\", sortedAscending: \"sortedAscending\", sortedDescending: \"sortedDescending\", sortedDefault: \"sortedDefault\", columnsApply: \"columnsApply\", columnsReset: \"columnsReset\", detailExpand: \"detailExpand\", detailCollapse: \"detailCollapse\", filterDateToday: \"filterDateToday\", filterDateToggle: \"filterDateToggle\", filterNumericDecrement: \"filterNumericDecrement\", filterNumericIncrement: \"filterNumericIncrement\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n groupPanelEmpty: [{ type: Input }],\n noRecords: [{ type: Input }],\n pagerFirstPage: [{ type: Input }],\n pagerLastPage: [{ type: Input }],\n pagerPreviousPage: [{ type: Input }],\n pagerNextPage: [{ type: Input }],\n pagerPage: [{ type: Input }],\n pagerItemsPerPage: [{ type: Input }],\n pagerOf: [{ type: Input }],\n pagerItems: [{ type: Input }],\n pagerPageNumberInputTitle: [{ type: Input }],\n filter: [{ type: Input }],\n filterEqOperator: [{ type: Input }],\n filterNotEqOperator: [{ type: Input }],\n filterIsNullOperator: [{ type: Input }],\n filterIsNotNullOperator: [{ type: Input }],\n filterIsEmptyOperator: [{ type: Input }],\n filterIsNotEmptyOperator: [{ type: Input }],\n filterStartsWithOperator: [{ type: Input }],\n filterContainsOperator: [{ type: Input }],\n filterNotContainsOperator: [{ type: Input }],\n filterEndsWithOperator: [{ type: Input }],\n filterGteOperator: [{ type: Input }],\n filterGtOperator: [{ type: Input }],\n filterLteOperator: [{ type: Input }],\n filterLtOperator: [{ type: Input }],\n filterIsTrue: [{ type: Input }],\n filterIsFalse: [{ type: Input }],\n filterBooleanAll: [{ type: Input }],\n filterAfterOrEqualOperator: [{ type: Input }],\n filterAfterOperator: [{ type: Input }],\n filterBeforeOperator: [{ type: Input }],\n filterBeforeOrEqualOperator: [{ type: Input }],\n filterFilterButton: [{ type: Input }],\n filterClearButton: [{ type: Input }],\n filterAndLogic: [{ type: Input }],\n filterOrLogic: [{ type: Input }],\n loading: [{ type: Input }],\n columnMenu: [{ type: Input }],\n columns: [{ type: Input }],\n lock: [{ type: Input }],\n unlock: [{ type: Input }],\n sortable: [{ type: Input }],\n sortAscending: [{ type: Input }],\n sortDescending: [{ type: Input }],\n sortedAscending: [{ type: Input }],\n sortedDescending: [{ type: Input }],\n sortedDefault: [{ type: Input }],\n columnsApply: [{ type: Input }],\n columnsReset: [{ type: Input }],\n detailExpand: [{ type: Input }],\n detailCollapse: [{ type: Input }],\n filterDateToday: [{ type: Input }],\n filterDateToggle: [{ type: Input }],\n filterNumericDecrement: [{ type: Input }],\n filterNumericIncrement: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoGridLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: '[kendoGridLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_grid %}#toc-localization)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-grid-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-grid-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass FilterRowComponent {\n constructor(localization) {\n this.localization = localization;\n this.columns = [];\n this.groups = [];\n this.filterRowClass = true;\n this.filterLabel = this.localization.get('filter');\n }\n}\nFilterRowComponent.ɵfac = function FilterRowComponent_Factory(t) { return new (t || FilterRowComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterRowComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterRowComponent, selectors: [[\"\", \"kendoGridFilterRow\", \"\"]], hostVars: 2, hostBindings: function FilterRowComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filter-row\", ctx.filterRowClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", filter: \"filter\", detailTemplate: \"detailTemplate\", logicalRowIndex: \"logicalRowIndex\", lockedColumnsCount: \"lockedColumnsCount\" }, attrs: _c122, decls: 3, vars: 3, consts: [[\"role\", \"presentation\", 3, \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 3, \"k-hierarchy-cell\", 4, \"ngIf\"], [\"kendoGridFilterCell\", \"\", \"kendoGridLogicalCell\", \"\", 3, \"column\", \"filter\", \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\"], [\"kendoGridFilterCell\", \"\", \"kendoGridLogicalCell\", \"\", 3, \"column\", \"filter\", \"logicalRowIndex\", \"logicalColIndex\"]], template: function FilterRowComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterRowComponent_td_0_Template, 1, 2, \"td\", 0);\n ɵngcc0.ɵɵtemplate(1, FilterRowComponent_td_1_Template, 1, 2, \"td\", 1);\n ɵngcc0.ɵɵtemplate(2, FilterRowComponent_td_2_Template, 1, 5, \"td\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.detailTemplate == null ? null : ctx.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.columns);\n } }, directives: function () { return [ɵngcc5.NgForOf, ɵngcc5.NgIf, FilterCellComponent, LogicalCellDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterRowComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nFilterRowComponent.propDecorators = {\n columns: [{ type: Input }],\n filter: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n filterRowClass: [{ type: HostBinding, args: ['class.k-filter-row',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterRowComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFilterRow]',\n template: `\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], filterRowClass: [{\n type: HostBinding,\n args: ['class.k-filter-row']\n }], filter: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }] }); })();\n\nconst areDifferent = (a, b) => a.field !== b.field || a.operator !== b.operator || a.value !== b.value;\nconst isChanged$1 = (a, b) => {\n if (a.length !== b.length) {\n return true;\n }\n for (let idx = 0, len = a.length; idx < len; idx++) {\n const prev = a[idx];\n const curr = b[idx];\n if (isCompositeFilterDescriptor(prev)) {\n // tslint:disable-next-line:no-use-before-declare\n if (diffFilters(prev, curr[idx])) {\n return true;\n }\n }\n else if (areDifferent(prev, curr)) {\n return true;\n }\n }\n return false;\n};\nconst copyObject = (obj) => {\n const result = {};\n Object.assign(result, obj);\n if (obj.constructor !== Object) {\n const proto = obj.constructor.prototype;\n Object.getOwnPropertyNames(proto).forEach((property) => {\n if (property !== 'constructor' && proto.hasOwnProperty(property)) {\n result[property] = obj[property];\n }\n });\n }\n return result;\n};\nconst cloneFilter = (filter$$1) => copyObject(filter$$1);\n/**\n * @hidden\n */\nconst cloneFilters = (filter$$1) => {\n if (!filter$$1) {\n return;\n }\n if (isCompositeFilterDescriptor(filter$$1)) {\n return {\n filters: cloneFilters(filter$$1.filters),\n logic: filter$$1.logic\n };\n }\n else if (Array.isArray(filter$$1)) {\n return filter$$1.map(cloneFilters);\n }\n return cloneFilter(filter$$1);\n};\n/**\n * @hidden\n */\nconst diffFilters = (a, b) => {\n if (isPresent(a) && !isPresent(b)) {\n return true;\n }\n if (!isPresent(a) && isPresent(b)) {\n return true;\n }\n return isPresent(a) && isPresent(b) && isChanged$1(a.filters, b.filters);\n};\n\n/**\n * @hidden\n */\nclass FilterCellComponent {\n constructor() {\n this._templateContext = {};\n }\n get filter() {\n return this._filter;\n }\n set filter(value) {\n this._filter = cloneFilters(value);\n }\n get templateContext() {\n this._templateContext.column = this.column;\n this._templateContext.filter = this.filter;\n // tslint:disable-next-line:no-string-literal\n this._templateContext[\"$implicit\"] = this.filter;\n return this._templateContext;\n }\n get hasTemplate() {\n return isPresent(this.column.filterCellTemplateRef);\n }\n get isFilterable() {\n return isPresent(this.column) && !isNullOrEmptyString(this.column.field) && this.column.filterable;\n }\n}\nFilterCellComponent.ɵfac = function FilterCellComponent_Factory(t) { return new (t || FilterCellComponent)(); };\nFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellComponent, selectors: [[\"\", \"kendoGridFilterCell\", \"\"]], inputs: { filter: \"filter\", column: \"column\" }, attrs: _c123, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [\"kendoFilterCellHost\", \"\", 3, \"column\", \"filter\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function FilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellComponent_ng_template_0_Template, 3, 3, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isFilterable);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, FilterCellHostDirective, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\nFilterCellComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFilterCell]',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return []; }, { filter: [{\n type: Input\n }], column: [{\n type: Input\n }] }); })();\n\nconst localizeOperators = operators => localization => Object.keys(operators).reduce((acc, key) => {\n acc[operators[key]] = localization.get(key);\n return acc;\n}, {}); // tslint:disable-line:align\nconst operatorTexts = localizeOperators({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterGteOperator\": \"gte\",\n \"filterGtOperator\": \"gt\",\n \"filterLteOperator\": \"lte\",\n \"filterLtOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\",\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterAfterOrEqualOperator\": \"after-eq\",\n \"filterAfterOperator\": \"after\",\n \"filterBeforeOrEqualOperator\": \"before-eq\",\n \"filterBeforeOperator\": \"before\"\n});\n/**\n * @hidden\n */\nconst toJSON = (xs) => xs.map(x => x.toJSON());\n/**\n * @hidden\n */\nclass FilterOperatorBase {\n constructor(operator, localization) {\n this.operator = operator;\n this.localization = localization;\n this.messages = operatorTexts(this.localization);\n this._text = this.messages[this.operator];\n this.localization.changes.subscribe(this.refreshText.bind(this));\n }\n /**\n * The text that will be displayed in the drop-down list.\n * @readonly\n * @type {string}\n * @memberOf FilterOperatorBase\n */\n get text() {\n return this._text;\n }\n /**\n *\n */\n set text(value) {\n this._text = isNullOrEmptyString(value) ? this.messages[this.operator] : value;\n }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: this.operator\n };\n }\n refreshText() {\n const update = this._text === this.messages[this.operator];\n this.messages = operatorTexts(this.localization);\n if (update) {\n this._text = this.messages[this.operator];\n }\n }\n}\nFilterOperatorBase.ɵfac = function FilterOperatorBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterOperatorBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterOperatorBase, inputs: { text: \"text\" } });\nFilterOperatorBase.propDecorators = {\n text: [{ type: Input }]\n};\n\n\nconst insertDefaultFilter = (index, rootFilter, filter$$1) => {\n rootFilter = (rootFilter || { filters: [], logic: \"and\" });\n rootFilter.filters[index] = filter$$1;\n return filter$$1;\n};\n/**\n * @hidden\n */\nconst setFilter = (index, filter$$1, field, defaultOperator) => {\n if (isPresent(filter$$1) && isPresent(filter$$1.filters) && filter$$1.filters.length > index) {\n return filter$$1.filters[index];\n }\n else {\n return insertDefaultFilter(index, filter$$1, {\n field,\n operator: defaultOperator\n });\n }\n};\n/**\n * @hidden\n */\nconst logicOperators = (localization) => [\n { text: localization.get(\"filterAndLogic\"), value: \"and\" },\n { text: localization.get(\"filterOrLogic\"), value: \"or\" }\n];\n/**\n * @hidden\n */\nconst flatten = (filter$$1) => {\n if (isPresent(filter$$1.filters)) {\n return filter$$1.filters.reduce((acc, curr) => acc.concat(isCompositeFilterDescriptor(curr) ? flatten(curr) : [curr]), []);\n }\n return [];\n};\nconst trimFilterByField = (filter$$1, field) => {\n if (isPresent(filter$$1) && isPresent(filter$$1.filters)) {\n filter$$1.filters = filter$$1.filters.filter(x => {\n if (isCompositeFilterDescriptor(x)) {\n trimFilterByField(x, field);\n return x.filters.length;\n }\n else {\n return x.field !== field;\n }\n });\n }\n};\n/**\n * @hidden\n */\nconst filtersByField = (filter$$1, field) => flatten(filter$$1 || {}).filter(x => x.field === field);\n/**\n * @hidden\n */\nconst filterByField = (filter$$1, field) => {\n let [currentFilter] = filtersByField(filter$$1, field);\n return currentFilter;\n};\n/**\n * @hidden\n */\nconst removeFilter = (filter$$1, field) => {\n trimFilterByField(filter$$1, field);\n return filter$$1;\n};\n/**\n * @hidden\n */\nconst localizeOperators$1 = operators => localization => Object.keys(operators).map(key => ({\n text: localization.get(key),\n value: operators[key]\n}));\n/**\n * An abstract base class for the filter-cell component ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-row)).\n */\nclass BaseFilterCellComponent {\n constructor(filterService) {\n this.filterService = filterService;\n this.operatorList = new QueryList();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n get operators() {\n return this._operators.length ? this._operators : this.defaultOperators;\n }\n set operators(values) {\n this._operators = values;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.operationListSubscription = observe(this.operatorList)\n .pipe(map(q => q.toArray()), map(toJSON))\n .subscribe(x => {\n this.operators = x;\n });\n }\n ngOnDestroy() {\n if (this.operationListSubscription) {\n this.operationListSubscription.unsubscribe();\n }\n }\n filterByField(field) {\n return filterByField(this.filter, field);\n }\n filtersByField(field) {\n return filtersByField(this.filter, field);\n }\n removeFilter(field) {\n return removeFilter(this.filter, field);\n }\n updateFilter(filter$$1) {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n let [currentFilter] = flatten(root).filter(x => x.field === filter$$1.field);\n if (!isPresent(currentFilter)) {\n root.filters.push(filter$$1);\n }\n else {\n Object.assign(currentFilter, filter$$1);\n }\n return root;\n }\n applyFilter(filter$$1) {\n this.filterService.filter(filter$$1);\n }\n}\nBaseFilterCellComponent.ɵfac = function BaseFilterCellComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nBaseFilterCellComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: BaseFilterCellComponent, contentQueries: function BaseFilterCellComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterOperatorBase, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.operatorList = _t);\n } }, hostVars: 2, hostBindings: function BaseFilterCellComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } } });\nBaseFilterCellComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n operatorList: [{ type: ContentChildren, args: [FilterOperatorBase,] }]\n};\n\n\n// tslint:disable:no-access-missing-member\nconst numericOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterGteOperator\": \"gte\",\n \"filterGtOperator\": \"gt\",\n \"filterLteOperator\": \"lte\",\n \"filterLtOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\"\n});\n/**\n * Represents a base numeric filter component.\n */\nclass NumericFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `eq`.\n * @type {string}\n */\n this.operator = \"eq\";\n /**\n * Specifies the value that is used to increment or decrement the component value.\n * @type {numeric}\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * @type {boolean}\n */\n this.spinners = true;\n this.defaultOperators = numericOperators(this.localization);\n }\n /**\n * Specifies the number format used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n */\n set format(value) {\n this._format = value;\n }\n /**\n * Specifies the number format used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n *\n * @readonly\n * @type {string}\n */\n get format() {\n return !isNullOrEmptyString(this._format) ? this._format : this.columnFormat;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n get columnFormat() {\n return this.column && !isNullOrEmptyString(this.column.format) ?\n extractFormat(this.column.format) : \"n2\";\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = numericOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nNumericFilterComponent.ɵfac = function NumericFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nNumericFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NumericFilterComponent, inputs: { operator: \"operator\", step: \"step\", spinners: \"spinners\", format: \"format\", column: \"column\", filter: \"filter\", min: \"min\", max: \"max\", decimals: \"decimals\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nNumericFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n step: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n spinners: [{ type: Input }],\n decimals: [{ type: Input }],\n format: [{ type: Input }]\n};\n\n\n/**\n * Represents a numeric filter cell.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass NumericFilterCellComponent extends NumericFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n this.localization = localization;\n /**\n * Determines the delay time (in milliseconds) before the filter value is submitted.\n * A value of `0` indicates no delay. The default value is `500`.\n * @type {boolean}\n */\n this.filterDelay = 500;\n /**\n * Determines if the drop-down filter operators will be displayed.\n * The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nNumericFilterCellComponent.ɵfac = function NumericFilterCellComponent_Factory(t) { return new (t || NumericFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterCellComponent, selectors: [[\"kendo-grid-numeric-filter-cell\"]], inputs: { filterDelay: \"filterDelay\", showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 16, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoGridFocusable\", \"\", \"kendoFilterInput\", \"\", 3, \"filterDelay\", \"autoCorrect\", \"value\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [3, \"increment\", \"decrement\"]], template: function NumericFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", ctx.filterDelay)(\"autoCorrect\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"increment\", ctx.messageFor(\"filterNumericIncrement\"))(\"decrement\", ctx.messageFor(\"filterNumericDecrement\"));\n } }, directives: function () { return [FilterCellWrapperComponent, ɵngcc6.NumericTextBoxComponent, FocusableDirective, FilterInputDirective, ɵngcc6.NumericTextBoxCustomMessagesComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nNumericFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nNumericFilterCellComponent.propDecorators = {\n filterDelay: [{ type: Input }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-cell',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { filterDelay: [{\n type: Input\n }], showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterInputDirective {\n constructor(valueAccessors, ngZone, element, renderer) {\n this.change = new EventEmitter();\n this.composing = false;\n this.filterDelay = 500;\n this.changeRequests = new Subject();\n this.accessor = valueAccessors[0];\n ngZone.runOutsideAngular(() => {\n const unsubscribeStart = renderer.listen(element.nativeElement, 'compositionstart', () => this.composing = true);\n const unsubscribeEnd = renderer.listen(element.nativeElement, 'compositionend', () => this.composing = false);\n this.unsubscribeEvents = () => {\n unsubscribeStart();\n unsubscribeEnd();\n };\n });\n }\n set value(value) {\n this.accessor.writeValue(value);\n }\n set disabled(value) {\n this.accessor.setDisabledState(value);\n }\n ngAfterViewInit() {\n this.accessor.registerOnChange(x => this.filterDelay > 0 ?\n this.changeRequests.next(x) :\n this.change.emit(x));\n this.subscribeChanges();\n }\n ngOnChanges(changes) {\n if (isChanged('filterDelay', changes)) {\n this.unsubscribeChanges();\n this.subscribeChanges();\n }\n }\n ngOnDestroy() {\n this.unsubscribeChanges();\n this.unsubscribeEvents();\n }\n subscribeChanges() {\n this.changeRequestsSubscription = this.changeRequests\n .pipe(debounceTime(this.filterDelay), filter(() => !this.composing))\n .subscribe(x => this.change.emit(x));\n }\n unsubscribeChanges() {\n if (this.changeRequestsSubscription) {\n this.changeRequestsSubscription.unsubscribe();\n }\n }\n}\nFilterInputDirective.ɵfac = function FilterInputDirective_Factory(t) { return new (t || FilterInputDirective)(ɵngcc0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nFilterInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterInputDirective, selectors: [[\"\", \"kendoFilterInput\", \"\"]], inputs: { filterDelay: \"filterDelay\", value: \"value\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nFilterInputDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] }] },\n { type: NgZone },\n { type: ElementRef },\n { type: Renderer2 }\n];\nFilterInputDirective.propDecorators = {\n filterDelay: [{ type: Input }],\n value: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterInput]'\n }]\n }], function () { return [{ type: Array, decorators: [{\n type: Self\n }, {\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { filterDelay: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\nconst EMPTY_VALUE_OPERATORS = new Set(['isnull', 'isnotnull', 'isempty', 'isnotempty']);\nconst isEmptyValueOperator = (operator) => EMPTY_VALUE_OPERATORS.has(operator);\n/**\n * @hidden\n */\nclass FilterInputWrapperComponent extends BaseFilterCellComponent {\n constructor(filterService) {\n super(filterService);\n this.operators = [];\n }\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n get currentOperator() {\n const filter$$1 = this.currentFilter;\n if (!this._operator) {\n this._operator = filter$$1 ? filter$$1.operator : this.defaultOperator;\n }\n return this._operator;\n }\n set currentOperator(value) {\n this._operator = value;\n const emptyValueOperator = isEmptyValueOperator(value);\n this.filterInputDisabled = emptyValueOperator;\n if (emptyValueOperator) {\n this.applyNoValueFilter(value);\n }\n else if (!isBlank(value) && isPresent(this.currentFilter)) {\n this.onChange(this.currentFilter.value);\n }\n }\n get defaultOperator() {\n if (!isNullOrEmptyString(this._defaultOperator)) {\n return this._defaultOperator;\n }\n else if (this.operators && this.operators.length) {\n return this.operators[0].value;\n }\n return \"eq\";\n }\n set defaultOperator(value) {\n this._defaultOperator = value;\n }\n set filterInputDisabled(disabled) {\n if (!this.input) {\n return;\n }\n this.input.disabled = disabled;\n }\n ngAfterContentInit() {\n if (isPresent(this.input)) {\n this.changeSubscription = this.input.change.subscribe(this.onChange.bind(this));\n this.filterInputDisabled = isEmptyValueOperator(this.currentOperator);\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.changeSubscription) {\n this.changeSubscription.unsubscribe();\n }\n }\n onChange(value) {\n if (!isNullOrEmptyString(value) || this.filterByField(this.column.field)) {\n this.filterChange(isNullOrEmptyString(value) ?\n this.removeFilter(this.column.field) :\n this.updateFilter({\n field: this.column.field,\n operator: this.currentOperator,\n value: value\n }));\n }\n }\n onClear() {\n this.onChange(null);\n this.filterInputDisabled = isEmptyValueOperator(this.defaultOperator);\n }\n applyNoValueFilter(operator) {\n this.filterChange(this.updateFilter({\n field: this.column.field,\n operator: operator,\n value: null\n }));\n }\n ngOnChanges(changes) {\n if (isChanged(\"filter\", changes, false)) {\n this._operator = null;\n this.filterInputDisabled = isEmptyValueOperator(this.currentOperator);\n }\n }\n}\nFilterInputWrapperComponent.ɵfac = function FilterInputWrapperComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterInputWrapperComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterInputWrapperComponent, contentQueries: function FilterInputWrapperComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterInputDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, inputs: { operators: \"operators\", defaultOperator: \"defaultOperator\", column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\nFilterInputWrapperComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n input: [{ type: ContentChild, args: [FilterInputDirective,] }],\n defaultOperator: [{ type: Input }]\n};\n\n\nconst EMPTY_FILTER_OPERATORS = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n/**\n * @hidden\n */\nclass FilterCellWrapperComponent extends FilterInputWrapperComponent {\n constructor(filterService) {\n super(filterService);\n this.showOperators = true;\n }\n get hostClasses() {\n return true;\n }\n get overrideBaseClasses() {\n return false;\n }\n get showButton() {\n const filter$$1 = this.currentFilter;\n return isPresent(filter$$1) && (!isNullOrEmptyString(filter$$1.value) ||\n EMPTY_FILTER_OPERATORS.indexOf(String(filter$$1.operator)) >= 0);\n }\n filterChange(filter$$1) {\n this.applyFilter(filter$$1);\n }\n}\nFilterCellWrapperComponent.ɵfac = function FilterCellWrapperComponent_Factory(t) { return new (t || FilterCellWrapperComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService)); };\nFilterCellWrapperComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellWrapperComponent, selectors: [[\"kendo-grid-filter-wrapper-cell\"]], hostVars: 4, hostBindings: function FilterCellWrapperComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-wrapper\", ctx.hostClasses)(\"k-filtercell\", ctx.overrideBaseClasses);\n } }, inputs: { showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c124, decls: 2, vars: 4, consts: [[3, \"showOperators\", \"operators\", \"showButton\", \"value\", \"clear\", \"valueChange\"]], template: function FilterCellWrapperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-filter-cell-operators\", 0);\n ɵngcc0.ɵɵlistener(\"clear\", function FilterCellWrapperComponent_Template_kendo_grid_filter_cell_operators_clear_1_listener() { return ctx.onClear(); })(\"valueChange\", function FilterCellWrapperComponent_Template_kendo_grid_filter_cell_operators_valueChange_1_listener($event) { return ctx.currentOperator = $event; });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"showOperators\", ctx.showOperators)(\"operators\", ctx.operators)(\"showButton\", ctx.showButton)(\"value\", ctx.currentOperator);\n } }, directives: function () { return [FilterCellOperatorsComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterCellWrapperComponent.ctorParameters = () => [\n { type: FilterService }\n];\nFilterCellWrapperComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-wrapper',] }],\n overrideBaseClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellWrapperComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-wrapper-cell',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }]; }, { showOperators: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell-wrapper']\n }], overrideBaseClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }] }); })();\n\n// tslint:disable:no-access-missing-member\nconst stringOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\"\n});\n/**\n * Represents a base string filter component.\n */\nclass StringFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `contains`.\n * @type {string}\n */\n this.operator = \"contains\";\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField((this.column || {}).field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = stringOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nStringFilterComponent.ɵfac = function StringFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nStringFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: StringFilterComponent, inputs: { operator: \"operator\", column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nStringFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }]\n};\n\n\n/**\n * Represents a string-filter cell component\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-configuration-components-for-filter-templates)).\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass StringFilterCellComponent extends StringFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n /**\n * Determines the delay time (in milliseconds) before the filter value is submitted.\n * A value of `0` indicates no delay. The default value is `500`.\n * @type {boolean}\n */\n this.filterDelay = 500;\n /**\n * Determines if the drop-down filter operators will be displayed.\n * The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n}\nStringFilterCellComponent.ɵfac = function StringFilterCellComponent_Factory(t) { return new (t || StringFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStringFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterCellComponent, selectors: [[\"kendo-grid-string-filter-cell\"]], inputs: { filterDelay: \"filterDelay\", showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoGridFocusable\", \"\", \"kendoFilterInput\", \"\", 1, \"k-textbox\", 3, \"filterDelay\", \"ngModel\"]], template: function StringFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"input\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", ctx.filterDelay)(\"ngModel\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc7.DefaultValueAccessor, FocusableDirective, FilterInputDirective, ɵngcc7.NgControlStatus, ɵngcc7.NgModel], encapsulation: 2 });\n/** @nocollapse */\nStringFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nStringFilterCellComponent.propDecorators = {\n filterDelay: [{ type: Input }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-cell',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { filterDelay: [{\n type: Input\n }], showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a component which accommodates the filter operators.\n */\nclass FilterCellOperatorsComponent {\n constructor(localization) {\n this.localization = localization;\n this.clearText = 'Clear';\n /**\n * The filter operators that will be displayed.\n */\n this.operators = [];\n /**\n * Determines if the list of operators will be displayed.\n * @type {boolean}\n */\n this.showOperators = true;\n /**\n * Fires when the operator is selected.\n * @type {EventEmitter}\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the **Clear** button is clicked.\n * @type {EventEmitter<{}>}\n */\n this.clear = new EventEmitter();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n /**\n * @hidden\n */\n onChange(dataItem) {\n this.valueChange.emit(dataItem);\n }\n /**\n * @hidden\n */\n clearClick() {\n this.clear.emit();\n return false;\n }\n /**\n * @hidden\n */\n clearKeydown(args) {\n if (args.keyCode === Keys.Enter || args.keyCode === Keys.Space) {\n this.clear.emit();\n }\n }\n /**\n * @hidden\n */\n dropdownKeydown(args) {\n if (args.defaultPrevented) {\n return;\n }\n if (args.keyCode === Keys.Enter && !this.dropdown.isOpen) {\n this.dropdown.toggle(true);\n args.preventDefault();\n }\n }\n ngOnInit() {\n this.localization.changes.subscribe(() => this.clearText = this.localization.get(\"filterClearButton\"));\n }\n}\nFilterCellOperatorsComponent.ɵfac = function FilterCellOperatorsComponent_Factory(t) { return new (t || FilterCellOperatorsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterCellOperatorsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellOperatorsComponent, selectors: [[\"kendo-grid-filter-cell-operators\"]], viewQuery: function FilterCellOperatorsComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c125, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropdown = _t.first);\n } }, hostVars: 2, hostBindings: function FilterCellOperatorsComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-operator\", ctx.hostClasses);\n } }, inputs: { operators: \"operators\", showOperators: \"showOperators\", showButton: \"showButton\", value: \"value\" }, outputs: { valueChange: \"valueChange\", clear: \"clear\" }, decls: 3, vars: 5, consts: [[\"kendoGridFocusable\", \"\", \"class\", \"k-dropdown-operator\", \"iconClass\", \"k-i-filter\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"value\", \"valuePrimitive\", \"popupSettings\", \"valueChange\", \"keydown\", 4, \"ngIf\"], [\"type\", \"button\", \"kendoGridFocusable\", \"\", 1, \"k-button\", \"k-button-icon\", 3, \"ngClass\", \"title\", \"click\", \"keydown\"], [1, \"k-icon\", \"k-i-filter-clear\"], [\"kendoGridFocusable\", \"\", \"iconClass\", \"k-i-filter\", \"textField\", \"text\", \"valueField\", \"value\", 1, \"k-dropdown-operator\", 3, \"data\", \"value\", \"valuePrimitive\", \"popupSettings\", \"valueChange\", \"keydown\"], [\"dropdown\", \"\"]], template: function FilterCellOperatorsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellOperatorsComponent_kendo_dropdownlist_0_Template, 2, 5, \"kendo-dropdownlist\", 0);\n ɵngcc0.ɵɵelementStart(1, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function FilterCellOperatorsComponent_Template_button_click_1_listener() { return ctx.clearClick(); })(\"keydown\", function FilterCellOperatorsComponent_Template_button_keydown_1_listener($event) { return ctx.clearKeydown($event); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c127, ctx.showButton))(\"title\", ctx.clearText);\n } }, directives: [ɵngcc5.NgIf, FocusableDirective, ɵngcc5.NgClass, ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nFilterCellOperatorsComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nFilterCellOperatorsComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-operator',] }],\n dropdown: [{ type: ViewChild, args: ['dropdown',] }],\n operators: [{ type: Input }],\n showButton: [{ type: Input }],\n showOperators: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n clear: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellOperatorsComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-cell-operators',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], showOperators: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], clear: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell-operator']\n }], dropdown: [{\n type: ViewChild,\n args: ['dropdown']\n }], showButton: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\n// tslint:disable:no-access-missing-member\nconst stringOperators$1 = localizeOperators$1({\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\"\n});\n/**\n * @hidden\n */\nclass AutoCompleteFilterCellComponent extends BaseFilterCellComponent {\n constructor(filterService, column, localization) {\n super(filterService);\n this.localization = localization;\n this.showOperators = true;\n this.defaultOperators = stringOperators$1(this.localization);\n this.column = column;\n }\n set valueField(value) {\n this._valueField = value;\n }\n get valueField() {\n return this._valueField ? this._valueField : this.column.field;\n }\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : \"contains\";\n }\n}\nAutoCompleteFilterCellComponent.ɵfac = function AutoCompleteFilterCellComponent_Factory(t) { return new (t || AutoCompleteFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ColumnComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAutoCompleteFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AutoCompleteFilterCellComponent, selectors: [[\"kendo-grid-autocomplete-filter-cell\"]], inputs: { showOperators: \"showOperators\", column: \"column\", valueField: \"valueField\", filter: \"filter\", data: \"data\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, \"column\", \"filter\", \"operators\", \"showOperators\"], [\"kendoFilterInput\", \"\", 3, \"data\", \"valueField\", \"value\"]], template: function AutoCompleteFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"kendo-autocomplete\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"data\", ctx.data)(\"valueField\", ctx.valueField)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc8.AutoCompleteComponent, FilterInputDirective], encapsulation: 2 });\n/** @nocollapse */\nAutoCompleteFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: ColumnComponent },\n { type: LocalizationService }\n];\nAutoCompleteFilterCellComponent.propDecorators = {\n showOperators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n data: [{ type: Input }],\n valueField: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AutoCompleteFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-autocomplete-filter-cell',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ColumnComponent }, { type: ɵngcc1.LocalizationService }]; }, { showOperators: [{\n type: Input\n }], column: [{\n type: Input\n }], valueField: [{\n type: Input\n }], filter: [{\n type: Input\n }], data: [{\n type: Input\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * @hidden\n */\nclass BooleanFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * @hidden\n */\n this.operator = \"eq\";\n /**\n * @hidden\n */\n this.items = [\n { text: this.localization.get(\"filterIsTrue\"), value: true },\n { text: this.localization.get(\"filterIsFalse\"), value: false }\n ];\n /**\n * @hidden\n */\n this.defaultItem = { text: this.localization.get(\"filterBooleanAll\"), value: null };\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.items = [\n { text: this.localization.get(\"filterIsTrue\"), value: true },\n { text: this.localization.get(\"filterIsFalse\"), value: false }\n ];\n this.defaultItem = { text: this.localization.get(\"filterBooleanAll\"), value: null };\n }\n}\nBooleanFilterComponent.ɵfac = function BooleanFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nBooleanFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: BooleanFilterComponent, hostVars: 2, hostBindings: function BooleanFilterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-boolean\", ctx.hostClasses);\n } }, inputs: { column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nBooleanFilterComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-boolean',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n\n\n/**\n * Represents a Boolean filter-cell component.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass BooleanFilterCellComponent extends BooleanFilterComponent {\n constructor(filterService, localization, cd) {\n super(filterService, localization);\n this.cd = cd;\n }\n localizationChange() {\n super.localizationChange();\n this.cd.markForCheck();\n }\n}\nBooleanFilterCellComponent.ɵfac = function BooleanFilterCellComponent_Factory(t) { return new (t || BooleanFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nBooleanFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BooleanFilterCellComponent, selectors: [[\"kendo-grid-boolean-filter-cell\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 10, consts: [[3, \"column\", \"filter\", \"showOperators\", \"defaultOperator\"], [\"kendoFilterInput\", \"\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"defaultItem\", \"data\", \"popupSettings\", \"valuePrimitive\", \"value\"]], template: function BooleanFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"showOperators\", false)(\"defaultOperator\", ctx.operator);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"data\", ctx.items)(\"popupSettings\", ɵngcc0.ɵɵpureFunction0(9, _c126))(\"valuePrimitive\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc8.DropDownListComponent, FilterInputDirective], encapsulation: 2 });\n/** @nocollapse */\nBooleanFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BooleanFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-boolean-filter-cell',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n// tslint:disable:no-access-missing-member\nconst dateOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterAfterOrEqualOperator\": \"gte\",\n \"filterAfterOperator\": \"gt\",\n \"filterBeforeOrEqualOperator\": \"lte\",\n \"filterBeforeOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\"\n});\n/**\n * @hidden\n */\nclass DateFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `contains`.\n * @type {string}\n */\n this.operator = \"gte\";\n /**\n * Defines the active view that the calendar initially renders.\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = \"month\";\n /**\n * Defines the bottommost calendar view, to which the user can navigate.\n */\n this.bottomView = \"month\";\n /**\n * Defines the topmost calendar view, to which the user can navigate.\n */\n this.topView = \"century\";\n /**\n * Determines whether to display a week number column in the `month` view of the Calendar.\n */\n this.weekNumber = false;\n this.defaultOperators = dateOperators(this.localization);\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * Specifies the date format that is used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n */\n set format(value) {\n this._format = value;\n }\n /**\n * Specifies the date format that is used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n *\n * @readonly\n * @type {string}\n */\n get format() {\n return !isNullOrEmptyString(this._format) ? this._format : this.columnFormat;\n }\n get columnFormat() {\n return this.column && !isNullOrEmptyString(this.column.format) ?\n extractFormat(this.column.format) : \"d\";\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = dateOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nDateFilterComponent.ɵfac = function DateFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nDateFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateFilterComponent, inputs: { operator: \"operator\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", format: \"format\", column: \"column\", filter: \"filter\", min: \"min\", max: \"max\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDateFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n format: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }]\n};\n\n\n/**\n * Represents a date-filter cell component.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass DateFilterCellComponent extends DateFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n this.localization = localization;\n /**\n * Determines if the drop-down filter operators will be displayed. The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nDateFilterCellComponent.ɵfac = function DateFilterCellComponent_Factory(t) { return new (t || DateFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterCellComponent, selectors: [[\"kendo-grid-date-filter-cell\"]], inputs: { showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 17, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoFilterInput\", \"\", 3, \"value\", \"format\", \"formatPlaceholder\", \"placeholder\", \"activeView\", \"bottomView\", \"topView\", \"min\", \"max\", \"weekNumber\"], [3, \"toggle\", \"today\"]], template: function DateFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-datepicker\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-datepicker-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"min\", ctx.min)(\"max\", ctx.max)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"toggle\", ctx.messageFor(\"filterDateToggle\"))(\"today\", ctx.messageFor(\"filterDateToday\"));\n } }, directives: [FilterCellWrapperComponent, ɵngcc9.DatePickerComponent, FilterInputDirective, ɵngcc9.DatePickerCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nDateFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nDateFilterCellComponent.propDecorators = {\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-cell',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass ColGroupComponent {\n constructor() {\n this.columns = [];\n this.groups = [];\n }\n get columnsToRender() {\n return columnsToRender(this.columns);\n }\n trackBy(index, _item) {\n return index;\n }\n}\nColGroupComponent.ɵfac = function ColGroupComponent_Factory(t) { return new (t || ColGroupComponent)(); };\nColGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColGroupComponent, selectors: [[\"\", \"kendoGridColGroup\", \"\"]], inputs: { columns: \"columns\", groups: \"groups\", detailTemplate: \"detailTemplate\" }, attrs: _c128, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [3, \"k-group-col\", 4, \"ngFor\", \"ngForOf\"], [3, \"k-hierarchy-col\", 4, \"ngIf\"], [3, \"width\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"]], template: function ColGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColGroupComponent_ng_template_0_Template, 3, 4, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2 });\nColGroupComponent.propDecorators = {\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColGroupComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridColGroup]',\n template: `\n \n \n \n \n \n `\n }]\n }], function () { return []; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass LoadingComponent {\n constructor(localization) {\n this.localization = localization;\n this.hostClass = true;\n }\n get loadingText() {\n return this.localization.get('loading');\n }\n}\nLoadingComponent.ɵfac = function LoadingComponent_Factory(t) { return new (t || LoadingComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLoadingComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LoadingComponent, selectors: [[\"\", \"kendoGridLoading\", \"\"]], hostVars: 2, hostBindings: function LoadingComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-loading-mask\", ctx.hostClass);\n } }, attrs: _c129, decls: 4, vars: 1, consts: [[1, \"k-loading-text\"], [1, \"k-loading-image\"], [1, \"k-loading-color\"]], template: function LoadingComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"div\", 1);\n ɵngcc0.ɵɵelement(3, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.loadingText);\n } }, encapsulation: 2 });\n/** @nocollapse */\nLoadingComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nLoadingComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-loading-mask',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LoadingComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridLoading]',\n template: `\n {{ loadingText }}\n
    \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-loading-mask']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ResizableContainerDirective {\n constructor(el, renderer, resizeService, grid) {\n this.el = el;\n this.renderer = renderer;\n this.resizeService = resizeService;\n this.grid = grid;\n this.enabled = false;\n }\n set lockedWidth(value) {\n this._lockedWidth = value;\n if (this.enabled) {\n this.attachResize();\n this.resize();\n }\n }\n set kendoGridResizableContainer(enabled) {\n const refresh = enabled !== this.enabled;\n this.enabled = enabled;\n if (refresh) {\n this.attachResize();\n this.resize();\n }\n }\n ngOnDestroy() {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n attachResize() {\n if (this.resizeSubscription && !this.enabled) {\n this.resizeSubscription.unsubscribe();\n this.resizeSubscription = null;\n }\n if (!this.resizeSubscription && this.enabled) {\n this.resizeSubscription = this.resizeService.changes.subscribe(this.resize.bind(this));\n }\n }\n resize() {\n if (this.grid && this.grid.wrapper) {\n const containerElement = this.grid.wrapper.nativeElement;\n const width = Math.max(containerElement.clientWidth - this._lockedWidth, 0);\n if (this.enabled && width > 0) {\n this.renderer.setStyle(this.el.nativeElement, \"width\", width + \"px\");\n }\n else {\n this.renderer.setStyle(this.el.nativeElement, \"width\", \"\");\n }\n }\n }\n}\nResizableContainerDirective.ɵfac = function ResizableContainerDirective_Factory(t) { return new (t || ResizableContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ResizeService), ɵngcc0.ɵɵdirectiveInject(GridComponent, 8)); };\nResizableContainerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ResizableContainerDirective, selectors: [[\"\", \"kendoGridResizableContainer\", \"\"]], inputs: { lockedWidth: \"lockedWidth\", kendoGridResizableContainer: \"kendoGridResizableContainer\" } });\n/** @nocollapse */\nResizableContainerDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ResizeService },\n { type: GridComponent, decorators: [{ type: Optional }] }\n];\nResizableContainerDirective.propDecorators = {\n lockedWidth: [{ type: Input, args: ['lockedWidth',] }],\n kendoGridResizableContainer: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResizableContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridResizableContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ResizeService }, { type: GridComponent, decorators: [{\n type: Optional\n }] }]; }, { lockedWidth: [{\n type: Input,\n args: ['lockedWidth']\n }], kendoGridResizableContainer: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n this.removeView();\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n ngOnDestroy() {\n this.removeView();\n }\n removeView() {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n }\n}\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n/** @nocollapse */\nTemplateContextDirective.ctorParameters = () => [\n { type: ViewContainerRef }\n];\nTemplateContextDirective.propDecorators = {\n templateContext: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FocusGroup {\n constructor(root) {\n this.root = root;\n this.active = true;\n this.children = [];\n this.root.registerGroup(this);\n }\n get focusableChildren() {\n return this.children.filter(el => el.canFocus());\n }\n get isActive() {\n return this.active;\n }\n ngOnDestroy() {\n this.root.unregisterGroup(this);\n }\n registerElement(element) {\n this.unregisterElement(element);\n this.children.push(element);\n }\n unregisterElement(element) {\n this.children = this.children.filter(f => f !== element);\n }\n /**\n * Returns a Boolean value which indicates if the group will receive focus when the cell is focused.\n * Requires a single \"simple\" focusable element such as a button or a checkbox.\n */\n isNavigable() {\n const focusable = this.focusableChildren;\n return focusable.length === 1 && focusable[0].isNavigable();\n }\n canFocus() {\n return this.focusableChildren.length > 0;\n }\n focus() {\n if (this.canFocus() && !this.hasFocus()) {\n this.focusableChildren[0].focus();\n }\n }\n activate() {\n this.toggleState(true);\n }\n deactivate() {\n this.toggleState(false);\n }\n hasFocus() {\n return this.children.reduce((focused, element) => focused || element.hasFocus(), false);\n }\n toggleState(active) {\n if (this.active !== active) {\n this.active = active;\n this.children.forEach(f => f.toggle(active));\n }\n }\n}\nFocusGroup.ɵfac = function FocusGroup_Factory(t) { return new (t || FocusGroup)(ɵngcc0.ɵɵinject(FocusRoot)); };\nFocusGroup.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusGroup, factory: FocusGroup.ɵfac });\n/** @nocollapse */\nFocusGroup.ctorParameters = () => [\n { type: FocusRoot }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusGroup, [{\n type: Injectable\n }], function () { return [{ type: FocusRoot }]; }, null); })();\n\nlet id = 0;\nfunction nextId() {\n return id++;\n}\n/**\n * @hidden\n */\nclass LogicalCellDirective {\n constructor(focusGroup, element, columnInfoService, idService, navigationService, renderer, zone, cellContext) {\n this.focusGroup = focusGroup;\n this.element = element;\n this.columnInfoService = columnInfoService;\n this.idService = idService;\n this.navigationService = navigationService;\n this.renderer = renderer;\n this.zone = zone;\n this.cellContext = cellContext;\n this.logicalSlaveCell = false;\n this.colSpan = 1;\n this.rowSpan = 1;\n this.dataRowIndex = -1;\n this.detailExpandCell = false;\n this.uid = nextId();\n }\n get id() {\n if (!this.logicalSlaveCell && this.columnInfoService.isLocked) {\n return this.idService.cellId(this.logicalRowIndex, this.logicalColIndex);\n }\n }\n get ariaColIndex() {\n if (this.logicalSlaveCell || this.logicalColIndex === -1) {\n return undefined;\n }\n return this.logicalColIndex + 1;\n }\n ngOnInit() {\n if (!this.navigationService.enabled) {\n return;\n }\n this.navigationChange = this.navigationService.changes.subscribe((e) => this.onNavigationChange(e));\n }\n ngDoCheck() {\n if (!this.navigationService.enabled || this.logicalColIndex === -1) {\n return;\n }\n if (this.cellContext) {\n this.cellContext.focusGroup = this.focusGroup;\n }\n this.registerNoChanges();\n }\n ngOnChanges(changes) {\n if (!this.navigationService.enabled) {\n return;\n }\n const keys = Object.keys(changes);\n if ((keys.length === 1 && keys[0] === 'groupItem') || this.logicalColIndex === -1) {\n // Ignore groupItem changes as the reference is not stable\n return;\n }\n const indexChange = changes.logicalColIndex;\n const rowIndexChange = changes.logicalRowIndex;\n const index = indexChange && !indexChange.isFirstChange() ? indexChange.previousValue : this.logicalColIndex;\n const rowIndex = rowIndexChange && !rowIndexChange.isFirstChange() ? rowIndexChange.previousValue : this.logicalRowIndex;\n this.navigationService.unregisterCell(index, rowIndex, this);\n this.registerChanges();\n this.updateElement();\n }\n ngOnDestroy() {\n if (this.navigationChange) {\n this.navigationChange.unsubscribe();\n }\n this.navigationService.unregisterCell(this.logicalColIndex, this.logicalRowIndex, this);\n }\n onNavigationChange(e) {\n const active = this.logicalColIndex === e.colIndex && this.logicalRowIndex === e.rowIndex;\n const wasActive = this.logicalColIndex === e.prevColIndex && this.logicalRowIndex === e.prevRowIndex;\n if (active || wasActive) {\n this.updateElement();\n }\n }\n updateElement() {\n const el = this.element.nativeElement;\n this.renderer.setAttribute(el, 'tabIndex', this.isFocusable() && !this.logicalSlaveCell ? '0' : '-1');\n if (this.isFocused()) {\n if (this.focusGroup.isNavigable()) {\n this.focusGroup.focus();\n }\n else {\n if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {\n this.microtask(() => this.isFocused() && el.focus());\n }\n this.renderer.addClass(el, 'k-state-focused');\n }\n }\n else {\n this.renderer.removeClass(el, 'k-state-focused');\n }\n }\n microtask(callback) {\n this.zone.runOutsideAngular(() => Promise.resolve(null).then(callback));\n }\n registerChanges() {\n if (!this.logicalSlaveCell) {\n this.navigationService.registerCell(this);\n }\n }\n registerNoChanges() {\n if (!this.logicalSlaveCell) {\n this.navigationService.registerCellOnCurrentRow(this);\n }\n }\n isFocusable() {\n return this.navigationService.isCellFocusable(this);\n }\n isFocused() {\n return this.navigationService.isCellFocused(this);\n }\n}\nLogicalCellDirective.ɵfac = function LogicalCellDirective_Factory(t) { return new (t || LogicalCellDirective)(ɵngcc0.ɵɵdirectiveInject(FocusGroup), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 8)); };\nLogicalCellDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LogicalCellDirective, selectors: [[\"\", \"kendoGridLogicalCell\", \"\"]], hostVars: 2, hostBindings: function LogicalCellDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"aria-colindex\", ctx.ariaColIndex);\n } }, inputs: { logicalSlaveCell: \"logicalSlaveCell\", colSpan: \"colSpan\", rowSpan: \"rowSpan\", dataRowIndex: \"dataRowIndex\", detailExpandCell: \"detailExpandCell\", logicalColIndex: \"logicalColIndex\", logicalRowIndex: \"logicalRowIndex\", colIndex: \"colIndex\", groupItem: \"groupItem\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: FocusGroup,\n deps: [FocusRoot],\n useClass: FocusGroup\n }]), ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nLogicalCellDirective.ctorParameters = () => [\n { type: FocusGroup },\n { type: ElementRef },\n { type: ColumnInfoService },\n { type: IdService },\n { type: NavigationService },\n { type: Renderer2 },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }] }\n];\nLogicalCellDirective.propDecorators = {\n logicalColIndex: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n logicalSlaveCell: [{ type: Input }],\n colIndex: [{ type: Input }],\n colSpan: [{ type: Input }],\n rowSpan: [{ type: Input }],\n groupItem: [{ type: Input }],\n dataRowIndex: [{ type: Input }],\n dataItem: [{ type: Input }],\n detailExpandCell: [{ type: Input }],\n id: [{ type: HostBinding, args: ['attr.id',] }],\n ariaColIndex: [{ type: HostBinding, args: ['attr.aria-colindex',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LogicalCellDirective, [{\n type: Directive,\n args: [{\n providers: [{\n provide: FocusGroup,\n deps: [FocusRoot],\n useClass: FocusGroup\n }],\n selector: '[kendoGridLogicalCell]'\n }]\n }], function () { return [{ type: FocusGroup }, { type: ɵngcc0.ElementRef }, { type: ColumnInfoService }, { type: IdService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }] }]; }, { logicalSlaveCell: [{\n type: Input\n }], colSpan: [{\n type: Input\n }], rowSpan: [{\n type: Input\n }], dataRowIndex: [{\n type: Input\n }], detailExpandCell: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }], ariaColIndex: [{\n type: HostBinding,\n args: ['attr.aria-colindex']\n }], logicalColIndex: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], colIndex: [{\n type: Input\n }], groupItem: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\nlet id$1 = 0;\nfunction nextId$1() {\n return id$1++;\n}\n/**\n * @hidden\n */\nclass LogicalRowDirective {\n constructor(idService, navigation) {\n this.idService = idService;\n this.navigation = navigation;\n this.logicalSlaveRow = false;\n this.logicalSlaveCellsCount = 0;\n this.dataRowIndex = -1;\n this.uid = nextId$1();\n }\n get hostRole() {\n return this.logicalSlaveRow ? 'presentation' : 'row';\n }\n get ariaRowIndex() {\n if (this.navigation.enabled) {\n return this.logicalRowIndex + 1;\n }\n }\n get ariaOwns() {\n if (!this.navigation.enabled || this.logicalSlaveRow || this.logicalSlaveCellsCount === 0) {\n return undefined;\n }\n const ids = [];\n const total = this.logicalCellsCount + this.logicalSlaveCellsCount;\n for (let cellIndex = this.logicalCellsCount; cellIndex < total; cellIndex++) {\n ids.push(this.idService.cellId(this.logicalRowIndex, cellIndex));\n }\n return ids.join(' ');\n }\n ngOnChanges(changes) {\n if (!this.navigation.enabled || this.logicalSlaveRow) {\n return;\n }\n const indexChange = changes.logicalRowIndex;\n const logicalSlaveRowChange = changes.logicalSlaveRow;\n if (indexChange || logicalSlaveRowChange) {\n const index = indexChange && !indexChange.isFirstChange() ? indexChange.previousValue : this.logicalRowIndex;\n this.navigation.unregisterRow(index, this);\n this.navigation.registerRow(this);\n }\n else if (anyChanged(['dataRowIndex', 'dataItem'], changes)) {\n this.navigation.updateRow(this);\n }\n }\n ngOnDestroy() {\n this.navigation.unregisterRow(this.logicalRowIndex, this);\n }\n}\nLogicalRowDirective.ɵfac = function LogicalRowDirective_Factory(t) { return new (t || LogicalRowDirective)(ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(NavigationService)); };\nLogicalRowDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LogicalRowDirective, selectors: [[\"\", \"kendoGridLogicalRow\", \"\"]], hostVars: 3, hostBindings: function LogicalRowDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.hostRole)(\"aria-rowindex\", ctx.ariaRowIndex)(\"aria-owns\", ctx.ariaOwns);\n } }, inputs: { logicalSlaveRow: \"logicalSlaveRow\", logicalSlaveCellsCount: \"logicalSlaveCellsCount\", dataRowIndex: \"dataRowIndex\", logicalRowIndex: \"logicalRowIndex\", logicalCellsCount: \"logicalCellsCount\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nLogicalRowDirective.ctorParameters = () => [\n { type: IdService },\n { type: NavigationService }\n];\nLogicalRowDirective.propDecorators = {\n logicalRowIndex: [{ type: Input }],\n logicalSlaveRow: [{ type: Input }],\n logicalCellsCount: [{ type: Input }],\n logicalSlaveCellsCount: [{ type: Input }],\n dataRowIndex: [{ type: Input }],\n dataItem: [{ type: Input }],\n hostRole: [{ type: HostBinding, args: ['attr.role',] }],\n ariaRowIndex: [{ type: HostBinding, args: ['attr.aria-rowindex',] }],\n ariaOwns: [{ type: HostBinding, args: ['attr.aria-owns',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LogicalRowDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridLogicalRow]'\n }]\n }], function () { return [{ type: IdService }, { type: NavigationService }]; }, { logicalSlaveRow: [{\n type: Input\n }], logicalSlaveCellsCount: [{\n type: Input\n }], dataRowIndex: [{\n type: Input\n }], hostRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaRowIndex: [{\n type: HostBinding,\n args: ['attr.aria-rowindex']\n }], ariaOwns: [{\n type: HostBinding,\n args: ['attr.aria-owns']\n }], logicalRowIndex: [{\n type: Input\n }], logicalCellsCount: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:pipe-naming */\nconst FORMAT_REGEX = /\\{\\d+:?/;\n/**\n * @hidden\n */\nclass FieldAccessorPipe {\n constructor(intlService) {\n this.intlService = intlService;\n }\n transform(dataItem, fieldName, format) {\n if (!isNullOrEmptyString(fieldName)) {\n const value = getter(fieldName)(dataItem);\n if (!isNullOrEmptyString(format)) {\n return this.formatValue(format, value);\n }\n return value;\n }\n return dataItem;\n }\n formatValue(format, value) {\n const intl = this.intlService;\n if (isString(format) && format.match(FORMAT_REGEX)) {\n return intl.format(format, value);\n }\n return intl.toString(value, format);\n }\n}\nFieldAccessorPipe.ɵfac = function FieldAccessorPipe_Factory(t) { return new (t || FieldAccessorPipe)(ɵngcc0.ɵɵdirectiveInject(ɵngcc10.IntlService)); };\nFieldAccessorPipe.ɵpipe = ɵngcc0.ɵɵdefinePipe({ name: \"valueOf\", type: FieldAccessorPipe, pure: false });\n/** @nocollapse */\nFieldAccessorPipe.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FieldAccessorPipe, [{\n type: Pipe,\n args: [{\n name: 'valueOf',\n pure: false\n }]\n }], function () { return [{ type: ɵngcc10.IntlService }]; }, null); })();\n\n/**\n * @hidden\n */\nconst columnsToResize = ({ columns }) => Math.max(1, resizableColumns(columns).length);\n/**\n * @hidden\n */\nconst row = selector => element => element.querySelector(selector);\n/**\n * @hidden\n */\nconst headerRow = index => element => element.querySelectorAll('thead>tr')[index];\n/**\n * @hidden\n */\nconst cell = (index, selector = 'td') => element => element.querySelectorAll(`${selector}:not(.k-group-cell):not(.k-hierarchy-cell)`)[index];\n/**\n * @hidden\n */\nconst offsetWidth = element => element.offsetWidth;\n/**\n * @hidden\n */\nconst pipe = (...fns) => data => fns.reduce((state$$1, fn) => state$$1 ? fn(state$$1) : 0, data);\n/**\n * @hidden\n */\nclass TableDirective {\n constructor(element, renderer, service, zone, cdr) {\n this.element = element;\n this.renderer = renderer;\n this.service = service;\n this.zone = zone;\n this.cdr = cdr;\n this.locked = false;\n this.firstResize = false;\n }\n get minWidth() {\n return this.firstResize ? 0 : null;\n }\n ngOnInit() {\n const obs = this.service\n .changes.pipe(filter(e => this.locked === e.locked));\n this.subscription = obs.pipe(filter(e => e.type === 'start'), tap(this.initState.bind(this)), map(columnsToResize), switchMap((take$$1) => obs.pipe(filter(e => e.type === 'resizeTable'), map(e => e.delta), bufferCount(take$$1)))).subscribe(this.resize.bind(this));\n this.autoFitSubscription = this.service\n .registerTable({\n autoFit: this.autoFitObservable.bind(this),\n locked: this.locked\n });\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.autoFitSubscription) {\n this.autoFitSubscription();\n this.autoFitSubscription = null;\n }\n }\n initState() {\n this.firstResize = true;\n if (!this.virtualColumns || this.locked) {\n this.originalWidth = offsetWidth(this.element.nativeElement);\n }\n }\n resize(deltas) {\n if (!this.virtualColumns || this.locked) {\n const delta = deltas.reduce((sum, item) => sum + item, 0);\n const width = this.originalWidth + delta;\n this.renderer.setStyle(this.element.nativeElement, 'width', width + 'px');\n }\n this.cdr.detectChanges();\n }\n autoFitObservable(columnInfo) {\n return Observable.create(observer => {\n this.zone.runOutsideAngular(() => {\n this.renderer.addClass(this.element.nativeElement, 'k-autofitting');\n this.cdr.detectChanges();\n const widths = columnInfo.map(this.measureColumn.bind(this));\n this.renderer.removeClass(this.element.nativeElement, 'k-autofitting');\n observer.next(widths);\n });\n });\n }\n measureColumn(info) {\n const dom = this.element.nativeElement;\n const header = pipe(headerRow(info.level), cell(info.headerIndex, 'th'), offsetWidth)(dom);\n let data = 0;\n if (!info.isParentSpan || (info.isParentSpan && info.isLastInSpan)) {\n data = pipe(row('tbody>tr:not(.k-grouping-row):not(.k-grid-norecords)'), cell(info.index), offsetWidth)(dom);\n }\n const footer = pipe(row('tfoot>tr'), cell(info.index), offsetWidth)(dom);\n return Math.max(header, data, footer);\n }\n}\nTableDirective.ɵfac = function TableDirective_Factory(t) { return new (t || TableDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nTableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TableDirective, selectors: [[\"table\"]], hostVars: 2, hostBindings: function TableDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"min-width\", ctx.minWidth);\n } }, inputs: { locked: \"locked\", virtualColumns: \"virtualColumns\" } });\n/** @nocollapse */\nTableDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ColumnResizingService },\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\nTableDirective.propDecorators = {\n locked: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n minWidth: [{ type: HostBinding, args: ['style.min-width',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TableDirective, [{\n type: Directive,\n args: [{\n selector: 'table' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ColumnResizingService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, { locked: [{\n type: Input\n }], minWidth: [{\n type: HostBinding,\n args: ['style.min-width']\n }], virtualColumns: [{\n type: Input\n }] }); })();\n\nconst exportedModules = [\n ColumnComponent,\n ColumnGroupComponent,\n LogicalCellDirective,\n LogicalRowDirective,\n FocusableDirective,\n FooterTemplateDirective,\n ColGroupComponent,\n ResizableContainerDirective,\n TemplateContextDirective,\n FieldAccessorPipe,\n DetailTemplateDirective,\n SpanColumnComponent,\n TableDirective,\n LoadingComponent\n];\n/**\n * @hidden\n */\nclass SharedModule {\n static exports() {\n return [\n ColumnComponent,\n SpanColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n DetailTemplateDirective,\n FocusableDirective\n ];\n }\n}\nSharedModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedModule_Factory(t) { return new (t || SharedModule)(); }, imports: [[CommonModule], DraggableModule, EventsModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, TableDirective, LoadingComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, TableDirective, LoadingComponent, DraggableModule, EventsModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules],\n exports: [exportedModules, DraggableModule, EventsModule],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the `Contains` (**Contains**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass ContainsFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"contains\", localization); }\n}\nContainsFilterOperatorComponent.ɵfac = function ContainsFilterOperatorComponent_Factory(t) { return new (t || ContainsFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nContainsFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ContainsFilterOperatorComponent, selectors: [[\"kendo-filter-contains-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => ContainsFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ContainsFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nContainsFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ContainsFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => ContainsFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-contains-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `DoesNotContain` (**Does not contain**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass DoesNotContainFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"doesnotcontain\", localization); }\n}\nDoesNotContainFilterOperatorComponent.ɵfac = function DoesNotContainFilterOperatorComponent_Factory(t) { return new (t || DoesNotContainFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDoesNotContainFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DoesNotContainFilterOperatorComponent, selectors: [[\"kendo-filter-not-contains-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => DoesNotContainFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DoesNotContainFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDoesNotContainFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DoesNotContainFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => DoesNotContainFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-not-contains-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `EndsWith` (**Ends with**) string filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass EndsWithFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"endswith\", localization); }\n}\nEndsWithFilterOperatorComponent.ɵfac = function EndsWithFilterOperatorComponent_Factory(t) { return new (t || EndsWithFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nEndsWithFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: EndsWithFilterOperatorComponent, selectors: [[\"kendo-filter-endswith-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EndsWithFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EndsWithFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nEndsWithFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EndsWithFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EndsWithFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-endswith-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `Equal` (**Is equal to**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass EqualFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"eq\", localization); }\n}\nEqualFilterOperatorComponent.ɵfac = function EqualFilterOperatorComponent_Factory(t) { return new (t || EqualFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nEqualFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: EqualFilterOperatorComponent, selectors: [[\"kendo-filter-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EqualFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EqualFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nEqualFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EqualFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EqualFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsEmpty` (**Is empty**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsEmptyFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isempty\", localization); }\n}\nIsEmptyFilterOperatorComponent.ɵfac = function IsEmptyFilterOperatorComponent_Factory(t) { return new (t || IsEmptyFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsEmptyFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsEmptyFilterOperatorComponent, selectors: [[\"kendo-filter-isempty-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsEmptyFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsEmptyFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsEmptyFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsEmptyFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsEmptyFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isempty-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNotEmpty` (**Is not empty**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNotEmptyFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnotempty\", localization); }\n}\nIsNotEmptyFilterOperatorComponent.ɵfac = function IsNotEmptyFilterOperatorComponent_Factory(t) { return new (t || IsNotEmptyFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNotEmptyFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNotEmptyFilterOperatorComponent, selectors: [[\"kendo-filter-isnotempty-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotEmptyFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNotEmptyFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNotEmptyFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNotEmptyFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotEmptyFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnotempty-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNotNull` (**Is not null**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNotNullFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnotnull\", localization); }\n}\nIsNotNullFilterOperatorComponent.ɵfac = function IsNotNullFilterOperatorComponent_Factory(t) { return new (t || IsNotNullFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNotNullFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNotNullFilterOperatorComponent, selectors: [[\"kendo-filter-isnotnull-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotNullFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNotNullFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNotNullFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNotNullFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotNullFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnotnull-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNull` (**Is null**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNullFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnull\", localization); }\n}\nIsNullFilterOperatorComponent.ɵfac = function IsNullFilterOperatorComponent_Factory(t) { return new (t || IsNullFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNullFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNullFilterOperatorComponent, selectors: [[\"kendo-filter-isnull-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNullFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNullFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNullFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNullFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNullFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnull-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `NotEqual` (**Is not equal to**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass NotEqualFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"neq\", localization); }\n}\nNotEqualFilterOperatorComponent.ɵfac = function NotEqualFilterOperatorComponent_Factory(t) { return new (t || NotEqualFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNotEqualFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NotEqualFilterOperatorComponent, selectors: [[\"kendo-filter-neq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => NotEqualFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NotEqualFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nNotEqualFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NotEqualFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => NotEqualFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-neq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `StartsWith` (**Starts with**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass StartsWithFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"startswith\", localization); }\n}\nStartsWithFilterOperatorComponent.ɵfac = function StartsWithFilterOperatorComponent_Factory(t) { return new (t || StartsWithFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStartsWithFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StartsWithFilterOperatorComponent, selectors: [[\"kendo-filter-startswith-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => StartsWithFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function StartsWithFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nStartsWithFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StartsWithFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => StartsWithFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-startswith-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Greater` (**Is greater than**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass GreaterFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"gt\", localization); }\n}\nGreaterFilterOperatorComponent.ɵfac = function GreaterFilterOperatorComponent_Factory(t) { return new (t || GreaterFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGreaterFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GreaterFilterOperatorComponent, selectors: [[\"kendo-filter-gt-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function GreaterFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nGreaterFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GreaterFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-gt-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `GreaterOrEqualTo` (**Is greater than or equal to**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass GreaterOrEqualToFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"gte\", localization); }\n}\nGreaterOrEqualToFilterOperatorComponent.ɵfac = function GreaterOrEqualToFilterOperatorComponent_Factory(t) { return new (t || GreaterOrEqualToFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGreaterOrEqualToFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GreaterOrEqualToFilterOperatorComponent, selectors: [[\"kendo-filter-gte-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterOrEqualToFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function GreaterOrEqualToFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nGreaterOrEqualToFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GreaterOrEqualToFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterOrEqualToFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-gte-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Less` (**Is less than**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass LessFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"lt\", localization); }\n}\nLessFilterOperatorComponent.ɵfac = function LessFilterOperatorComponent_Factory(t) { return new (t || LessFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLessFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LessFilterOperatorComponent, selectors: [[\"kendo-filter-lt-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LessFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nLessFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LessFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-lt-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `LessOrEqualTo` (**Is less than or equal to**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass LessOrEqualToFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"lte\", localization); }\n}\nLessOrEqualToFilterOperatorComponent.ɵfac = function LessOrEqualToFilterOperatorComponent_Factory(t) { return new (t || LessOrEqualToFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLessOrEqualToFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LessOrEqualToFilterOperatorComponent, selectors: [[\"kendo-filter-lte-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessOrEqualToFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LessOrEqualToFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nLessOrEqualToFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LessOrEqualToFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessOrEqualToFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-lte-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Greater` (**Is after**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass AfterFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"after\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"gt\"\n };\n }\n}\nAfterFilterOperatorComponent.ɵfac = function AfterFilterOperatorComponent_Factory(t) { return new (t || AfterFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAfterFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AfterFilterOperatorComponent, selectors: [[\"kendo-filter-after-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AfterFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nAfterFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AfterFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-after-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `GreaterOrEqualTo` (**Is after or equal to**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass AfterEqFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"after-eq\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"gte\"\n };\n }\n}\nAfterEqFilterOperatorComponent.ɵfac = function AfterEqFilterOperatorComponent_Factory(t) { return new (t || AfterEqFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAfterEqFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AfterEqFilterOperatorComponent, selectors: [[\"kendo-filter-after-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterEqFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AfterEqFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nAfterEqFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AfterEqFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterEqFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-after-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `LessOrEqualTo` (**Is before or equal to**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass BeforeEqFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"before-eq\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"lte\"\n };\n }\n}\nBeforeEqFilterOperatorComponent.ɵfac = function BeforeEqFilterOperatorComponent_Factory(t) { return new (t || BeforeEqFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBeforeEqFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BeforeEqFilterOperatorComponent, selectors: [[\"kendo-filter-before-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeEqFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function BeforeEqFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nBeforeEqFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BeforeEqFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeEqFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-before-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Less then` (**Is before**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass BeforeFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"before\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"lt\"\n };\n }\n}\nBeforeFilterOperatorComponent.ɵfac = function BeforeFilterOperatorComponent_Factory(t) { return new (t || BeforeFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBeforeFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BeforeFilterOperatorComponent, selectors: [[\"kendo-filter-before-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function BeforeFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nBeforeFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BeforeFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-before-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\nconst FILTER_OPERATORS = [\n FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent\n];\nconst importedModules = [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule,\n SharedModule\n];\nconst COMPONENTS = [\n FilterInputDirective\n];\n/**\n * @hidden\n */\nclass SharedFilterModule {\n static exports() {\n return [\n ...FILTER_OPERATORS\n ];\n }\n}\nSharedFilterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedFilterModule });\nSharedFilterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedFilterModule_Factory(t) { return new (t || SharedFilterModule)(); }, imports: [[...importedModules], CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule, SharedModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedFilterModule, { declarations: [FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective], imports: [CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule, SharedModule], exports: [FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule, SharedModule, FilterInputDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedFilterModule, [{\n type: NgModule,\n args: [{\n declarations: [FILTER_OPERATORS, COMPONENTS],\n exports: [FILTER_OPERATORS, importedModules, COMPONENTS],\n imports: [...importedModules]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass FilterHostDirective {\n constructor(host, resolver) {\n this.host = host;\n this.resolver = resolver;\n }\n ngOnInit() {\n this.component = this.host.createComponent(this.resolver.resolveComponentFactory(this.componentType()));\n this.initComponent({\n column: this.column,\n filter: this.filter\n });\n }\n ngOnDestroy() {\n if (this.component) {\n this.component.destroy();\n this.component = null;\n }\n }\n ngOnChanges(changes) {\n if (anyChanged([\"column\", \"filter\"], changes)) {\n this.initComponent({\n column: this.column,\n filter: this.filter\n });\n }\n }\n initComponent({ column, filter: filter$$1 }) {\n const instance = this.component.instance;\n instance.column = column;\n instance.filter = filter$$1;\n }\n}\nFilterHostDirective.ɵfac = function FilterHostDirective_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterHostDirective, inputs: { column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nFilterHostDirective.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n\n\n/**\n * @hidden\n *\n * > List the following components in the GridModule as `entryComponents`.\n */\nconst filterComponentFactory = (type) => ({\n \"boolean\": BooleanFilterCellComponent,\n \"date\": DateFilterCellComponent,\n \"numeric\": NumericFilterCellComponent,\n \"text\": StringFilterCellComponent\n}[type]);\n\n/**\n * @hidden\n */\nclass FilterCellHostDirective extends FilterHostDirective {\n constructor(host, resolver) {\n super(host, resolver);\n }\n componentType() {\n if (!isNullOrEmptyString(this.column.filter)) {\n return filterComponentFactory(this.column.filter);\n }\n return StringFilterCellComponent;\n }\n}\nFilterCellHostDirective.ɵfac = function FilterCellHostDirective_Factory(t) { return new (t || FilterCellHostDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver)); };\nFilterCellHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterCellHostDirective, selectors: [[\"\", \"kendoFilterCellHost\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFilterCellHostDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ComponentFactoryResolver }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellHostDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterCellHost]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ComponentFactoryResolver }]; }, null); })();\n\nconst INTERNAL_COMPONENTS = [\n FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n FilterCellHostDirective,\n FilterCellWrapperComponent,\n DateFilterCellComponent\n];\nconst ENTRY_COMPONENTS = [\n StringFilterCellComponent,\n NumericFilterCellComponent,\n BooleanFilterCellComponent,\n DateFilterCellComponent\n];\n/**\n * @hidden\n */\nclass RowFilterModule {\n static exports() {\n return [\n FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n FilterCellOperatorsComponent,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n DateFilterCellComponent,\n SharedFilterModule.exports()\n ];\n }\n}\nRowFilterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: RowFilterModule });\nRowFilterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function RowFilterModule_Factory(t) { return new (t || RowFilterModule)(); }, imports: [[SharedFilterModule], SharedFilterModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RowFilterModule, { declarations: [FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent], imports: [SharedFilterModule], exports: [FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, SharedFilterModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RowFilterModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS],\n entryComponents: ENTRY_COMPONENTS,\n exports: [INTERNAL_COMPONENTS, SharedFilterModule],\n imports: [SharedFilterModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst normalizeSettings = ({ buttonCount = 10, info = true, type = 'numeric', pageSizes = false, previousNext = true }) => ({\n buttonCount,\n info,\n pageSizes: pageSizes === true ? [5, 10, 20] : pageSizes,\n previousNext,\n type\n});\n/**\n * @hidden\n */\nconst normalize = (settings) => normalizeSettings(settings === true ? {} : settings);\n\n/**\n * @hidden\n */\nclass PagerComponent {\n constructor(pagerContext) {\n this.pagerContext = pagerContext;\n this.total = 0;\n this.skip = 1;\n this.pageChange = new EventEmitter();\n this.settings = normalize({});\n this._templateContext = {};\n }\n set options(value) {\n this.settings = normalize(value);\n }\n get pagerWrapClass() {\n return true;\n }\n get gridPagerClass() {\n return true;\n }\n get widgetClass() {\n return true;\n }\n get totalPages() {\n return Math.ceil((this.total || 0) / this.pageSize);\n }\n get currentPage() {\n return Math.floor((this.skip || 0) / this.pageSize) + 1;\n }\n get templateContext() {\n const context = this._templateContext;\n context.totalPages = this.totalPages;\n context.total = this.total;\n context.skip = this.skip;\n context.pageSize = this.pageSize;\n context.currentPage = this.currentPage;\n return context;\n }\n ngOnInit() {\n this.pageChangeSubscription = this.pagerContext.pageChange.subscribe(this.changePage.bind(this));\n }\n ngOnChanges(changes) {\n if (anyChanged(['pageSize', 'skip', 'total'], changes, false)) {\n this.pagerContext.notifyChanges({\n pageSize: this.pageSize,\n skip: this.skip,\n total: this.total\n });\n }\n }\n ngOnDestroy() {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n }\n changePage(event) {\n this.pageChange.emit(event);\n }\n}\nPagerComponent.ɵfac = function PagerComponent_Factory(t) { return new (t || PagerComponent)(ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerComponent, selectors: [[\"kendo-pager\"]], hostVars: 6, hostBindings: function PagerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-wrap\", ctx.pagerWrapClass)(\"k-grid-pager\", ctx.gridPagerClass)(\"k-widget\", ctx.widgetClass);\n } }, inputs: { total: \"total\", skip: \"skip\", options: \"options\", pageSize: \"pageSize\", template: \"template\" }, outputs: { pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [[3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\", 4, \"ngIf\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"buttonCount\", 4, \"ngIf\"], [3, \"pageSizes\", 4, \"ngIf\"], [3, \"buttonCount\"], [3, \"pageSizes\"]], template: function PagerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, PagerComponent_ng_container_0_Template, 1, 2, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, PagerComponent_ng_container_1_Template, 7, 6, \"ng-container\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template == null ? null : ctx.template.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx.template == null ? null : ctx.template.templateRef));\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet, PagerPrevButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerNextButtonsComponent, PagerInfoComponent, PagerPageSizesComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nPagerComponent.ctorParameters = () => [\n { type: PagerContextService }\n];\nPagerComponent.propDecorators = {\n total: [{ type: Input }],\n skip: [{ type: Input }],\n pageSize: [{ type: Input }],\n options: [{ type: Input }],\n template: [{ type: Input }],\n pageChange: [{ type: Output }],\n pagerWrapClass: [{ type: HostBinding, args: ['class.k-pager-wrap',] }],\n gridPagerClass: [{ type: HostBinding, args: ['class.k-grid-pager',] }],\n widgetClass: [{ type: HostBinding, args: ['class.k-widget',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pager',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: PagerContextService }]; }, { total: [{\n type: Input\n }], skip: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], options: [{\n type: Input\n }], pagerWrapClass: [{\n type: HostBinding,\n args: ['class.k-pager-wrap']\n }], gridPagerClass: [{\n type: HostBinding,\n args: ['class.k-grid-pager']\n }], widgetClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }], pageSize: [{\n type: Input\n }], template: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n this.localization = localization;\n this.pagerContext = pagerContext;\n this.cd = cd;\n this.total = this.pagerContext.total;\n this.skip = this.pagerContext.skip;\n this.pageSize = this.pagerContext.pageSize;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerElementComponent\n */\n get currentPage() {\n return Math.floor((this.skip || 0) / this.pageSize) + 1;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerElementComponent\n */\n get totalPages() {\n return Math.ceil((this.total || 0) / this.pageSize);\n }\n /**\n * @hidden\n *\n * @param {string} key\n * @returns {string}\n *\n * @memberOf PagerElementComponent\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n *\n * @param {number} page\n *\n * @memberOf PagerElementComponent\n */\n changePage(page) {\n this.pagerContext.changePage(page);\n return false;\n }\n /**\n * @hidden\n *\n * @memberOf PagerElementComponent\n */\n ngOnInit() {\n this.subscriptions = this.pagerContext.changes.subscribe(this.onChanges.bind(this));\n this.subscriptions.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n}\nPagerElementComponent.ɵfac = function PagerElementComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPagerElementComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PagerElementComponent });\n\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays buttons for navigating to the first and to the previous page ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerPrevButtonsComponent extends PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n super(localization, pagerContext, cd);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerPrevButtonsComponent\n */\n get disabled() {\n return this.currentPage === 1 || !this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerPrevButtonsComponent.ɵfac = function PagerPrevButtonsComponent_Factory(t) { return new (t || PagerPrevButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerPrevButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerPrevButtonsComponent, selectors: [[\"kendo-pager-prev-buttons\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 14, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 3, \"title\", \"ngClass\", \"click\"], [3, \"ngClass\"]], template: function PagerPrevButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerPrevButtonsComponent_Template_a_click_0_listener() { return ctx.currentPage !== 1 ? ctx.changePage(0) : false; });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerPrevButtonsComponent_Template_a_click_2_listener() { return ctx.currentPage !== 1 ? ctx.changePage(ctx.currentPage - 2) : false; });\n ɵngcc0.ɵɵelement(3, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerFirstPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(8, _c130, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(10, _c131));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerFirstPage\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerPreviousPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(11, _c132, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c133));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerPreviousPage\"));\n } }, directives: [ɵngcc5.NgClass], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerPrevButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerPrevButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-prev-buttons',\n template: `\n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n// tslint:disable: no-access-missing-member\n/**\n * Displays buttons for navigating to the next and to the last page ([see example]({% slug paging_grid %}#toc-pager-template)).\n */\nclass PagerNextButtonsComponent extends PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n super(localization, pagerContext, cd);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerNextButtonsComponent\n */\n get disabled() {\n return this.currentPage === this.totalPages || !this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerNextButtonsComponent.ɵfac = function PagerNextButtonsComponent_Factory(t) { return new (t || PagerNextButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerNextButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerNextButtonsComponent, selectors: [[\"kendo-pager-next-buttons\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 14, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 3, \"title\", \"ngClass\", \"click\"], [3, \"ngClass\"]], template: function PagerNextButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNextButtonsComponent_Template_a_click_0_listener() { return ctx.currentPage !== ctx.totalPages ? ctx.changePage(ctx.currentPage) : false; });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNextButtonsComponent_Template_a_click_2_listener() { return ctx.currentPage !== ctx.totalPages ? ctx.changePage(ctx.totalPages - 1) : false; });\n ɵngcc0.ɵɵelement(3, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerNextPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(8, _c132, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(10, _c134));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerNextPage\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerLastPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(11, _c135, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c136));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerLastPage\"));\n } }, directives: [ɵngcc5.NgClass], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerNextButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerNextButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-next-buttons',\n template: `\n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/**\n * Displays numeric buttons to enable navigation between the pages.\n */\nclass PagerNumericButtonsComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number[]}\n * @memberOf PagerNumericButtonsComponent\n */\n get buttons() {\n let result = [];\n for (let idx = this.start; idx <= this.end; idx++) {\n result.push(idx);\n }\n return result;\n }\n /**\n * @hidden\n */\n get end() {\n return Math.min((this.start + this.buttonCount) - 1, this.totalPages);\n }\n /**\n * @hidden\n */\n get start() {\n const page = this.currentPage;\n const buttonCount = this.buttonCount;\n if (page > buttonCount) {\n const reminder = (page % buttonCount);\n return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;\n }\n return 1;\n }\n /**\n * @hidden\n */\n pageLabel(num) {\n const pageText = this.textFor('pagerPage');\n if (pageText) {\n return pageText + ' ' + num;\n }\n return num.toString();\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerNumericButtonsComponent.ɵfac = function PagerNumericButtonsComponent_Factory(t) { return new (t || PagerNumericButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerNumericButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerNumericButtonsComponent, selectors: [[\"kendo-pager-numeric-buttons\"]], inputs: { buttonCount: \"buttonCount\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 5, consts: [[3, \"ngClass\"], [4, \"ngIf\"], [4, \"ngFor\", \"ngForOf\"], [\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-link\", 3, \"click\"], [\"href\", \"#\", \"tabindex\", \"-1\", 3, \"ngClass\", \"click\"]], template: function PagerNumericButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, PagerNumericButtonsComponent_li_1_Template, 3, 1, \"li\", 1);\n ɵngcc0.ɵɵtemplate(2, PagerNumericButtonsComponent_li_2_Template, 3, 5, \"li\", 2);\n ɵngcc0.ɵɵtemplate(3, PagerNumericButtonsComponent_li_3_Template, 3, 1, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(4, _c138));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.start > 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.buttons);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.end < ctx.totalPages);\n } }, directives: [ɵngcc5.NgClass, ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerNumericButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerNumericButtonsComponent.propDecorators = {\n buttonCount: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerNumericButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-numeric-buttons',\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { buttonCount: [{\n type: Input\n }] }); })();\n\n/**\n * Displays an input element which allows the typing and rendering of page numbers.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass PagerInputComponent extends PagerElementComponent {\n constructor(localization, pagerContext, zone, cd) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n this.zone = zone;\n /**\n * @hidden\n *\n * @param {string} value\n *\n * @memberOf PagerInputComponent\n */\n this.handleKeyDown = (event) => {\n let incomingValue = this.numericInput.value || this.current;\n if (event.keyCode === Keys.Enter) {\n event.preventDefault();\n if (incomingValue !== this.current) {\n this.zone.run(() => {\n this.changePage(incomingValue - 1);\n });\n }\n }\n };\n /**\n * @hidden\n *\n * @param {string} value\n *\n * @memberOf PagerInputComponent\n */\n this.handleBlur = () => {\n const inputValue = this.numericInput.value;\n if (!inputValue) {\n this.numericInput.writeValue(this.current);\n return;\n }\n if (inputValue !== this.current) {\n this.zone.run(() => {\n this.changePage(inputValue - 1);\n });\n }\n };\n }\n /**\n * @hidden\n */\n get current() {\n return this.hasPages ? this.currentPage : 0;\n }\n get hasPages() {\n return this.totalPages !== 0;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerInputComponent.ɵfac = function PagerInputComponent_Factory(t) { return new (t || PagerInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerInputComponent, selectors: [[\"kendo-pager-input\"]], viewQuery: function PagerInputComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(NumericTextBoxComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericInput = _t.first);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 17, consts: [[3, \"ngClass\"], [\"format\", \"n0\", 3, \"spinners\", \"decimals\", \"disabled\", \"value\", \"min\", \"max\", \"autoCorrect\", \"title\", \"kendoEventsOutsideAngular\"]], template: function PagerInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c139));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"pagerPage\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"spinners\", false)(\"decimals\", 0)(\"disabled\", !ctx.hasPages)(\"value\", ctx.current)(\"min\", ctx.hasPages ? 1 : 0)(\"max\", ctx.totalPages)(\"autoCorrect\", true)(\"title\", ctx.textFor(\"pagerPageNumberInputTitle\"))(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(14, _c140, ctx.handleKeyDown, ctx.handleBlur));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate2(\" \", ctx.textFor(\"pagerOf\"), \" \", ctx.totalPages, \" \");\n } }, directives: [ɵngcc5.NgClass, ɵngcc6.NumericTextBoxComponent, ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n/** @nocollapse */\nPagerInputComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\nPagerInputComponent.propDecorators = {\n numericInput: [{ type: ViewChild, args: [NumericTextBoxComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pager-input',\n template: `\n \n {{textFor('pagerPage')}}\n \n \n {{textFor('pagerOf')}} {{totalPages}}\n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, { numericInput: [{\n type: ViewChild,\n args: [NumericTextBoxComponent]\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays information about the current page and the total number of records ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerInfoComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerInfoComponent\n */\n get maxItems() {\n return Math.min(this.currentPage * this.pageSize, this.total);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerInfoComponent\n */\n get currentPageText() {\n return this.total ?\n (this.currentPage - 1) * this.pageSize + 1 :\n 0;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerInfoComponent\n */\n get classes() {\n return true;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerInfoComponent.ɵfac = function PagerInfoComponent_Factory(t) { return new (t || PagerInfoComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerInfoComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerInfoComponent, selectors: [[\"kendo-pager-info\"]], hostVars: 4, hostBindings: function PagerInfoComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-info\", ctx.classes)(\"k-label\", ctx.classes);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 5, template: function PagerInfoComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n } if (rf & 2) {\n ɵngcc0.ɵɵtextInterpolate5(\"\", ctx.currentPageText, \" - \", ctx.maxItems, \" \", ctx.textFor(\"pagerOf\"), \" \", ctx.total, \" \", ctx.textFor(\"pagerItems\"), \"\");\n } }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerInfoComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerInfoComponent.propDecorators = {\n classes: [{ type: HostBinding, args: [\"class.k-pager-info\",] }, { type: HostBinding, args: [\"class.k-label\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerInfoComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-info',\n template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { classes: [{\n type: HostBinding,\n args: [\"class.k-pager-info\"]\n }, {\n type: HostBinding,\n args: [\"class.k-label\"]\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays a drop-down list for the page size selection ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerPageSizesComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n this._pageSizes = [];\n }\n get pageSizes() {\n return this._pageSizes;\n }\n /**\n * The page sizes collection. Can be an Array of numbers and/or PageSizeItem objects.\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * public pageSize = 2;\n * public pagesizes = [{text: 'One', value: 1}, {text: 'Two', value: 2}, {text: 'All', value : 'all'}];\n * }\n *\n * const products = [{\n * 'ProductID' : 1,\n * 'ProductName' : \"Chai\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 1,\n * 'QuantityPerUnit' : \"10 boxes x 20 bags\",\n * 'UnitPrice' : 18.0000,\n * 'UnitsInStock' : 39,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 10,\n * 'Discontinued' : false\n *\n * }, {\n * 'ProductID' : 2,\n * 'ProductName' : \"Chang\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 1,\n * 'QuantityPerUnit' : \"24 - 12 oz bottles\",\n * 'UnitPrice' : 19.0000,\n * 'UnitsInStock' : 17,\n * 'UnitsOnOrder' : 40,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 3,\n * 'ProductName' : \"Aniseed Syrup\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"12 - 550 ml bottles\",\n * 'UnitPrice' : 10.0000,\n * 'UnitsInStock' : 13,\n * 'UnitsOnOrder' : 70,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 4,\n * 'ProductName' : \"Chef Anton\\'s Cajun Seasoning\",\n * 'SupplierID' : 2,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"48 - 6 oz jars\",\n * 'UnitPrice' : 22.0000,\n * 'UnitsInStock' : 53,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 0,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 5,\n * 'ProductName' : \"Chef Anton\\'s Gumbo Mix\",\n * 'SupplierID' : 2,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"36 boxes\",\n * 'UnitPrice' : 21.3500,\n * 'UnitsInStock' : 0,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 0,\n * 'Discontinued' : true\n * }, {\n * 'ProductID' : 6,\n * 'ProductName' : \"Grandma\\'s Boysenberry Spread\",\n * 'SupplierID' : 3,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"12 - 8 oz jars\",\n * 'UnitPrice' : 25.0000,\n * 'UnitsInStock' : 120,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }];\n * ```\n */\n set pageSizes(pageSizes) {\n const normalizedItems = [];\n pageSizes.forEach(item => {\n if (typeof item === 'number') {\n normalizedItems.push({\n text: item.toString(),\n value: item\n });\n }\n else {\n normalizedItems.push(item);\n }\n });\n this._pageSizes = normalizedItems;\n }\n /**\n * @hidden\n *\n * @readonly\n */\n get classes() {\n return true;\n }\n /**\n * @hidden\n *\n * @readonly\n */\n get showInitialPageSize() {\n return this.pageSizes\n .filter(item => {\n if (typeof item.value === 'number') {\n return item.value === Number(this.pageSize);\n }\n return this.total === Number(this.pageSize);\n })\n .length === 0;\n }\n /**\n * @hidden\n */\n pageSizeChange(value) {\n this.pageSize = parseInt(value, 10);\n this.pagerContext.changePageSize(this.pageSize);\n }\n /**\n * @hidden\n */\n getValue(page) {\n return typeof page.value === 'number' ? page.value : this.total;\n }\n /**\n * @hidden\n */\n getSelectedState(page) {\n if (typeof page.value === 'number') {\n return page.value === this.pageSize ? true : undefined;\n }\n return this.pageSize === this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;\n this.cd.markForCheck();\n }\n}\nPagerPageSizesComponent.ɵfac = function PagerPageSizesComponent_Factory(t) { return new (t || PagerPageSizesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerPageSizesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerPageSizesComponent, selectors: [[\"kendo-pager-page-sizes\"]], hostVars: 4, hostBindings: function PagerPageSizesComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-sizes\", ctx.classes)(\"k-label\", ctx.classes);\n } }, inputs: { pageSizes: \"pageSizes\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 5, vars: 4, consts: [[3, \"change\"], [\"select\", \"\"], [3, \"value\", 4, \"ngIf\"], [3, \"value\", \"selected\", 4, \"ngFor\", \"ngForOf\"], [3, \"value\"], [3, \"value\", \"selected\"]], template: function PagerPageSizesComponent_Template(rf, ctx) { if (rf & 1) {\n const _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"select\", 0, 1);\n ɵngcc0.ɵɵlistener(\"change\", function PagerPageSizesComponent_Template_select_change_0_listener() { ɵngcc0.ɵɵrestoreView(_r4); const _r0 = ɵngcc0.ɵɵreference(1); return ctx.pageSizeChange(_r0.value); });\n ɵngcc0.ɵɵtemplate(2, PagerPageSizesComponent_option_2_Template, 2, 2, \"option\", 2);\n ɵngcc0.ɵɵtemplate(3, PagerPageSizesComponent_option_3_Template, 2, 3, \"option\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtext(4);\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerItemsPerPage\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showInitialPageSize);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.pageSizes);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"pagerItemsPerPage\"), \" \");\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerPageSizesComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerPageSizesComponent.propDecorators = {\n pageSizes: [{ type: Input }],\n classes: [{ type: HostBinding, args: ['class.k-pager-sizes',] }, { type: HostBinding, args: ['class.k-label',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerPageSizesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-page-sizes',\n template: `\n \n {{ textFor('pagerItemsPerPage') }}\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { pageSizes: [{\n type: Input\n }], classes: [{\n type: HostBinding,\n args: ['class.k-pager-sizes']\n }, {\n type: HostBinding,\n args: ['class.k-label']\n }] }); })();\n\nconst importedModules$1 = [\n CommonModule,\n InputsModule,\n SharedModule\n];\nconst INTERNAL_COMPONENTS$1 = [\n PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective\n];\n/**\n * @hidden\n */\nclass PagerModule {\n static exports() {\n return [\n PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective\n ];\n }\n}\nPagerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PagerModule });\nPagerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PagerModule_Factory(t) { return new (t || PagerModule)(); }, imports: [[...importedModules$1]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PagerModule, { declarations: [PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective], imports: [CommonModule,\n InputsModule, SharedModule], exports: [PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS$1],\n exports: [INTERNAL_COMPONENTS$1],\n imports: [...importedModules$1]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass GroupHeaderComponent {\n constructor(groupsService, groupInfoService) {\n this.groupsService = groupsService;\n this.groupInfoService = groupInfoService;\n this.skipGroupDecoration = false;\n this.hasDetails = false;\n this.totalColumnsCount = 0;\n this.groups = [];\n this.isExpanded = false;\n }\n get groupItemClass() {\n return true;\n }\n ngDoCheck() {\n this.isExpanded = this.groupsService.isExpanded(this.item.index);\n }\n prefixGroupCell(item) {\n return new Array(item.level);\n }\n toggleGroup(item) {\n this.groupsService.toggleRow(item.index, item.data);\n return false;\n }\n groupSpan(item) {\n const groupCount = (this.groups || []).length;\n const detailOffset = this.hasDetails ? 1 : 0;\n if (this.hasGroupHeaderColumn) {\n return groupCount + 1 + detailOffset - item.level;\n }\n let columnCount = columnsSpan(this.columns);\n if (this.skipGroupDecoration) {\n return columnCount;\n }\n return groupCount + columnCount + detailOffset - item.level;\n }\n logicalColSpan() {\n return this.skipGroupDecoration ? 1 : this.totalColumnsCount;\n }\n ariaRole() {\n if (this.skipGroupDecoration) {\n return 'presentation';\n }\n return 'gridcell';\n }\n formatForGroup(item) {\n return this.groupInfoService.formatForGroup(item);\n }\n groupTitle(item) {\n return this.groupInfoService.groupTitle(item);\n }\n groupHeaderTemplate(item) {\n return this.groupInfoService.groupHeaderTemplate(item);\n }\n}\nGroupHeaderComponent.ɵfac = function GroupHeaderComponent_Factory(t) { return new (t || GroupHeaderComponent)(ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(GroupInfoService)); };\nGroupHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupHeaderComponent, selectors: [[\"\", \"kendoGridGroupHeader\", \"\"]], hostVars: 2, hostBindings: function GroupHeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grouping-row\", ctx.groupItemClass);\n } }, inputs: { skipGroupDecoration: \"skipGroupDecoration\", hasDetails: \"hasDetails\", totalColumnsCount: \"totalColumnsCount\", groups: \"groups\", rowIndex: \"rowIndex\", logicalRowIndex: \"logicalRowIndex\", item: \"item\", hasGroupHeaderColumn: \"hasGroupHeaderColumn\", groupHeaderColumns: \"groupHeaderColumns\", columns: \"columns\" }, attrs: _c141, decls: 3, vars: 3, consts: [[3, \"ngIf\"], [\"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-group-cell\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 1, \"k-group-cell\"], [\"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\"], [1, \"k-reset\"], [\"href\", \"#\", \"tabindex\", \"-1\", \"role\", \"presentation\", 1, \"k-icon\", 3, \"ngClass\", \"click\"], [3, \"templateContext\"], [\"role\", \"gridcell\", \"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"gridcell\", \"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function GroupHeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupHeaderComponent_ng_template_0_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_td_1_Template, 3, 9, \"td\", 1);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_ng_container_2_Template, 2, 1, \"ng-container\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx.skipGroupDecoration && ctx.hasGroupHeaderColumn));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasGroupHeaderColumn);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalCellDirective, ɵngcc5.NgClass, TemplateContextDirective, ɵngcc5.NgTemplateOutlet], pipes: [FieldAccessorPipe], encapsulation: 2 });\n/** @nocollapse */\nGroupHeaderComponent.ctorParameters = () => [\n { type: GroupsService },\n { type: GroupInfoService }\n];\nGroupHeaderComponent.propDecorators = {\n rowIndex: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n item: [{ type: Input }],\n skipGroupDecoration: [{ type: Input }],\n hasDetails: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n hasGroupHeaderColumn: [{ type: Input }],\n groupHeaderColumns: [{ type: Input }],\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n groupItemClass: [{ type: HostBinding, args: ['class.k-grouping-row',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridGroupHeader]',\n template: `\n \n \n \n \n

    \n \n \n \n \n {{groupTitle(item)}}: {{item.data | valueOf:\"value\": formatForGroup(item)}}\n \n \n \n \n

    \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: GroupsService }, { type: GroupInfoService }]; }, { skipGroupDecoration: [{\n type: Input\n }], hasDetails: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], groups: [{\n type: Input\n }], groupItemClass: [{\n type: HostBinding,\n args: ['class.k-grouping-row']\n }], rowIndex: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], item: [{\n type: Input\n }], hasGroupHeaderColumn: [{\n type: Input\n }], groupHeaderColumns: [{\n type: Input\n }], columns: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass DropTargetDirective {\n constructor(element, service) {\n this.element = element;\n this.service = service;\n this.context = {};\n this.enter = new EventEmitter();\n this.leave = new EventEmitter();\n this.drop = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n ngOnInit() {\n this.service.add(this);\n const changes = this.service.changes.pipe(filter(({ target }) => target === this));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'leave'))\n .subscribe(e => {\n this.leave.next(this.eventArgs(e));\n }));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'enter'))\n .subscribe(e => {\n this.enter.next(this.eventArgs(e));\n }));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'drop'))\n .subscribe(e => {\n this.drop.next(this.eventArgs(e));\n }));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n eventArgs(e) {\n return {\n target: this,\n mouseEvent: e.mouseEvent,\n draggable: e.draggable\n };\n }\n}\nDropTargetDirective.ɵfac = function DropTargetDirective_Factory(t) { return new (t || DropTargetDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragAndDropService)); };\nDropTargetDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DropTargetDirective, selectors: [[\"\", \"kendoDropTarget\", \"\"]], inputs: { context: \"context\" }, outputs: { enter: \"enter\", leave: \"leave\", drop: \"drop\" } });\n/** @nocollapse */\nDropTargetDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: DragAndDropService }\n];\nDropTargetDirective.propDecorators = {\n context: [{ type: Input }],\n enter: [{ type: Output }],\n leave: [{ type: Output }],\n drop: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropTargetDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropTarget]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragAndDropService }]; }, { context: [{\n type: Input\n }], enter: [{\n type: Output\n }], leave: [{\n type: Output\n }], drop: [{\n type: Output\n }] }); })();\n\nconst withoutField = ({ field }) => isNullOrEmptyString(field);\nconst alreadyGrouped = ({ groups, field }) => groups.some(group => group.field === field);\nconst overSameTarget = ({ target, field }) => target.field === field;\nconst overLastTarget = ({ target }) => target.lastTarget;\nconst isLastGroup = ({ groups, field }) => groups.map(group => group.field).indexOf(field) === groups.length - 1;\nconst isNotGroupable = (groupsService) => ({ field }) => !groupsService.isGroupable(field);\nconst columnRules = (groupService) => or(withoutField, alreadyGrouped, isNotGroupable(groupService));\nconst indicatorRules = or(overSameTarget, and(overLastTarget, isLastGroup));\n/**\n * @hidden\n */\nclass GroupPanelComponent {\n constructor(hint, cue, groupInfoService, localization, cd) {\n this.hint = hint;\n this.cue = cue;\n this.groupInfoService = groupInfoService;\n this.localization = localization;\n this.cd = cd;\n this.change = new EventEmitter();\n this.groups = [];\n this.dropTargets = new QueryList();\n this.groupTitles = [];\n this.subscription = new Subscription();\n }\n get groupHeaderClass() {\n return true;\n }\n set text(value) {\n this.emptyText = value;\n }\n get text() {\n return this.emptyText ? this.emptyText : this.localization.get('groupPanelEmpty');\n }\n ngAfterViewInit() {\n this.subscription.add(observe(this.dropTargets)\n .subscribe(this.attachTargets.bind(this)));\n }\n ngOnInit() {\n this.subscription.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngDoCheck() {\n const currentTitles = this.groups.map(group => this.groupInfoService.groupTitle(group));\n if (currentTitles.length !== this.groupTitles.length || currentTitles.some((current, idx) => current !== this.groupTitles[idx])) {\n this.groupTitles = currentTitles;\n this.cd.markForCheck();\n }\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n }\n directionChange(group) {\n const index = this.groups.findIndex(x => x.field === group.field);\n const groups = [...this.groups.slice(0, index), group, ...this.groups.slice(index + 1)];\n this.change.emit(groups);\n }\n insert(field, index) {\n const groups = this.groups.filter(x => x.field !== field);\n if (groups.length || this.groups.length === 0) {\n this.change.emit([...groups.slice(0, index), { field: field }, ...groups.slice(index)]);\n }\n }\n remove(group) {\n this.change.emit(this.groups.filter(x => x.field !== group.field));\n }\n canDrop(draggable, target) {\n const isIndicator = draggable.type === 'groupIndicator';\n const rules = isIndicator\n ? indicatorRules\n : columnRules(this.groupInfoService);\n return !rules({\n field: draggable.field,\n groups: this.groups,\n target\n });\n }\n attachTargets() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n this.targetSubscription = new Subscription();\n const enterStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.enter), from([]));\n const leaveStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.leave), from([]));\n const dropStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.drop), from([]));\n this.targetSubscription.add(enterStream.pipe(tap(_ => this.hint.removeLock()), filter(({ draggable, target }) => this.canDrop(draggable.context, target.context)), tap(this.enter.bind(this)), switchMapTo(dropStream.pipe(takeUntil(leaveStream.pipe(tap(this.leave.bind(this))))))).subscribe(this.drop.bind(this)));\n }\n enter({ draggable, target }) {\n this.hint.enable();\n let before = target.context.lastTarget || isTargetBefore(draggable.element.nativeElement, target.element.nativeElement);\n if (this.localization.rtl) {\n before = !before;\n }\n this.cue.position(position(target.element.nativeElement, before));\n }\n leave() {\n this.hint.disable();\n this.cue.hide();\n }\n drop({ target, draggable }) {\n const field = draggable.context.field;\n const index = this.dropTargets.toArray().indexOf(target);\n this.insert(field, index);\n }\n}\nGroupPanelComponent.ɵfac = function GroupPanelComponent_Factory(t) { return new (t || GroupPanelComponent)(ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(GroupInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nGroupPanelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupPanelComponent, selectors: [[\"kendo-grid-group-panel\"]], viewQuery: function GroupPanelComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DropTargetDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropTargets = _t);\n } }, hostVars: 4, hostBindings: function GroupPanelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grouping-header\", ctx.groupHeaderClass)(\"k-grouping-header-flex\", ctx.groupHeaderClass);\n } }, inputs: { groups: \"groups\", text: \"text\" }, outputs: { change: \"change\" }, decls: 3, vars: 3, consts: [[3, \"ngIf\"], [\"class\", \"k-indicator-container\", \"kendoDropTarget\", \"\", 3, \"context\", 4, \"ngFor\", \"ngForOf\"], [\"class\", \"k-indicator-container\", \"kendoDropTarget\", \"\", 3, \"context\", 4, \"ngIf\"], [\"kendoDropTarget\", \"\", 1, \"k-indicator-container\", 3, \"context\"], [\"kendoDraggableColumn\", \"\", \"kendoGroupIndicator\", \"\", \"kendoDraggable\", \"\", 3, \"enableDrag\", \"context\", \"group\", \"groupTitle\", \"directionChange\", \"remove\"]], template: function GroupPanelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupPanelComponent_ng_template_0_Template, 2, 3, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, GroupPanelComponent_div_1_Template, 2, 10, \"div\", 1);\n ɵngcc0.ɵɵtemplate(2, GroupPanelComponent_div_2_Template, 2, 2, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.groups.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.groups.length !== 0);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, DropTargetDirective, DraggableColumnDirective, GroupIndicatorComponent, ɵngcc2.DraggableDirective]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nGroupPanelComponent.ctorParameters = () => [\n { type: DragHintService },\n { type: DropCueService },\n { type: GroupInfoService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nGroupPanelComponent.propDecorators = {\n change: [{ type: Output }],\n groupHeaderClass: [{ type: HostBinding, args: [\"class.k-grouping-header\",] }, { type: HostBinding, args: [\"class.k-grouping-header-flex\",] }],\n text: [{ type: Input }],\n groups: [{ type: Input }],\n dropTargets: [{ type: ViewChildren, args: [DropTargetDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupPanelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-grid-group-panel',\n template: `\n \n \n {{ text }}\n \n \n
    \n \n
    \n \n
     
    \n `\n }]\n }], function () { return [{ type: DragHintService }, { type: DropCueService }, { type: GroupInfoService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { change: [{\n type: Output\n }], groups: [{\n type: Input\n }], dropTargets: [{\n type: ViewChildren,\n args: [DropTargetDirective]\n }], groupHeaderClass: [{\n type: HostBinding,\n args: [\"class.k-grouping-header\"]\n }, {\n type: HostBinding,\n args: [\"class.k-grouping-header-flex\"]\n }], text: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass GroupIndicatorComponent {\n constructor() {\n this.directionChange = new EventEmitter();\n this.remove = new EventEmitter();\n }\n get groupIndicatorClass() {\n return true;\n }\n get dir() {\n return this.group.dir ? this.group.dir : \"asc\";\n }\n toggleDirection() {\n this.directionChange.emit({\n dir: this.dir === \"asc\" ? \"desc\" : \"asc\",\n field: this.group.field\n });\n return false;\n }\n removeDescriptor() {\n this.remove.emit({\n dir: this.group.dir,\n field: this.group.field\n });\n return false;\n }\n}\nGroupIndicatorComponent.ɵfac = function GroupIndicatorComponent_Factory(t) { return new (t || GroupIndicatorComponent)(); };\nGroupIndicatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupIndicatorComponent, selectors: [[\"\", \"kendoGroupIndicator\", \"\"]], hostVars: 2, hostBindings: function GroupIndicatorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-indicator\", ctx.groupIndicatorClass);\n } }, inputs: { group: \"group\", groupTitle: \"groupTitle\" }, outputs: { directionChange: \"directionChange\", remove: \"remove\" }, attrs: _c148, decls: 5, vars: 5, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-link\", 3, \"click\"], [1, \"k-icon\"], [\"tabindex\", \"-1\", 1, \"k-button\", \"k-button-icon\", \"k-bare\", 3, \"click\"], [1, \"k-icon\", \"k-i-group-delete\"]], template: function GroupIndicatorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function GroupIndicatorComponent_Template_a_click_0_listener() { return ctx.toggleDirection(); });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"a\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function GroupIndicatorComponent_Template_a_click_3_listener() { return ctx.removeDescriptor(); });\n ɵngcc0.ɵɵelement(4, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-i-sort-asc-sm\", ctx.dir === \"asc\")(\"k-i-sort-desc-sm\", ctx.dir === \"desc\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.groupTitle, \"\");\n } }, encapsulation: 2, changeDetection: 0 });\nGroupIndicatorComponent.propDecorators = {\n directionChange: [{ type: Output }],\n remove: [{ type: Output }],\n group: [{ type: Input }],\n groupTitle: [{ type: Input }],\n groupIndicatorClass: [{ type: HostBinding, args: [\"class.k-group-indicator\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupIndicatorComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: '[kendoGroupIndicator]',\n template: `\n \n \n {{groupTitle}}\n \n \n \n `\n }]\n }], function () { return []; }, { directionChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], groupIndicatorClass: [{\n type: HostBinding,\n args: [\"class.k-group-indicator\"]\n }], group: [{\n type: Input\n }], groupTitle: [{\n type: Input\n }] }); })();\n\n// TODO\n// tslint:disable:rxjs-no-unsafe-takeuntil\n/**\n * @hidden\n */\nconst preventOnDblClick = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\nconst hasClass = className => el => new RegExp(`(^| )${className}( |$)`).test(el.className);\nconst isDeleteButton = or(hasClass(\"k-i-group-delete\"), hasClass(\"k-button-icon\"));\nconst isSortIcon = or(hasClass(\"k-i-sort-asc-sm\"), hasClass(\"k-i-sort-desc-sm\"));\nconst skipButtons = and(not(isDeleteButton), not(isSortIcon), not(isFocusableWithTabKey), not(matchesNodeName(\"label\")));\nconst elementUnderCursor = ({ clientX, clientY }) => document.elementFromPoint(clientX, clientY);\nconst hideThenShow = (element, cont) => {\n element.style.display = 'none';\n const result = cont();\n element.style.display = 'block';\n return result;\n};\n/**\n * @hidden\n */\nclass DraggableColumnDirective {\n constructor(draggable, element, zone, service, hint, cue, nav, renderer) {\n this.draggable = draggable;\n this.element = element;\n this.zone = zone;\n this.service = service;\n this.hint = hint;\n this.cue = cue;\n this.nav = nav;\n this.renderer = renderer;\n this.context = {};\n this.drag = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n set enableDrag(enabled) {\n this.enabled = enabled;\n this.updateTouchAction();\n }\n get hostClass() {\n return this.enabled;\n }\n ngOnInit() {\n this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(filter(_ => this.enabled), filter(({ originalEvent: { target } }) => target === this.element.nativeElement || skipButtons(target)), tap((e) => {\n const originalEvent = e.originalEvent;\n if (!e.isTouch) {\n originalEvent.preventDefault();\n }\n this.nav.navigateTo(originalEvent.target);\n }), switchMap(preventOnDblClick(this.draggable.kendoRelease)), tap(down => {\n this.hint.create(down, this.element.nativeElement, this.context.hint);\n this.cue.create();\n }), switchMap(down => this.draggable.kendoDrag.pipe(tap((e) => {\n if (e.isTouch) {\n e.originalEvent.preventDefault();\n }\n }), tap(this.hint.attach()), tap(this.cue.attach()), takeUntil(this.draggable.kendoRelease), map(move => ({ move, down })))), tap(this.performDrag.bind(this)), switchMapTo(this.draggable.kendoRelease)).subscribe(this.drop.bind(this))));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n drop(upEvent) {\n this.hint.remove();\n this.cue.remove();\n this.service.notifyDrop(this, upEvent);\n }\n performDrag({ move }) {\n this.hint.move(move);\n const cursorElement = this.elementUnderCursor(move);\n if (cursorElement) {\n this.service.notifyDrag(this, cursorElement, move);\n }\n this.drag.emit({\n draggable: this,\n mouseEvent: move\n });\n }\n elementUnderCursor(mouseEvent) {\n this.hint.hide();\n let target = elementUnderCursor(mouseEvent);\n if (target && /k-grouping-dropclue/.test(target.className)) {\n target = hideThenShow(target, elementUnderCursor.bind(this, mouseEvent));\n }\n this.hint.show();\n return target;\n }\n updateTouchAction() {\n if (!this.element) {\n return;\n }\n this.renderer.setStyle(this.element.nativeElement, 'touch-action', this.enabled ? 'none' : '');\n }\n}\nDraggableColumnDirective.ɵfac = function DraggableColumnDirective_Factory(t) { return new (t || DraggableColumnDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DragAndDropService), ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nDraggableColumnDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DraggableColumnDirective, selectors: [[\"\", \"kendoDraggableColumn\", \"\"]], hostVars: 2, hostBindings: function DraggableColumnDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-draggable-header\", ctx.hostClass);\n } }, inputs: { context: \"context\", enableDrag: \"enableDrag\" }, outputs: { drag: \"drag\" } });\n/** @nocollapse */\nDraggableColumnDirective.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: NgZone },\n { type: DragAndDropService },\n { type: DragHintService },\n { type: DropCueService },\n { type: NavigationService },\n { type: Renderer2 }\n];\nDraggableColumnDirective.propDecorators = {\n context: [{ type: Input }],\n enableDrag: [{ type: Input }],\n drag: [{ type: Output }],\n hostClass: [{ type: HostBinding, args: ['class.k-grid-draggable-header',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DraggableColumnDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDraggableColumn]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: DragAndDropService }, { type: DragHintService }, { type: DropCueService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }]; }, { context: [{\n type: Input\n }], drag: [{\n type: Output\n }], enableDrag: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-grid-draggable-header']\n }] }); })();\n\nconst exported = [\n DraggableColumnDirective,\n DropTargetDirective\n];\n/**\n * @hidden\n */\nclass DragAndDropModule {\n}\nDragAndDropModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DragAndDropModule });\nDragAndDropModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DragAndDropModule_Factory(t) { return new (t || DragAndDropModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragAndDropModule, { declarations: [DraggableColumnDirective, DropTargetDirective], exports: [DraggableColumnDirective, DropTargetDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragAndDropModule, [{\n type: NgModule,\n args: [{\n declarations: [exported],\n exports: [exported]\n }]\n }], null, null); })();\n\nconst exportedModules$1 = [\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderComponent,\n GroupPanelComponent,\n GroupIndicatorComponent\n];\n/**\n * @hidden\n */\nclass GroupModule {\n static exports() {\n return [\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective\n ];\n }\n}\nGroupModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: GroupModule });\nGroupModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function GroupModule_Factory(t) { return new (t || GroupModule)(); }, imports: [[CommonModule, SharedModule, DragAndDropModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(GroupModule, { declarations: function () { return [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, GroupIndicatorComponent]; }, imports: function () { return [CommonModule, SharedModule, DragAndDropModule]; }, exports: function () { return [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, GroupIndicatorComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$1],\n exports: [exportedModules$1],\n imports: [CommonModule, SharedModule, DragAndDropModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst DEFAULTS = {\n allowUnsort: true,\n mode: 'single',\n showIndexes: true,\n initialDirection: 'asc'\n};\n/**\n * @hidden\n */\nconst normalize$1 = (...settings) => Object.assign({}, DEFAULTS, ...settings);\n\n/**\n * @hidden\n */\nconst hasFilter = (settings, column) => settings.filter !== false && column.field && column.filterable;\n/**\n * @hidden\n */\nconst hasSort = (settings, column) => settings.sort !== false && column.field && column.sortable;\n/**\n * @hidden\n */\nconst hasLock = (settings, column) => settings.lock && column.lockable && !(column.parent && !column.parent.isSpanColumn);\n/**\n * @hidden\n */\nconst hasColumnChooser = (settings) => settings.columnChooser !== false;\n/**\n * @hidden\n */\nconst hasItems = (settings, column) => hasColumnChooser(settings) || hasLock(settings, column) || hasSort(settings, column) || hasFilter(settings, column);\n\nconst mergeObjects = (...args) => Object.assign.apply(null, [{}].concat(args));\nconst directions = initialDirection => initialDirection === \"asc\" ? [\"asc\", \"desc\"] : [\"desc\", \"asc\"];\n/**\n * @hidden\n */\nconst isRootLevel = ({ parent }) => !isTruthy(parent);\nconst ofColumnType = ({ draggable }) => ['column', 'columnGroup']\n .indexOf(draggable.context.type) >= 0;\nconst notSameElement = ({ draggable, target }) => draggable.element.nativeElement !== target.element.nativeElement;\nconst inSameParent = (x, y) => x.parent === y.parent ||\n (isInSpanColumn(y) && inSameParent(x, y.parent));\nconst sameParent = ({ draggable, target }) => inSameParent(draggable.context.column, target.context.column);\nconst lastNonLocked = ({ draggable }) => !isTruthy(draggable.context.column.locked) &&\n isRootLevel(draggable.context.column) &&\n draggable.context.lastColumn;\nconst notInSpanColumn = ({ draggable }) => !isInSpanColumn(draggable.context.column);\nconst reorderable = ({ draggable }) => draggable.context.column.reorderable;\nconst lockable = ({ draggable, target }) => draggable.context.column.lockable !== false ||\n draggable.context.column.isLocked === target.context.column.isLocked;\nconst rules = and(ofColumnType, reorderable, notInSpanColumn, notSameElement, sameParent, not(lastNonLocked), lockable);\n/**\n * @hidden\n */\nclass HeaderComponent {\n constructor(popupService, hint, cue, reorderService, idService, sortService, localization, cd) {\n this.popupService = popupService;\n this.hint = hint;\n this.cue = cue;\n this.reorderService = reorderService;\n this.idService = idService;\n this.sortService = sortService;\n this.localization = localization;\n this.cd = cd;\n this.columns = [];\n this.groups = [];\n this.sort = new Array();\n this.sortable = false;\n this.groupable = false;\n this.lockedColumnsCount = 0;\n this.resizable = false;\n this.reorderable = false;\n this.columnMenu = false;\n this.totalColumnsCount = 0;\n this.sortedFields = {};\n this.dropTargets = new QueryList();\n this.subscription = new Subscription();\n }\n get headerClass() {\n return !this.scrollable;\n }\n get sortableLabel() {\n return this.localization.get('sortable');\n }\n // Number of unlocked columns in the next table, if any\n get unlockedColumnsCount() {\n return this.totalColumnsCount - this.lockedColumnsCount - this.columns.length;\n }\n sortColumn(column) {\n this.sortService.sort(this.toggleSort(column));\n }\n onSortClick(column, event, link) {\n const target = event.target;\n if (column.headerTemplateRef && target !== link) {\n const hasFocusableParent = Boolean(closestInScope(target, isFocusable, link));\n if (hasFocusableParent) {\n // Do not sort when clicking focusable template elements.\n return;\n }\n }\n this.sortColumn(column);\n }\n onHeaderKeydown(column, args) {\n if (!this.sortable || args.defaultPrevented || column.sortable === false) {\n return;\n }\n if (args.keyCode === Keys.Enter && isPresent(column.field)) {\n this.sortService.sort(this.toggleSort(column));\n }\n }\n showSortNumbering(column) {\n const { showIndexes } = normalize$1(this.sortable);\n return showIndexes\n && this.sort\n && this.sort.filter(({ dir }) => isPresent(dir)).length > 1\n && this.sortOrder(column.field) > 0;\n }\n sortOrder(field) {\n return this.sort\n .filter(({ dir }) => isPresent(dir))\n .findIndex(x => x.field === field)\n + 1;\n }\n sortIcon(field) {\n const state$$1 = this.sortDescriptor(field);\n return {\n 'k-icon': isPresent(state$$1.dir),\n 'k-i-sort-desc-sm': state$$1.dir === \"desc\",\n 'k-i-sort-asc-sm': state$$1.dir === \"asc\"\n };\n }\n sortState(column) {\n if (!this.isSortable(column)) {\n return;\n }\n const state$$1 = this.sortDescriptor(column.field);\n if (state$$1.dir === 'asc') {\n return 'ascending';\n }\n if (state$$1.dir === 'desc') {\n return 'descending';\n }\n }\n sortStatus(column) {\n if (!this.sortedFields[column.field] || !this.isSortable(column)) {\n return;\n }\n let msg = 'sortedDefault';\n const state$$1 = this.sortDescriptor(column.field);\n if (state$$1.dir === 'asc') {\n msg = 'sortedAscending';\n }\n else if (state$$1.dir === 'desc') {\n msg = 'sortedDescending';\n }\n return this.localization.get(msg);\n }\n toggleSort(column) {\n const { allowUnsort, mode, initialDirection } = normalize$1(this.sortable, column.sortable);\n const descriptor = this.toggleDirection(column.field, allowUnsort, initialDirection);\n if (mode === 'single') {\n return [descriptor];\n }\n return [...this.sort.filter(desc => desc.field !== column.field), descriptor];\n }\n ngAfterViewInit() {\n this.subscription.add(observe(this.dropTargets)\n .subscribe(this.attachTargets.bind(this)));\n }\n ngDoCheck() {\n this._leafColumns = columnsToRender(this.columns || []).filter(x => !isColumnGroupComponent(x));\n }\n ngOnChanges(changes) {\n const sortChange = changes.sort;\n if (sortChange && !sortChange.isFirstChange()) {\n sortChange.currentValue.forEach(change => {\n this.sortedFields[change.field] = true;\n });\n }\n }\n ngOnInit() {\n this.subscription.add(this.localization.changes\n .subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n if (this.popupService) {\n this.popupService.destroy();\n }\n this.subscription.unsubscribe();\n }\n selectAllCheckboxId() {\n return this.idService.selectAllCheckboxId();\n }\n isFirstOnRow(column, index) {\n const isTailing = (c) => c &&\n (this.columnsForLevel(c.level).indexOf(c) > 0 || isTailing(c.parent));\n return index === 0 && !this.groups.length && !this.detailTemplate && isTailing(column.parent);\n }\n logicalColumnIndex(column) {\n const index = column.leafIndex;\n if (isPresent(index)) {\n return index + (isPresent(this.detailTemplate) ? 1 : 0);\n }\n return -1;\n }\n get showFilterMenu() {\n return !this.columnMenu && hasFilterMenu(this.filterable);\n }\n get showFilterRow() {\n return hasFilterRow(this.filterable);\n }\n showColumnMenu(column) {\n return this.columnMenu && column.columnMenu &&\n (this.columnMenuTemplate || column.columnMenuTemplates.length || hasItems(this.columnMenu, column));\n }\n isFilterable(column) {\n return !isNullOrEmptyString(column.field) && column.filterable === true;\n }\n canDrop(draggable, target) {\n return this.reorderable && rules({ draggable, target });\n }\n shouldActivate(column) {\n const canReorder = this.reorderable && column.reorderable;\n if (!canReorder && !isColumnComponent(column)) {\n return false;\n }\n const groupable = this.groupable && isColumnComponent(column) && column.groupable !== false;\n return groupable || canReorder;\n }\n isSortable(column) {\n return !isNullOrEmptyString(column.field)\n && isTruthy(this.sortable) && isTruthy(column.sortable);\n }\n isCheckboxColumn(column) {\n return isCheckboxColumn(column) && !column.templateRef;\n }\n trackByIndex(index, _item) {\n return index;\n }\n toggleDirection(field, allowUnsort, initialDirection) {\n const descriptor = this.sortDescriptor(field);\n const [first, second] = directions(initialDirection);\n let dir = first;\n if (descriptor.dir === first) {\n dir = second;\n }\n else if (descriptor.dir === second && allowUnsort) {\n dir = undefined;\n }\n return { dir, field };\n }\n columnsForLevel(level) {\n const columns = this.columns ? this.columns.filter(column => column.level === level) : [];\n return sortColumns(columnsToRender(columns));\n }\n isColumnGroupComponent(column) {\n return isColumnGroupComponent(column);\n }\n get columnLevels() {\n return new Array((this.totalColumnLevels || 0) + 1);\n }\n sortDescriptor(field) {\n return this.sort.find(item => item.field === field) || { field };\n }\n get leafColumns() {\n return this._leafColumns;\n }\n attachTargets() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n this.targetSubscription = new Subscription();\n const enterStream = merge(...this.dropTargets.map(target => target.enter));\n const leaveStream = merge(...this.dropTargets.map(target => target.leave));\n const dropStream = merge(...this.dropTargets.map(target => target.drop));\n this.targetSubscription.add(enterStream.pipe(tap(({ target, draggable }) => {\n if (draggable.context.type === 'groupIndicator') {\n return;\n }\n const targetLocked = isTruthy(target.context.column.isLocked);\n const draggableLocked = isTruthy(draggable.context.column.isLocked);\n if (this.lockedColumnsCount > 0 || targetLocked || draggableLocked) {\n this.hint.toggleLock(targetLocked);\n }\n }), filter(({ draggable, target }) => this.canDrop(draggable, target)), switchMap(this.trackMove.bind(this, leaveStream, dropStream)), map((e) => mergeObjects(e, { before: this.calculateBefore(e), changeContainer: e.changeContainer })), map(this.normalizeTarget.bind(this)), tap(this.enter.bind(this)), switchMap((args) => dropStream.pipe(map(() => args), takeUntil(leaveStream.pipe(tap(this.leave.bind(this)))))))\n .subscribe(this.drop.bind(this)));\n }\n normalizeTarget(e) {\n let target = e.target;\n const parent = target.context.column.parent;\n if (parent && parent.isSpanColumn) {\n const arr = this.dropTargets.toArray();\n const firstSpan = arr.find(t => t.context.column.parent === parent);\n const index = arr.indexOf(firstSpan);\n const adjust = e.before ? 0 : parent.childColumns.length - 1;\n target = arr[index + adjust];\n }\n return mergeObjects(e, { target });\n }\n trackMove(leaveStream, dropStream, e) {\n const column = e.target.context.column;\n const levelColumns = this.columnsForLevel(column.level);\n const index = levelColumns.indexOf(column);\n const isFirst = (column.locked ? index === levelColumns.length - 1 : index === 0);\n const changed = e.draggable.context.column.isLocked !== column.isLocked;\n if (changed && isFirst) {\n return e.draggable.drag\n .pipe(takeUntil(leaveStream), takeUntil(dropStream), map(({ mouseEvent }) => mergeObjects({ changeContainer: true }, e, { mouseEvent })));\n }\n return of(mergeObjects({ changeContainer: changed }, e));\n }\n calculateBefore({ draggable, target, mouseEvent, changeContainer = false }) {\n const targetElement = target.element.nativeElement;\n let before = false;\n if (changeContainer) {\n const { left } = offset(targetElement);\n const halfWidth = targetElement.offsetWidth / 2;\n const middle = left + halfWidth;\n before = middle > mouseEvent.pageX;\n if (this.localization.rtl) {\n before = !before;\n }\n }\n else {\n before = isTargetBefore(draggable.element.nativeElement, targetElement);\n }\n return before;\n }\n enter({ target, before }) {\n this.hint.enable();\n if (this.localization.rtl) {\n before = !before;\n }\n this.cue.position(position(target.element.nativeElement, before));\n }\n leave() {\n this.hint.disable();\n this.cue.hide();\n }\n drop({ draggable, target, before, changeContainer }) {\n this.reorderService.reorder({\n before,\n changeContainer,\n source: draggable.context.column,\n target: target.context.column\n });\n }\n}\nHeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(ColumnReorderService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(SortService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HeaderComponent, selectors: [[\"\", \"kendoGridHeader\", \"\"]], viewQuery: function HeaderComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DropTargetDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropTargets = _t);\n } }, hostVars: 2, hostBindings: function HeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-header\", ctx.headerClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", sort: \"sort\", sortable: \"sortable\", groupable: \"groupable\", lockedColumnsCount: \"lockedColumnsCount\", resizable: \"resizable\", reorderable: \"reorderable\", columnMenu: \"columnMenu\", totalColumnsCount: \"totalColumnsCount\", totalColumnLevels: \"totalColumnLevels\", detailTemplate: \"detailTemplate\", scrollable: \"scrollable\", filterable: \"filterable\", filter: \"filter\", columnMenuTemplate: \"columnMenuTemplate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c149, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngFor\", \"ngForOf\"], [\"kendoGridFilterRow\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"filter\", \"groups\", \"detailTemplate\", \"lockedColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"class\", \"k-group-cell k-header\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"class\", \"k-hierarchy-cell k-header\", \"role\", \"presentation\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\", \"ngForTrackBy\"], [\"role\", \"presentation\", 1, \"k-group-cell\", \"k-header\"], [\"role\", \"presentation\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnheader\", \"aria-selected\", \"false\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", \"class\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", \"rowSpan\", \"enableDrag\", \"context\", \"k-filterable\", \"k-first\", \"ngClass\", \"ngStyle\", \"keydown\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", \"class\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"rowSpan\", \"colSpan\", \"enableDrag\", \"context\", \"k-first\", \"k-filterable\", \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnheader\", \"aria-selected\", \"false\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", 1, \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", \"rowSpan\", \"enableDrag\", \"context\", \"ngClass\", \"ngStyle\", \"keydown\"], [3, \"column\", \"filter\", 4, \"ngIf\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", \"sort\", \"filter\", \"sortable\", 4, \"ngIf\"], [\"kendoGridColumnHandle\", \"\", \"kendoDraggable\", \"\", \"class\", \"k-column-resizer\", 3, \"column\", \"columns\", 4, \"ngIf\"], [3, \"column\", \"filter\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", \"sort\", \"filter\", \"sortable\"], [3, \"templateContext\"], [1, \"k-link\", 3, \"click\"], [\"link\", \"\"], [3, \"ngClass\"], [\"class\", \"k-sort-order\", 4, \"ngIf\"], [\"role\", \"status\", 1, \"k-sort-status\", 2, \"position\", \"absolute\", \"left\", \"-10000px\", 3, \"innerHtml\"], [1, \"k-sort-order\"], [\"kendoGridSelectAllCheckbox\", \"\", \"kendoGridFocusable\", \"\", 1, \"k-checkbox\"], [1, \"k-checkbox-label\"], [\"kendoGridColumnHandle\", \"\", \"kendoDraggable\", \"\", 1, \"k-column-resizer\", 3, \"column\", \"columns\"], [\"kendoGridLogicalCell\", \"\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", 1, \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"rowSpan\", \"colSpan\", \"enableDrag\", \"context\", \"ngClass\", \"ngStyle\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", 4, \"ngIf\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\"], [\"kendoGridFilterRow\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"filter\", \"groups\", \"detailTemplate\", \"lockedColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_Template, 2, 2, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalRowDirective, LogicalCellDirective, DropTargetDirective, ɵngcc2.DraggableDirective, DraggableColumnDirective, ɵngcc5.NgClass, ɵngcc5.NgStyle, FilterMenuComponent, ColumnMenuComponent, TemplateContextDirective, SelectAllCheckboxDirective, FocusableDirective, ColumnHandleDirective, FilterRowComponent]; }, styles: [\".k-column-resizer[_ngcontent-%COMP%] {\\n cursor: col-resize;\\n display: block;\\n height: 1000%;\\n position: absolute;\\n top: 0;\\n width: .5em;\\n }\"] });\n/** @nocollapse */\nHeaderComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: DragHintService },\n { type: DropCueService },\n { type: ColumnReorderService },\n { type: IdService },\n { type: SortService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nHeaderComponent.propDecorators = {\n totalColumnLevels: [{ type: Input }],\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n scrollable: [{ type: Input }],\n filterable: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n sortable: [{ type: Input }],\n groupable: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n columnMenu: [{ type: Input }],\n columnMenuTemplate: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n headerClass: [{ type: HostBinding, args: ['class.k-grid-header',] }],\n dropTargets: [{ type: ViewChildren, args: [DropTargetDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridHeader]',\n styles: [`\n .k-column-resizer {\n cursor: col-resize;\n display: block;\n height: 1000%;\n position: absolute;\n top: 0;\n width: .5em;\n }\n `],\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n {{column.displayTitle}}\n \n \n \n \n \n {{column.displayTitle}}\n \n {{sortOrder(column.field)}}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{column.displayTitle}}\n \n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n >\n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], sort: [{\n type: Input\n }], sortable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], resizable: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], columnMenu: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], dropTargets: [{\n type: ViewChildren,\n args: [DropTargetDirective]\n }], headerClass: [{\n type: HostBinding,\n args: ['class.k-grid-header']\n }], totalColumnLevels: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], columnMenuTemplate: [{\n type: Input\n }] }); })();\n\n// TODO\n// tslint:disable:rxjs-no-unsafe-takeuntil\n/**\n * @hidden\n */\nconst fromPercentage = (value, percent) => {\n const sign = percent < 0 ? -1 : 1;\n return Math.ceil((Math.abs(percent) / 100) * value) * sign;\n};\n/**\n * @hidden\n */\nconst toPercentage = (value, whole) => (value / whole) * 100;\n/**\n * @hidden\n */\nconst headerWidth = (handle) => handle.nativeElement.parentElement.offsetWidth;\n/**\n * @hidden\n */\nconst allLeafColumns = columns => expandColumns(columns)\n .filter(c => !c.isColumnGroup);\n/**\n * @hidden\n */\nconst stopPropagation = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\n/**\n * @hidden\n */\nconst createMoveStream = (service, draggable) => mouseDown => draggable.kendoDrag.pipe(takeUntil(draggable.kendoRelease.pipe(tap(() => service.end()))), map(({ pageX }) => ({\n originalX: mouseDown.pageX,\n pageX\n})));\n/**\n * @hidden\n */\nconst preventOnDblClick$1 = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\n/**\n * @hidden\n */\nconst isInSpanColumn$1 = column => !!(column.parent && column.parent.isSpanColumn);\n/**\n * @hidden\n *\n * Calculates the column index. If the column is stated in `SpanColumn`,\n * the index for all child columns equals the index of the first child.\n */\nconst indexOf = (target, list) => {\n let index = 0;\n let ignore = 0;\n let skip = 0;\n while (index < list.length) {\n const current = list[index];\n const isParentSpanColumn = isInSpanColumn$1(current);\n if (current === target) {\n break;\n }\n if ((ignore-- <= 0) && isParentSpanColumn) {\n ignore = current.parent.childColumns.length - 1;\n skip += ignore;\n }\n index++;\n }\n return index - skip;\n};\n/**\n * @hidden\n */\nclass ColumnHandleDirective {\n constructor(draggable, element, service, zone, cdr, localization) {\n this.draggable = draggable;\n this.element = element;\n this.service = service;\n this.zone = zone;\n this.cdr = cdr;\n this.localization = localization;\n this.columns = [];\n this.subscriptions = new Subscription();\n this.rtl = false;\n }\n get visible() {\n return this.column.resizable ? 'block' : 'none';\n }\n get leftStyle() {\n return isTruthy(this.rtl) ? 0 : null;\n }\n get rightStyle() {\n return isTruthy(this.rtl) ? null : 0;\n }\n autoFit() {\n const allLeafs = allLeafColumns(this.columns);\n const currentLeafs = leafColumns([this.column]).filter(column => isTruthy(column.resizable));\n const columnInfo = currentLeafs.map(column => {\n const isParentSpan = isInSpanColumn$1(column);\n const isLastInSpan = isParentSpan ? column.parent.childColumns.last === column : false;\n const index = indexOf(column, allLeafs);\n return {\n column,\n headerIndex: this.columnsForLevel(column.level).indexOf(column),\n index,\n isLastInSpan,\n isParentSpan,\n level: column.level\n };\n });\n currentLeafs.forEach(column => column.width = 0);\n this.service.measureColumns(columnInfo);\n }\n ngOnInit() {\n const service = this.service.changes.pipe(filter(() => this.column.resizable), filter(e => isPresent(e.columns.find(column => column === this.column))));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'start'))\n .subscribe(this.initState.bind(this)));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'resizeColumn'))\n .subscribe(this.resize.bind(this)));\n this.subscriptions.add(this.service.changes.pipe(filter(e => e.type === 'start'), filter(this.shouldUpdate.bind(this)), take(1) //on first resize only\n ).subscribe(this.initColumnWidth.bind(this)));\n this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(tap(stopPropagation), tap(() => this.service.start(this.column)), switchMap(preventOnDblClick$1(this.draggable.kendoRelease)), switchMap(createMoveStream(this.service, this.draggable)))\n .subscribe(({ pageX, originalX }) => {\n const delta = pageX - originalX;\n const percent = toPercentage(delta, this.column.resizeStartWidth || this.column.width);\n this.service.resizeColumns(percent);\n })));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'autoFitComplete'))\n .subscribe(this.sizeToFit.bind(this)));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'triggerAutoFit'))\n .subscribe(this.autoFit.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n shouldUpdate() {\n return !allLeafColumns(this.columns)\n .map(column => column.width)\n .some(isBlank);\n }\n initColumnWidth() {\n this.column.width = headerWidth(this.element);\n }\n initState() {\n this.column.resizeStartWidth = headerWidth(this.element);\n this.service.resizedColumn({\n column: this.column,\n oldWidth: this.column.resizeStartWidth\n });\n }\n resize({ deltaPercent }) {\n let delta = fromPercentage(this.column.resizeStartWidth, deltaPercent);\n if (isTruthy(this.rtl)) {\n delta *= -1;\n }\n const newWidth = Math.max(this.column.resizeStartWidth + delta, this.column.minResizableWidth);\n const tableDelta = newWidth > this.column.minResizableWidth ?\n delta : this.column.minResizableWidth - this.column.resizeStartWidth;\n this.updateWidth(this.column, newWidth);\n this.service.resizeTable(this.column, tableDelta);\n }\n sizeToFit({ columns, widths }) {\n const index = columns.indexOf(this.column);\n const width = Math.max(...widths.map(w => w[index])) + 1; //add 1px for IE\n const tableDelta = width - this.column.resizeStartWidth;\n this.updateWidth(this.column, width);\n this.service.resizeTable(this.column, tableDelta);\n }\n updateWidth(column, width) {\n column.width = width;\n this.cdr.markForCheck(); //force CD cycle\n }\n columnsForLevel(level) {\n return columnsToRender(this.columns ? this.columns.filter(column => column.level === level) : []);\n }\n}\nColumnHandleDirective.ɵfac = function ColumnHandleDirective_Factory(t) { return new (t || ColumnHandleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColumnHandleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnHandleDirective, selectors: [[\"\", \"kendoGridColumnHandle\", \"\"]], hostVars: 6, hostBindings: function ColumnHandleDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"dblclick\", function ColumnHandleDirective_dblclick_HostBindingHandler() { return ctx.autoFit(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible)(\"left\", ctx.leftStyle)(\"right\", ctx.rightStyle);\n } }, inputs: { columns: \"columns\", column: \"column\" } });\n/** @nocollapse */\nColumnHandleDirective.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: ColumnResizingService },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: LocalizationService }\n];\nColumnHandleDirective.propDecorators = {\n columns: [{ type: Input }],\n column: [{ type: Input }],\n visible: [{ type: HostBinding, args: ['style.display',] }],\n leftStyle: [{ type: HostBinding, args: ['style.left',] }],\n rightStyle: [{ type: HostBinding, args: ['style.right',] }],\n autoFit: [{ type: HostListener, args: ['dblclick',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnHandleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnHandle]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ColumnResizingService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { columns: [{\n type: Input\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], leftStyle: [{\n type: HostBinding,\n args: ['style.left']\n }], rightStyle: [{\n type: HostBinding,\n args: ['style.right']\n }], autoFit: [{\n type: HostListener,\n args: ['dblclick']\n }], column: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the select-all checkbox feature of the Grid ([see example]({% slug selection_grid %}#toc-select-all-feature)).\n */\nclass SelectAllCheckboxDirective {\n constructor(selectionService, el, renderer, ngZone) {\n this.selectionService = selectionService;\n this.el = el;\n this.renderer = renderer;\n this.ngZone = ngZone;\n /**\n * Fires when the user clicks the `kendoGridSelectAllCheckbox` select-all checkbox\n * ([see example]({% slug selection_grid %}#toc-select-all-feature)).\n */\n this.selectAllChange = new EventEmitter();\n this.type = \"checkbox\";\n this.stateSet = false;\n this.ngZone.runOutsideAngular(() => {\n this.destroyClick = this.renderer.listen(this.el.nativeElement, \"click\", this.onClick.bind(this));\n });\n }\n ngAfterContentChecked() {\n this.setState();\n }\n ngOnChanges() {\n this.stateSet = true;\n }\n ngOnDestroy() {\n if (this.destroyClick) {\n this.destroyClick();\n }\n }\n /**\n * @hidden\n */\n onClick() {\n // yields consistent cross-browser behavior when clicking an \"indeterminate\" checkbox\n const undefinedCheckedStateInIE = detectIE() && this.selectionService.selectAllState === undefined;\n const isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;\n const options = this.selectionService.options;\n this.selectAllChange.emit(isChecked ? \"checked\" : \"unchecked\");\n if (options.enabled && options.mode === \"multiple\") {\n this.ngZone.run(() => {\n this.selectionService.updateAll(isChecked);\n });\n }\n }\n /**\n * @hidden\n */\n setState() {\n const state$$1 = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;\n const elem = this.el.nativeElement;\n this.renderer.setProperty(elem, \"indeterminate\", !isPresent(state$$1));\n this.renderer.setProperty(elem, \"checked\", isPresent(state$$1) ? state$$1 : false);\n }\n /**\n * @hidden\n */\n stateToBool() {\n switch (this.state) {\n case \"checked\":\n return true;\n case \"unchecked\":\n return false;\n default:\n return undefined;\n }\n }\n}\nSelectAllCheckboxDirective.ɵfac = function SelectAllCheckboxDirective_Factory(t) { return new (t || SelectAllCheckboxDirective)(ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSelectAllCheckboxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectAllCheckboxDirective, selectors: [[\"\", \"kendoGridSelectAllCheckbox\", \"\"]], hostVars: 1, hostBindings: function SelectAllCheckboxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.type);\n } }, inputs: { state: \"state\" }, outputs: { selectAllChange: \"selectAllChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nSelectAllCheckboxDirective.ctorParameters = () => [\n { type: SelectionService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nSelectAllCheckboxDirective.propDecorators = {\n state: [{ type: Input }],\n selectAllChange: [{ type: Output }],\n type: [{ type: HostBinding, args: ['attr.type',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectAllCheckboxDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectAllCheckbox]'\n }]\n }], function () { return [{ type: SelectionService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { selectAllChange: [{\n type: Output\n }], type: [{\n type: HostBinding,\n args: ['attr.type']\n }], state: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterMenuComponent {\n constructor(filterService, popupService, localization) {\n this.filterService = filterService;\n this.popupService = popupService;\n this.localization = localization;\n /**\n * @hidden\n */\n this.filterLabel = this.localization.get('filter');\n }\n get hasFilters() {\n return filtersByField(this.filter, (this.column || {}).field).length > 0;\n }\n toggle(anchor, template) {\n this.popupRef = this.popupService.open(anchor, template, this.popupRef);\n return false;\n }\n close() {\n this.popupService.destroy();\n }\n}\nFilterMenuComponent.ɵfac = function FilterMenuComponent_Factory(t) { return new (t || FilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuComponent, selectors: [[\"kendo-grid-filter-menu\"]], inputs: { column: \"column\", filter: \"filter\" }, decls: 5, vars: 4, consts: [[\"href\", \"#\", 3, \"ngClass\", \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-filter\"], [\"template\", \"\"], [3, \"column\", \"filter\", \"close\"]], template: function FilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function FilterMenuComponent_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r5); const _r0 = ɵngcc0.ɵɵreference(1); const _r1 = ɵngcc0.ɵɵreference(4); return ctx.toggle(_r0, _r1); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, FilterMenuComponent_ng_template_3_Template, 1, 2, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(2, _c153, ctx.hasFilters));\n ɵngcc0.ɵɵattribute(\"title\", ctx.filterLabel);\n } }, directives: function () { return [ɵngcc5.NgClass, FilterMenuContainerComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterMenuComponent.ctorParameters = () => [\n { type: FilterService },\n { type: SinglePopupService },\n { type: LocalizationService }\n];\nFilterMenuComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-menu',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ɵngcc1.LocalizationService }]; }, { column: [{\n type: Input\n }], filter: [{\n type: Input\n }] }); })();\n\nconst isNoValueOperator = operator => (operator === \"isnull\"\n || operator === \"isnotnull\"\n || operator === \"isempty\"\n || operator === \"isnotempty\");\nconst validFilters = ({ value, operator }) => !isNullOrEmptyString(value) || isNoValueOperator(operator);\nconst trimFilters = filter$$1 => {\n filter$$1.filters = filter$$1.filters.filter(validFilters);\n return filter$$1;\n};\nconst findParent = (filters, field, parent) => {\n return filters.reduce((acc, filter$$1) => {\n if (acc) {\n return acc;\n }\n if (filter$$1.filters) {\n return findParent(filter$$1.filters, field, filter$$1);\n }\n else if (filter$$1.field === field) {\n return parent;\n }\n return acc;\n }, undefined); // tslint:disable-line:align\n};\nconst parentLogicOfDefault = (filter$$1, field, def = \"and\") => {\n const parent = findParent(((filter$$1 || {}).filters || []), field);\n return isPresent(parent) ? parent.logic : def;\n};\n/**\n * @hidden\n */\nclass FilterMenuContainerComponent {\n constructor(parentService, childService, localization, cd) {\n this.parentService = parentService;\n this.childService = childService;\n this.localization = localization;\n this.cd = cd;\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.actionsClass = 'k-action-buttons k-button-group';\n this._templateContext = {};\n }\n get filter() {\n return this._filter;\n }\n /**\n * The current root filter.\n * @type {CompositeFilterDescriptor}\n */\n set filter(value) {\n this._filter = cloneFilters(value);\n }\n get childFilter() {\n if (!isPresent(this._childFilter)) {\n this._childFilter = {\n filters: filtersByField(this.filter, (this.column || {}).field),\n logic: parentLogicOfDefault(this.filter, (this.column || {}).field)\n };\n }\n return this._childFilter;\n }\n ngOnInit() {\n this.subscription = this.childService.changes.subscribe(filter$$1 => this._childFilter = filter$$1);\n this.subscription.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n get disabled() {\n return !this.childFilter.filters.some(validFilters);\n }\n get templateContext() {\n this._templateContext.column = this.column;\n this._templateContext.filter = this.childFilter;\n this._templateContext.filterService = this.childService;\n // tslint:disable-next-line:no-string-literal\n this._templateContext[\"$implicit\"] = this.childFilter;\n return this._templateContext;\n }\n get hasTemplate() {\n return isPresent(this.column) && isPresent(this.column.filterMenuTemplateRef);\n }\n submit() {\n const filter$$1 = trimFilters(this.childFilter);\n if (filter$$1.filters.length) {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n removeFilter(root, this.column.field);\n root.filters.push(filter$$1);\n this.parentService.filter(root);\n }\n this.close.emit();\n return false;\n }\n reset() {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n removeFilter(root, this.column.field);\n this.parentService.filter(root);\n this.close.emit();\n }\n get clearText() {\n return this.localization.get(\"filterClearButton\");\n }\n get filterText() {\n return this.localization.get(\"filterFilterButton\");\n }\n}\nFilterMenuContainerComponent.ɵfac = function FilterMenuContainerComponent_Factory(t) { return new (t || FilterMenuContainerComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService, 4), ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nFilterMenuContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuContainerComponent, selectors: [[\"kendo-grid-filter-menu-container\"]], inputs: { actionsClass: \"actionsClass\", filter: \"filter\", column: \"column\" }, outputs: { close: \"close\" }, features: [ɵngcc0.ɵɵProvidersFeature([FilterService])], decls: 10, vars: 7, consts: [[1, \"k-filter-menu\", \"k-group\", \"k-reset\", \"k-state-border-up\", 3, \"submit\", \"reset\"], [1, \"k-filter-menu-container\"], [3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [3, \"ngClass\"], [\"type\", \"reset\", 1, \"k-button\"], [\"type\", \"submit\", 1, \"k-button\", \"k-primary\", 3, \"disabled\"], [\"kendoFilterMenuHost\", \"\", 3, \"filterService\", \"column\", \"filter\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function FilterMenuContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"form\", 0);\n ɵngcc0.ɵɵlistener(\"submit\", function FilterMenuContainerComponent_Template_form_submit_0_listener() { return ctx.submit(); })(\"reset\", function FilterMenuContainerComponent_Template_form_reset_0_listener() { return ctx.reset(); });\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵelementContainerStart(2, 2);\n ɵngcc0.ɵɵtemplate(3, FilterMenuContainerComponent_ng_container_3_Template, 2, 3, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(4, FilterMenuContainerComponent_ng_container_4_Template, 2, 1, \"ng-container\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(5, \"div\", 4);\n ɵngcc0.ɵɵelementStart(6, \"button\", 5);\n ɵngcc0.ɵɵtext(7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"button\", 6);\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.hasTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.actionsClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx.clearText);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.filterText);\n } }, directives: function () { return [ɵngcc7.ɵangular_packages_forms_forms_y, ɵngcc7.NgControlStatusGroup, ɵngcc7.NgForm, ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, ɵngcc5.NgClass, FilterMenuHostDirective, ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterMenuContainerComponent.ctorParameters = () => [\n { type: FilterService, decorators: [{ type: SkipSelf }] },\n { type: FilterService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nFilterMenuContainerComponent.propDecorators = {\n close: [{ type: Output }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n actionsClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuContainerComponent, [{\n type: Component,\n args: [{\n providers: [FilterService],\n selector: 'kendo-grid-filter-menu-container',\n template: `\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n
    \n
    \n
    \n `\n }]\n }], function () { return [{ type: FilterService, decorators: [{\n type: SkipSelf\n }] }, { type: FilterService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { close: [{\n type: Output\n }], actionsClass: [{\n type: Input\n }], filter: [{\n type: Input\n }], column: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterMenuInputWrapperComponent extends FilterInputWrapperComponent {\n constructor() {\n super(null);\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n operatorChange(dataItem) {\n this.currentOperator = dataItem;\n }\n filterChange(filter$$1) {\n this.applyFilter(filter$$1);\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this._currentFilter;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n set currentFilter(value) {\n this._currentFilter = value;\n }\n updateFilter(filter$$1) {\n Object.assign(this.currentFilter, filter$$1);\n return this.filter;\n }\n onChange(value) {\n this.filterChange(this.updateFilter({\n field: this.column.field,\n operator: this.currentOperator,\n value: value\n }));\n }\n}\nFilterMenuInputWrapperComponent.ɵfac = function FilterMenuInputWrapperComponent_Factory(t) { return new (t || FilterMenuInputWrapperComponent)(); };\nFilterMenuInputWrapperComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuInputWrapperComponent, selectors: [[\"kendo-grid-filter-menu-input-wrapper\"]], inputs: { currentFilter: \"currentFilter\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c124, decls: 2, vars: 3, consts: [[\"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"value\", \"valuePrimitive\", \"valueChange\"]], template: function FilterMenuInputWrapperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 0);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FilterMenuInputWrapperComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.operatorChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"data\", ctx.operators)(\"value\", ctx.currentOperator)(\"valuePrimitive\", true);\n } }, directives: [ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nFilterMenuInputWrapperComponent.ctorParameters = () => [];\nFilterMenuInputWrapperComponent.propDecorators = {\n filterService: [{ type: Input }],\n currentFilter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuInputWrapperComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-menu-input-wrapper',\n template: `\n \n \n \n `\n }]\n }], function () { return []; }, { currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass StringFilterMenuInputComponent {\n constructor() {\n this.operators = [];\n }\n}\nStringFilterMenuInputComponent.ɵfac = function StringFilterMenuInputComponent_Factory(t) { return new (t || StringFilterMenuInputComponent)(); };\nStringFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterMenuInputComponent, selectors: [[\"kendo-grid-string-filter-menu-input\"]], inputs: { operators: \"operators\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\" }, decls: 2, vars: 8, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 1, \"k-textbox\", 3, \"filterDelay\", \"ngModel\"]], template: function StringFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelement(1, \"input\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"ngModel\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc7.DefaultValueAccessor, FilterInputDirective, ɵngcc7.NgControlStatus, ɵngcc7.NgModel], encapsulation: 2 });\nStringFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-menu-input',\n template: `\n \n \n \n `\n }]\n }], function () { return []; }, { operators: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a string-filter menu component.\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-configuration-components-for-filter-templates)).\n */\nclass StringFilterMenuComponent extends StringFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nStringFilterMenuComponent.ɵfac = function StringFilterMenuComponent_Factory(t) { return new (t || StringFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStringFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterMenuComponent, selectors: [[\"kendo-grid-string-filter-menu\"]], hostVars: 2, hostBindings: function StringFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 7, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\"]], template: function StringFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-string-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, StringFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template, 1, 5, \"kendo-grid-string-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: [StringFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nStringFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nStringFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a numeric-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass NumericFilterMenuComponent extends NumericFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nNumericFilterMenuComponent.ɵfac = function NumericFilterMenuComponent_Factory(t) { return new (t || NumericFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterMenuComponent, selectors: [[\"kendo-grid-numeric-filter-menu\"]], hostVars: 2, hostBindings: function NumericFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 13, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"]], template: function NumericFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-numeric-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, NumericFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template, 1, 11, \"kendo-grid-numeric-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: function () { return [NumericFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nNumericFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nNumericFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass NumericFilterMenuInputComponent {\n constructor(localization) {\n this.localization = localization;\n this.operators = [];\n /**\n * Specifies the value which is used to increment or decrement the component value.\n * @type {numeric}\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * @type {boolean}\n */\n this.spinners = true;\n }\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nNumericFilterMenuInputComponent.ɵfac = function NumericFilterMenuInputComponent_Factory(t) { return new (t || NumericFilterMenuInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterMenuInputComponent, selectors: [[\"kendo-grid-numeric-filter-menu-input\"]], inputs: { operators: \"operators\", step: \"step\", spinners: \"spinners\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\", min: \"min\", max: \"max\", decimals: \"decimals\", format: \"format\" }, decls: 3, vars: 17, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 3, \"filterDelay\", \"autoCorrect\", \"value\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [3, \"increment\", \"decrement\"]], template: function NumericFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"autoCorrect\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"increment\", ctx.messageFor(\"filterNumericIncrement\"))(\"decrement\", ctx.messageFor(\"filterNumericDecrement\"));\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc6.NumericTextBoxComponent, FilterInputDirective, ɵngcc6.NumericTextBoxCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nNumericFilterMenuInputComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nNumericFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }],\n step: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n spinners: [{ type: Input }],\n decimals: [{ type: Input }],\n format: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-menu-input',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], step: [{\n type: Input\n }], spinners: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], decimals: [{\n type: Input\n }], format: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a date-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass DateFilterMenuComponent extends DateFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will be displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nDateFilterMenuComponent.ɵfac = function DateFilterMenuComponent_Factory(t) { return new (t || DateFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterMenuComponent, selectors: [[\"kendo-grid-date-filter-menu\"]], hostVars: 2, hostBindings: function DateFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 16, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\"]], template: function DateFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-date-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, DateFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template, 1, 14, \"kendo-grid-date-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.min)(\"max\", ctx.max)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: function () { return [DateFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nDateFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nDateFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a Boolean-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass BooleanFilterMenuComponent extends BooleanFilterComponent {\n constructor(localization) {\n super(null, localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n this.idPrefix = guid();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n /**\n * @hidden\n */\n radioId(value) {\n return `${this.idPrefix}_${value}`;\n }\n /**\n * @hidden\n */\n onChange(value) {\n this.applyFilter(this.updateFilter({\n field: this.column.field,\n operator: \"eq\",\n value: value\n }));\n }\n /**\n * @hidden\n */\n isSelected(radioValue) {\n return this.filtersByField(this.column.field).some(({ value }) => value === radioValue);\n }\n}\nBooleanFilterMenuComponent.ɵfac = function BooleanFilterMenuComponent_Factory(t) { return new (t || BooleanFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBooleanFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BooleanFilterMenuComponent, selectors: [[\"kendo-grid-boolean-filter-menu\"]], hostVars: 2, hostBindings: function BooleanFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, \"k-radio-list\", \"k-reset\"], [4, \"ngFor\", \"ngForOf\"], [\"type\", \"radio\", 1, \"k-radio\", 3, \"name\", \"checked\", \"change\"], [1, \"k-radio-label\"]], template: function BooleanFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, BooleanFilterMenuComponent_li_1_Template, 4, 5, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.items);\n } }, directives: [ɵngcc5.NgForOf], encapsulation: 2 });\n/** @nocollapse */\nBooleanFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nBooleanFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n filter: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BooleanFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-boolean-filter-menu',\n template: `\n
      \n
    • \n \n \n
    • \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n *\n * > List the following components as `entryComponents` in the GridModule.\n */\nconst filterMenuComponentFactory = (type) => ({\n \"boolean\": BooleanFilterMenuComponent,\n \"date\": DateFilterMenuComponent,\n \"numeric\": NumericFilterMenuComponent,\n \"text\": StringFilterMenuComponent\n}[type]);\n\n/**\n * @hidden\n */\nclass FilterMenuHostDirective extends FilterHostDirective {\n constructor(host, resolver) {\n super(host, resolver);\n }\n componentType() {\n if (isPresent(this.column) && !isNullOrEmptyString(this.column.filter)) {\n return filterMenuComponentFactory(this.column.filter);\n }\n return StringFilterMenuComponent;\n }\n initComponent(ctx) {\n super.initComponent(ctx);\n this.component.instance.filterService = this.filterService;\n }\n}\nFilterMenuHostDirective.ɵfac = function FilterMenuHostDirective_Factory(t) { return new (t || FilterMenuHostDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver)); };\nFilterMenuHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterMenuHostDirective, selectors: [[\"\", \"kendoFilterMenuHost\", \"\"]], inputs: { filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFilterMenuHostDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ComponentFactoryResolver }\n];\nFilterMenuHostDirective.propDecorators = {\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuHostDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterMenuHost]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ComponentFactoryResolver }]; }, { filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass DateFilterMenuInputComponent {\n constructor(popupService, localizationService) {\n this.popupService = popupService;\n this.localizationService = localizationService;\n this.operators = [];\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n open(picker) {\n this.subscription = this.popupService.onClose\n .pipe(filter(() => picker.isActive))\n .subscribe(e => e.preventDefault());\n }\n messageFor(key) {\n return this.localizationService.get(key);\n }\n}\nDateFilterMenuInputComponent.ɵfac = function DateFilterMenuInputComponent_Factory(t) { return new (t || DateFilterMenuInputComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterMenuInputComponent, selectors: [[\"kendo-grid-date-filter-menu-input\"]], inputs: { operators: \"operators\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\", format: \"format\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", min: \"min\", max: \"max\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\" }, decls: 4, vars: 19, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 3, \"filterDelay\", \"value\", \"placeholder\", \"formatPlaceholder\", \"format\", \"min\", \"max\", \"activeView\", \"bottomView\", \"topView\", \"weekNumber\", \"open\"], [\"picker\", \"\"], [3, \"toggle\", \"today\"]], template: function DateFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n const _r1 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-datepicker\", 1, 2);\n ɵngcc0.ɵɵlistener(\"open\", function DateFilterMenuInputComponent_Template_kendo_datepicker_open_1_listener() { ɵngcc0.ɵɵrestoreView(_r1); const _r0 = ɵngcc0.ɵɵreference(2); return ctx.open(_r0); });\n ɵngcc0.ɵɵelement(3, \"kendo-datepicker-messages\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"placeholder\", ctx.placeholder)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"format\", ctx.format)(\"min\", ctx.min)(\"max\", ctx.max)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"toggle\", ctx.messageFor(\"filterDateToggle\"))(\"today\", ctx.messageFor(\"filterDateToday\"));\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc9.DatePickerComponent, FilterInputDirective, ɵngcc9.DatePickerCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nDateFilterMenuInputComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: LocalizationService }\n];\nDateFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-menu-input',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }], format: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }] }); })();\n\nconst INTERNAL_COMPONENTS$2 = [\n FilterMenuComponent,\n FilterMenuContainerComponent,\n FilterMenuInputWrapperComponent,\n StringFilterMenuInputComponent,\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n NumericFilterMenuInputComponent,\n DateFilterMenuInputComponent,\n DateFilterMenuComponent,\n FilterMenuHostDirective,\n BooleanFilterMenuComponent\n];\nconst ENTRY_COMPONENTS$1 = [\n StringFilterMenuComponent,\n NumericFilterMenuComponent,\n DateFilterMenuComponent,\n BooleanFilterMenuComponent\n];\n/**\n * @hidden\n */\nclass FilterMenuModule {\n static exports() {\n return [\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n DateFilterMenuComponent,\n BooleanFilterMenuComponent,\n SharedFilterModule.exports()\n ];\n }\n}\nFilterMenuModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FilterMenuModule });\nFilterMenuModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FilterMenuModule_Factory(t) { return new (t || FilterMenuModule)(); }, imports: [[SharedFilterModule], SharedFilterModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FilterMenuModule, { declarations: [FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent], imports: [SharedFilterModule], exports: [FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, SharedFilterModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS$2],\n entryComponents: ENTRY_COMPONENTS$1,\n exports: [INTERNAL_COMPONENTS$2, SharedFilterModule],\n imports: [SharedFilterModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ColumnListComponent {\n constructor(element, ngZone, renderer) {\n this.element = element;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.reset = new EventEmitter();\n this.apply = new EventEmitter();\n this.columnChange = new EventEmitter();\n this.autoSync = true;\n this.allowHideAll = false;\n this.actionsClass = 'k-action-buttons';\n this.unlockedCount = 0;\n }\n get className() {\n return true;\n }\n set columns(value) {\n this._columns = value.filter(column => column.includeInChooser !== false);\n this.allColumns = value;\n this.updateColumnState();\n }\n get columns() {\n return this._columns;\n }\n isDisabled(column) {\n return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||\n (this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);\n }\n ngOnInit() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {\n if (hasClasses(e.target, 'k-checkbox')) {\n if (this.autoSync) {\n const index = parseInt(e.target.getAttribute('data-index'), 10);\n const column = this.columns[index];\n const hidden = !e.target.checked;\n if (Boolean(column.hidden) !== hidden) {\n this.ngZone.run(() => {\n column.hidden = hidden;\n this.columnChange.emit([column]);\n });\n }\n }\n else {\n this.updateDisabled();\n }\n }\n });\n });\n }\n ngOnDestroy() {\n if (this.domSubscriptions) {\n this.domSubscriptions();\n }\n }\n cancelChanges() {\n this.forEachCheckBox((element, index) => {\n element.checked = !this.columns[index].hidden;\n });\n this.updateDisabled();\n this.reset.emit();\n }\n applyChanges() {\n const changed = [];\n this.forEachCheckBox((element, index) => {\n const column = this.columns[index];\n const hidden = !element.checked;\n if (Boolean(column.hidden) !== hidden) {\n column.hidden = hidden;\n changed.push(column);\n }\n });\n this.updateDisabled();\n this.apply.emit(changed);\n }\n forEachCheckBox(callback) {\n const checkboxes = this.element.nativeElement.getElementsByClassName('k-checkbox');\n const length = checkboxes.length;\n for (let idx = 0; idx < length; idx++) {\n callback(checkboxes[idx], idx);\n }\n }\n updateDisabled() {\n if (this.allowHideAll && !this.hasLocked) {\n return;\n }\n const checkedItems = [];\n this.forEachCheckBox((checkbox, index) => {\n if (checkbox.checked) {\n checkedItems.push({ checkbox, index });\n }\n checkbox.disabled = false;\n });\n if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {\n checkedItems[0].checkbox.disabled = true;\n }\n else if (this.hasLocked && !this.hasUnlockedFiltered) {\n const columns = this.columns;\n const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);\n if (checkedUnlocked.length === 1) {\n checkedUnlocked[0].checkbox.disabled = true;\n }\n }\n }\n updateColumnState() {\n this.hasLocked = this.allColumns.filter(column => column.locked && (!column.hidden || column.includeInChooser !== false)).length > 0;\n this.hasVisibleLocked = this.allColumns.filter(column => column.locked && !column.hidden).length > 0;\n this.unlockedCount = this.columns.filter(column => !column.locked && !column.hidden).length;\n const filteredColumns = this.allColumns.filter(column => column.includeInChooser === false && !column.hidden);\n if (filteredColumns.length) {\n this.hasFiltered = filteredColumns.length > 0;\n this.hasUnlockedFiltered = filteredColumns.filter(column => !column.locked).length > 0;\n }\n else {\n this.hasFiltered = false;\n this.hasUnlockedFiltered = false;\n }\n }\n}\nColumnListComponent.ɵfac = function ColumnListComponent_Factory(t) { return new (t || ColumnListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nColumnListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnListComponent, selectors: [[\"kendo-grid-columnlist\"]], hostVars: 2, hostBindings: function ColumnListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-column-list-wrapper\", ctx.className);\n } }, inputs: { autoSync: \"autoSync\", allowHideAll: \"allowHideAll\", actionsClass: \"actionsClass\", columns: \"columns\", applyText: \"applyText\", resetText: \"resetText\" }, outputs: { reset: \"reset\", apply: \"apply\", columnChange: \"columnChange\" }, decls: 3, vars: 2, consts: [[1, \"k-column-list\"], [\"class\", \"k-column-list-item\", 4, \"ngFor\", \"ngForOf\"], [3, \"ngClass\", 4, \"ngIf\"], [1, \"k-column-list-item\"], [\"type\", \"checkbox\", 1, \"k-checkbox\", 3, \"checked\", \"disabled\"], [1, \"k-checkbox-label\"], [3, \"ngClass\"], [\"type\", \"button\", 1, \"k-button\", 3, \"click\"], [\"type\", \"button\", 1, \"k-button\", \"k-primary\", 3, \"click\"]], template: function ColumnListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵtemplate(1, ColumnListComponent_label_1_Template, 4, 4, \"label\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ColumnListComponent_div_2_Template, 5, 3, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.columns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.autoSync);\n } }, directives: [ɵngcc5.NgForOf, ɵngcc5.NgIf, ɵngcc5.NgClass], encapsulation: 2 });\n/** @nocollapse */\nColumnListComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 }\n];\nColumnListComponent.propDecorators = {\n className: [{ type: HostBinding, args: [\"class.k-column-list-wrapper\",] }],\n reset: [{ type: Output }],\n apply: [{ type: Output }],\n columnChange: [{ type: Output }],\n columns: [{ type: Input }],\n autoSync: [{ type: Input }],\n allowHideAll: [{ type: Input }],\n applyText: [{ type: Input }],\n resetText: [{ type: Input }],\n actionsClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnlist',\n template: `\n
    \n \n
    \n
    \n \n \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { reset: [{\n type: Output\n }], apply: [{\n type: Output\n }], columnChange: [{\n type: Output\n }], autoSync: [{\n type: Input\n }], allowHideAll: [{\n type: Input\n }], actionsClass: [{\n type: Input\n }], className: [{\n type: HostBinding,\n args: [\"class.k-column-list-wrapper\"]\n }], columns: [{\n type: Input\n }], applyText: [{\n type: Input\n }], resetText: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the component for selecting columns in the Grid. To enable the user to show or hide columns,\n * add the component inside a [`ToolbarTemplate`]({% slug api_grid_toolbartemplatedirective %}) directive.\n *\n * @example\n * {% meta height:300 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnChooserComponent {\n constructor(localization, columnInfoService, popupService, ngZone, renderer, changeDetector) {\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.popupService = popupService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.changeDetector = changeDetector;\n /**\n * Specifies if the changes in the visibility of the column will be immediately applied.\n */\n this.autoSync = false;\n /**\n * Specifies if all columns can be hidden.\n */\n this.allowHideAll = true;\n }\n get columns() {\n return this.columnInfoService.leafNamedColumns;\n }\n ngOnDestroy() {\n this.close();\n }\n /**\n * @hidden\n */\n toggle(anchor, template) {\n if (!this.popupRef) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: anchor,\n content: template,\n positionMode: 'absolute',\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction }\n });\n this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');\n this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen(\"document\", \"click\", ({ target }) => {\n if (!closest(target, node => node === this.popupRef.popupElement || node === anchor)) {\n this.close();\n }\n }));\n }\n else {\n this.close();\n }\n }\n /**\n * @hidden\n */\n onApply(changed) {\n this.close();\n if (changed.length) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n }\n /**\n * @hidden\n */\n onChange(changed) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n close() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n this.detachClose();\n }\n detachClose() {\n if (this.closeClick) {\n this.closeClick();\n this.closeClick = null;\n }\n }\n}\nColumnChooserComponent.ɵfac = function ColumnChooserComponent_Factory(t) { return new (t || ColumnChooserComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnChooserComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnChooserComponent, selectors: [[\"kendo-grid-column-chooser\"]], inputs: { autoSync: \"autoSync\", allowHideAll: \"allowHideAll\" }, decls: 5, vars: 1, consts: [[\"type\", \"button\", 1, \"k-button\", \"k-bare\", \"k-button-icon\", 3, \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-columns\"], [\"template\", \"\"], [1, \"k-column-chooser-title\"], [3, \"columns\", \"applyText\", \"resetText\", \"autoSync\", \"allowHideAll\", \"apply\", \"columnChange\"]], template: function ColumnChooserComponent_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnChooserComponent_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r6); const _r0 = ɵngcc0.ɵɵreference(1); const _r1 = ɵngcc0.ɵɵreference(4); return ctx.toggle(_r0, _r1); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnChooserComponent_ng_template_3_Template, 3, 6, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"columns\"));\n } }, directives: [ColumnListComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnChooserComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: PopupService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ChangeDetectorRef }\n];\nColumnChooserComponent.propDecorators = {\n autoSync: [{ type: Input }],\n allowHideAll: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnChooserComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-column-chooser',\n template: `\n \n \n {{ localization.get('columns') }}\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }]; }, { autoSync: [{\n type: Input\n }], allowHideAll: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the service that is passed to the\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuService {\n constructor() {\n /**\n * @hidden\n */\n this.closeMenu = new EventEmitter();\n }\n /**\n * Closes the column menu.\n */\n close() {\n this.closeMenu.emit();\n }\n}\nColumnMenuService.ɵfac = function ColumnMenuService_Factory(t) { return new (t || ColumnMenuService)(); };\nColumnMenuService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnMenuService, factory: ColumnMenuService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ColumnMenuItemBase {\n constructor() {\n this.hostClass = true;\n }\n ngOnInit() {\n if (isDevMode() && !this.service) {\n throw new Error('The service input of the predefined column menu components is mandatory.');\n }\n }\n /**\n * @hidden\n */\n close() {\n this.service.close();\n }\n}\nColumnMenuItemBase.ɵfac = function ColumnMenuItemBase_Factory(t) { return new (t || ColumnMenuItemBase)(); };\nColumnMenuItemBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuItemBase, hostVars: 2, hostBindings: function ColumnMenuItemBase_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-columnmenu-item-wrapper\", ctx.hostClass);\n } }, inputs: { service: \"service\" } });\nColumnMenuItemBase.propDecorators = {\n service: [{ type: Input }],\n hostClass: [{ type: HostBinding, args: ['class.k-columnmenu-item-wrapper',] }]\n};\n\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the component for selecting columns in the Grid that can be placed\n * inside a [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-chooser` component.\n *\n * @example\n * {% meta height:300 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnMenuChooserComponent extends ColumnMenuItemBase {\n constructor(localization, columnInfoService, changeDetector) {\n super();\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.changeDetector = changeDetector;\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n /**\n * Specifies if the content is expanded.\n */\n this.expanded = false;\n /**\n * @hidden\n */\n this.actionsClass = 'k-columnmenu-actions';\n }\n get columns() {\n return this.columnInfoService.leafNamedColumns;\n }\n /**\n * @hidden\n */\n onApply(changed) {\n this.close();\n if (changed.length) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n }\n}\nColumnMenuChooserComponent.ɵfac = function ColumnMenuChooserComponent_Factory(t) { return new (t || ColumnMenuChooserComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnMenuChooserComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuChooserComponent, selectors: [[\"kendo-grid-columnmenu-chooser\"]], inputs: { expanded: \"expanded\" }, outputs: { expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [[\"icon\", \"columns\", 3, \"text\", \"expanded\", \"collapse\", \"expand\"], [\"kendoGridColumnMenuItemContentTemplate\", \"\"], [3, \"applyText\", \"resetText\", \"columns\", \"autoSync\", \"allowHideAll\", \"actionsClass\", \"apply\"]], template: function ColumnMenuChooserComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"collapse\", function ColumnMenuChooserComponent_Template_kendo_grid_columnmenu_item_collapse_0_listener() { return ctx.collapse.emit(); })(\"expand\", function ColumnMenuChooserComponent_Template_kendo_grid_columnmenu_item_expand_0_listener() { return ctx.expand.emit(); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuChooserComponent_ng_template_1_Template, 1, 6, \"ng-template\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"columns\"))(\"expanded\", ctx.expanded);\n } }, directives: function () { return [ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuChooserComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: ChangeDetectorRef }\n];\nColumnMenuChooserComponent.propDecorators = {\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n expanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuChooserComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-chooser',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the component for editing column filters in the Grid that can be placed\n * inside a [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-filter` component.\n *\n * @example\n * {% meta height:400 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnMenuFilterComponent extends ColumnMenuItemBase {\n constructor(localization) {\n super();\n this.localization = localization;\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n /**\n * Specifies if the content is expanded.\n */\n this.expanded = false;\n /**\n * @hidden\n */\n this.actionsClass = 'k-columnmenu-actions';\n }\n}\nColumnMenuFilterComponent.ɵfac = function ColumnMenuFilterComponent_Factory(t) { return new (t || ColumnMenuFilterComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColumnMenuFilterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuFilterComponent, selectors: [[\"kendo-grid-columnmenu-filter\"]], inputs: { expanded: \"expanded\" }, outputs: { expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [[\"icon\", \"filter\", 3, \"text\", \"expanded\", \"collapse\", \"expand\"], [\"kendoGridColumnMenuItemContentTemplate\", \"\"], [3, \"column\", \"filter\", \"actionsClass\", \"close\"]], template: function ColumnMenuFilterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"collapse\", function ColumnMenuFilterComponent_Template_kendo_grid_columnmenu_item_collapse_0_listener() { return ctx.collapse.emit(); })(\"expand\", function ColumnMenuFilterComponent_Template_kendo_grid_columnmenu_item_expand_0_listener() { return ctx.expand.emit(); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuFilterComponent_ng_template_1_Template, 1, 3, \"ng-template\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"filter\"))(\"expanded\", ctx.expanded);\n } }, directives: function () { return [ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, FilterMenuContainerComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuFilterComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nColumnMenuFilterComponent.propDecorators = {\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n expanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuFilterComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-filter',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the content template of the\n * [`kendo-grid-columnmenu-item`]({% slug api_grid_columnmenuitemcomponent %}) component.\n * Provides an option for specifying the content of a column item.\n * To define the content template, nest an `` tag with the\n * `kendoGridColumnMenuItemContentTemplate` directive inside a ``.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * Item Content\n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuItemContentTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnMenuItemContentTemplateDirective.ɵfac = function ColumnMenuItemContentTemplateDirective_Factory(t) { return new (t || ColumnMenuItemContentTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nColumnMenuItemContentTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuItemContentTemplateDirective, selectors: [[\"\", \"kendoGridColumnMenuItemContentTemplate\", \"\"]] });\n/** @nocollapse */\nColumnMenuItemContentTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuItemContentTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnMenuItemContentTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents an item that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuItemComponent {\n constructor() {\n /**\n * Fires when the item is clicked.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n this.contentState = 'collapsed';\n }\n get iconClass() {\n return `k-i-${this.icon}`;\n }\n ngOnChanges(changes) {\n if (changes.expanded) {\n this.updateContentState();\n }\n }\n /**\n * @hidden\n */\n onClick(e) {\n this.itemClick.emit(e);\n if (this.contentTemplate) {\n this.expanded = !this.expanded;\n this.updateContentState();\n if (this.expanded) {\n this.expand.emit();\n }\n else {\n this.collapse.emit();\n }\n }\n }\n updateContentState() {\n this.contentState = this.expanded ? 'expanded' : 'collapsed';\n }\n}\nColumnMenuItemComponent.ɵfac = function ColumnMenuItemComponent_Factory(t) { return new (t || ColumnMenuItemComponent)(); };\nColumnMenuItemComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuItemComponent, selectors: [[\"kendo-grid-columnmenu-item\"]], contentQueries: function ColumnMenuItemComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuItemContentTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);\n } }, inputs: { expanded: \"expanded\", icon: \"icon\", text: \"text\", selected: \"selected\", disabled: \"disabled\" }, outputs: { itemClick: \"itemClick\", expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 7, consts: [[1, \"k-columnmenu-item\", 3, \"click\"], [\"class\", \"k-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"style\", \"overflow:hidden;\", \"class\", \"k-columnmenu-item-content\", 4, \"ngIf\"], [1, \"k-icon\", 3, \"ngClass\"], [1, \"k-columnmenu-item-content\", 2, \"overflow\", \"hidden\"], [3, \"ngTemplateOutlet\"]], template: function ColumnMenuItemComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnMenuItemComponent_Template_div_click_0_listener($event) { return ctx.onClick($event); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuItemComponent_span_1_Template, 1, 1, \"span\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnMenuItemComponent_div_3_Template, 3, 2, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-selected\", ctx.selected)(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contentTemplate);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgClass, ɵngcc5.NgTemplateOutlet], encapsulation: 2, data: { animation: [\n trigger('state', [\n state('collapsed', style({ display: 'none' })),\n state('expanded', style({ display: 'block' })),\n transition('collapsed => expanded', [\n style({\n height: '0px',\n display: 'block'\n }),\n animate('100ms ease-in', style({\n height: '*'\n }))\n ]),\n transition('expanded => collapsed', [\n style({\n height: '*'\n }),\n animate('100ms ease-in', style({\n height: '0px'\n }))\n ])\n ])\n ] } });\nColumnMenuItemComponent.propDecorators = {\n itemClick: [{ type: Output }],\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n icon: [{ type: Input }],\n text: [{ type: Input }],\n selected: [{ type: Input }],\n disabled: [{ type: Input }],\n expanded: [{ type: Input }],\n contentTemplate: [{ type: ContentChild, args: [ColumnMenuItemContentTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuItemComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('state', [\n state('collapsed', style({ display: 'none' })),\n state('expanded', style({ display: 'block' })),\n transition('collapsed => expanded', [\n style({\n height: '0px',\n display: 'block'\n }),\n animate('100ms ease-in', style({\n height: '*'\n }))\n ]),\n transition('expanded => collapsed', [\n style({\n height: '*'\n }),\n animate('100ms ease-in', style({\n height: '0px'\n }))\n ])\n ])\n ],\n selector: 'kendo-grid-columnmenu-item',\n template: `\n
    \n \n \n {{ text }}\n
    \n
    \n \n \n
    \n `\n }]\n }], function () { return []; }, { itemClick: [{\n type: Output\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }], icon: [{\n type: Input\n }], text: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabled: [{\n type: Input\n }], contentTemplate: [{\n type: ContentChild,\n args: [ColumnMenuItemContentTemplateDirective]\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents a column-menu item for sorting Grid columns that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n * Allows the user to sort the column.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-sort` component.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }, { Field1: 'Foo1', Field2: 'Bar1' }];\n * }\n *\n * ```\n */\nclass ColumnMenuSortComponent extends ColumnMenuItemBase {\n constructor(localization, sortService) {\n super();\n this.localization = localization;\n this.sortService = sortService;\n }\n get sortedAsc() {\n const descriptor = this.descriptor;\n return descriptor && (!descriptor.dir || descriptor.dir === 'asc');\n }\n get sortedDesc() {\n const descriptor = this.descriptor;\n return descriptor && descriptor.dir === 'desc';\n }\n /**\n * @hidden\n */\n toggleSort(dir) {\n const field = this.service.column.field;\n const { mode, allowUnsort } = normalize$1(this.service.sortable);\n const descriptor = this.descriptor;\n const sort = mode === 'multiple' ? this.service.sort.filter(s => s.field !== field) : [];\n if (descriptor && descriptor.dir === dir) {\n if (!allowUnsort) {\n return;\n }\n }\n else {\n sort.push({ field, dir });\n }\n this.sortService.sort(sort);\n this.close();\n }\n get descriptor() {\n return [].concat(this.service.sort || []).find(s => s.field === this.service.column.field);\n }\n}\nColumnMenuSortComponent.ɵfac = function ColumnMenuSortComponent_Factory(t) { return new (t || ColumnMenuSortComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(SortService)); };\nColumnMenuSortComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuSortComponent, selectors: [[\"kendo-grid-columnmenu-sort\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 4, consts: [[\"icon\", \"sort-asc-sm\", 3, \"text\", \"selected\", \"itemClick\"], [\"icon\", \"sort-desc-sm\", 3, \"text\", \"selected\", \"itemClick\"]], template: function ColumnMenuSortComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuSortComponent_Template_kendo_grid_columnmenu_item_itemClick_0_listener() { return ctx.toggleSort(\"asc\"); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-columnmenu-item\", 1);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuSortComponent_Template_kendo_grid_columnmenu_item_itemClick_1_listener() { return ctx.toggleSort(\"desc\"); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"sortAscending\"))(\"selected\", ctx.sortedAsc);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"sortDescending\"))(\"selected\", ctx.sortedDesc);\n } }, directives: [ColumnMenuItemComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnMenuSortComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: SortService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuSortComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-sort',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: SortService }]; }, null); })();\n\nconst POPUP_CLASS = 'k-grid-columnmenu-popup';\n/**\n * Represents the [column menu]({% slug columnmenu_grid %}) component.\n */\nclass ColumnMenuComponent {\n constructor(popupService, localization, service) {\n this.popupService = popupService;\n this.localization = localization;\n this.service = service;\n /**\n * @hidden\n */\n this.standalone = true;\n /**\n * The settings for the Column Menu.\n */\n this.settings = {};\n /**\n * @hidden\n */\n this.sortable = true;\n /**\n * @hidden\n */\n this.expandedFilter = false;\n /**\n * @hidden\n */\n this.expandedColumns = false;\n this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));\n }\n /**\n * @hidden\n */\n get isActive() {\n return (this.hasFilter && filtersByField(this.filter, this.column.field).length > 0) ||\n (!this.sortable && this.hasSort && this.sort.find(descriptor => descriptor.field === this.column.field));\n }\n /**\n * @hidden\n */\n get hasFilter() {\n return hasFilter(this.settings, this.column);\n }\n /**\n * @hidden\n */\n get hasSort() {\n return hasSort(this.settings, this.column);\n }\n /**\n * @hidden\n */\n get hasColumnChooser() {\n return hasColumnChooser(this.settings);\n }\n /**\n * @hidden\n */\n get hasLock() {\n return hasLock(this.settings, this.column);\n }\n ngOnChanges() {\n this.service.column = this.column;\n this.service.sort = this.sort;\n this.service.filter = this.filter;\n this.service.sortable = this.sortable;\n }\n ngOnDestroy() {\n this.close();\n this.closeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n toggle(e, anchor, template) {\n e.preventDefault();\n this.expandedFilter = !this.hasColumnChooser;\n this.expandedColumns = !this.hasFilter;\n this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);\n }\n /**\n * @hidden\n */\n close() {\n this.popupService.destroy();\n this.popupRef = null;\n }\n /**\n * @hidden\n */\n onColumnsExpand() {\n this.expandedColumns = true;\n this.expandedFilter = false;\n }\n /**\n * @hidden\n */\n onFilterExpand() {\n this.expandedFilter = true;\n this.expandedColumns = false;\n }\n}\nColumnMenuComponent.ɵfac = function ColumnMenuComponent_Factory(t) { return new (t || ColumnMenuComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnMenuService)); };\nColumnMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuComponent, selectors: [[\"kendo-grid-column-menu\"]], hostVars: 2, hostBindings: function ColumnMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-column-menu-standalone\", ctx.standalone);\n } }, inputs: { standalone: \"standalone\", settings: \"settings\", sortable: \"sortable\", column: \"column\", sort: \"sort\", filter: \"filter\", columnMenuTemplate: \"columnMenuTemplate\" }, features: [ɵngcc0.ɵɵProvidersFeature([ColumnMenuService]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 7, vars: 4, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-grid-column-menu\", \"k-grid-filter\", 3, \"ngClass\", \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-more-vertical\"], [\"template\", \"\"], [\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"service\", 4, \"ngIf\"], [3, \"service\", \"expanded\", \"expand\", 4, \"ngIf\"], [3, \"service\"], [3, \"service\", \"expanded\", \"expand\"]], template: function ColumnMenuComponent_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnMenuComponent_Template_a_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); const _r0 = ɵngcc0.ɵɵreference(1); const _r1 = ɵngcc0.ɵɵreference(4); return ctx.toggle($event, _r0, _r1); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnMenuComponent_ng_template_3_Template, 1, 5, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(5, ColumnMenuComponent_ng_template_5_Template, 4, 4, \"ng-template\", null, 4, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(2, _c155, ctx.isActive));\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"columnMenu\"));\n } }, directives: function () { return [ɵngcc5.NgClass, ɵngcc5.NgTemplateOutlet, ɵngcc5.NgIf, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: LocalizationService },\n { type: ColumnMenuService }\n];\nColumnMenuComponent.propDecorators = {\n standalone: [{ type: HostBinding, args: ['class.k-grid-column-menu-standalone',] }, { type: Input }],\n column: [{ type: Input }],\n settings: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n sortable: [{ type: Input }],\n columnMenuTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuComponent, [{\n type: Component,\n args: [{\n providers: [ColumnMenuService],\n selector: 'kendo-grid-column-menu',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: ɵngcc1.LocalizationService }, { type: ColumnMenuService }]; }, { standalone: [{\n type: HostBinding,\n args: ['class.k-grid-column-menu-standalone']\n }, {\n type: Input\n }], settings: [{\n type: Input\n }], sortable: [{\n type: Input\n }], column: [{\n type: Input\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], columnMenuTemplate: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents a column-menu item that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n * Allows the user to lock or unlock the columns.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-lock` component.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuLockComponent extends ColumnMenuItemBase {\n constructor(localization, columnInfoService, changeDetector) {\n super();\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.changeDetector = changeDetector;\n }\n get text() {\n return this.localization.get(this.locked ? 'unlock' : 'lock');\n }\n get icon() {\n return this.locked ? 'unlock' : 'lock';\n }\n get disabled() {\n return !this.locked && this.columnInfoService.unlockedRootCount < 2;\n }\n /**\n * @hidden\n */\n toggleColumn() {\n this.toggleHierarchy(!this.locked);\n this.close();\n this.changeDetector.markForCheck();\n }\n toggleHierarchy(locked) {\n let root = this.service.column;\n while (root.parent) {\n root = root.parent;\n }\n const columns = [root];\n const allChanged = [];\n while (columns.length) {\n const column = columns.shift();\n column.locked = locked;\n allChanged.push(column);\n if (column.hasChildren) {\n columns.push(...column.childrenArray);\n }\n }\n this.columnInfoService.changeLocked(allChanged);\n }\n get locked() {\n return this.service.column.locked;\n }\n}\nColumnMenuLockComponent.ɵfac = function ColumnMenuLockComponent_Factory(t) { return new (t || ColumnMenuLockComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnMenuLockComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuLockComponent, selectors: [[\"kendo-grid-columnmenu-lock\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 3, consts: [[3, \"text\", \"icon\", \"disabled\", \"itemClick\"]], template: function ColumnMenuLockComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuLockComponent_Template_kendo_grid_columnmenu_item_itemClick_0_listener() { return ctx.toggleColumn(); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.text)(\"icon\", ctx.icon)(\"disabled\", ctx.disabled);\n } }, directives: [ColumnMenuItemComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnMenuLockComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuLockComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-lock',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\nconst COMPONENTS$1 = [\n ColumnListComponent,\n ColumnChooserComponent,\n ColumnMenuChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuComponent,\n ColumnMenuLockComponent,\n ColumnMenuTemplateDirective\n];\n/**\n * @hidden\n */\nclass ColumnMenuModule {\n static exports() {\n return [\n ColumnChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuLockComponent,\n ColumnMenuChooserComponent,\n ColumnMenuTemplateDirective,\n ColumnMenuComponent\n ];\n }\n}\nColumnMenuModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ColumnMenuModule });\nColumnMenuModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ColumnMenuModule_Factory(t) { return new (t || ColumnMenuModule)(); }, imports: [[CommonModule, FilterMenuModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColumnMenuModule, { declarations: function () { return [ColumnListComponent, ColumnChooserComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective]; }, imports: function () { return [CommonModule, FilterMenuModule]; }, exports: function () { return [ColumnListComponent, ColumnChooserComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENTS$1],\n imports: [CommonModule, FilterMenuModule],\n exports: [COMPONENTS$1]\n }]\n }], null, null); })();\n\nconst exportedModules$2 = [\n HeaderComponent,\n HeaderTemplateDirective,\n ColumnHandleDirective,\n SelectAllCheckboxDirective\n];\nconst importedModules$2 = [\n CommonModule,\n GroupModule,\n RowFilterModule,\n FilterMenuModule,\n SharedModule,\n DragAndDropModule,\n ColumnMenuModule\n];\n/**\n * @hidden\n */\nclass HeaderModule {\n static exports() {\n return [\n HeaderTemplateDirective,\n SelectAllCheckboxDirective\n ];\n }\n}\nHeaderModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: HeaderModule });\nHeaderModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function HeaderModule_Factory(t) { return new (t || HeaderModule)(); }, imports: [[...importedModules$2]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(HeaderModule, { declarations: [HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective], imports: [CommonModule, GroupModule, RowFilterModule, FilterMenuModule, SharedModule, DragAndDropModule, ColumnMenuModule], exports: [HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$2],\n exports: [exportedModules$2],\n imports: [...importedModules$2]\n }]\n }], null, null); })();\n\n/**\n * Represents the command columns of the Grid. You have to define the content of the\n * column inside an `` tag. The template context is set to the current\n * data item. For more information and examples on using the passed fields\n * and the command directives, refer to the article on\n * [editing the Grid in Angular Reactive Forms]({% slug editing_reactive_forms_grid %}).\n *\n * The following additional fields are passed:\n * - `columnIndex`—The current column index.\n * - `rowIndex`—The current data row index. If inside a new item row, `rowIndex`is `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n *\n * Usually, the template contains CRUD command directives such as:\n * - [`EditCommandDirective`]({% slug api_grid_editcommanddirective %})\n * - [`RemoveCommandDirective`]({% slug api_grid_removecommanddirective %})\n * - [`CancelCommandDirective`]({% slug api_grid_cancelcommanddirective %})\n * - [`SaveCommandDirective`]({% slug api_grid_savecommanddirective %})\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass CommandColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n}\nCommandColumnComponent.ɵfac = function CommandColumnComponent_Factory(t) { return new (t || CommandColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nCommandColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CommandColumnComponent, selectors: [[\"kendo-grid-command-column\"]], contentQueries: function CommandColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CommandColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CommandColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCommandColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nCommandColumnComponent.propDecorators = {\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CommandColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CommandColumnComponent)\n }\n ],\n selector: 'kendo-grid-command-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }] }); })();\n\n/**\n * Represents the checkbox for selecting columns in the Grid. If the column is\n * defined as empty, it renders a default checkbox for row selection.\n * You can also define the content of the column inside an `` tag.\n * The input requires you to include the `SelectionCheckbox` option.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `columnIndex`—The current column index.\n * - `rowIndex`—The current data row index. If inside a new item row, it will be `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n *\n * For more examples, refer to:\n * - [Selecting or deselecting all items on a page]({% slug selection_grid %}#toc-select-all-feature)\n * - [Persisting the selection]({% slug selection_grid %}#toc-in-combination-with-the-select-all-feature)\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * Select row \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass CheckboxColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n /*\n * @hidden\n */\n this.isCheckboxColumn = true;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n}\nCheckboxColumnComponent.ɵfac = function CheckboxColumnComponent_Factory(t) { return new (t || CheckboxColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nCheckboxColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CheckboxColumnComponent, selectors: [[\"kendo-grid-checkbox-column\"]], contentQueries: function CheckboxColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n } }, inputs: { showSelectAll: \"showSelectAll\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CheckboxColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CheckboxColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCheckboxColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nCheckboxColumnComponent.propDecorators = {\n showSelectAll: [{ type: Input }],\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CheckboxColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CheckboxColumnComponent)\n }\n ],\n selector: 'kendo-grid-checkbox-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { showSelectAll: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }] }); })();\n\n/* tslint:disable:no-input-rename */\n/**\n * Represents the row-selection checkbox of the Grid. The directive expects the\n * index of the current row as an input parameter. Inside the\n * [`CheckboxColumnComponent`]({% slug api_grid_checkboxcolumncomponent %}), apply the\n * directive to an `input` element. When the user clicks the checkbox that is associated\n * with the directive, a [`selectionChange`]({% slug api_grid_gridcomponent %}#toc-selectionChange)\n * event is triggered.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Select row \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass SelectionCheckboxDirective {\n constructor(selectionService, el, renderer, ngZone) {\n this.selectionService = selectionService;\n this.el = el;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.type = \"checkbox\";\n this.ngZone.runOutsideAngular(() => {\n this.destroyClick = this.renderer.listen(this.el.nativeElement, \"click\", this.onClick.bind(this));\n this.destroyKeyDown = this.renderer.listen(this.el.nativeElement, \"keydown\", this.onKeyDown.bind(this));\n });\n }\n ngAfterContentChecked() {\n this.setCheckedState();\n }\n ngOnDestroy() {\n if (this.destroyClick) {\n this.destroyClick();\n }\n if (this.destroyKeyDown) {\n this.destroyKeyDown();\n }\n }\n onClick() {\n if (this.selectionService.options.enabled) {\n this.ngZone.run(() => {\n const ev = this.selectionService.toggleByIndex(this.itemIndex);\n ev.ctrlKey = true;\n ev.shiftKey = false;\n this.selectionService.changes.emit(ev);\n });\n }\n }\n onKeyDown(e) {\n if (e.keyCode === Keys.Enter) {\n this.onClick();\n }\n }\n /*\n * @hidden\n */\n setCheckedState() {\n this.renderer.setProperty(this.el.nativeElement, \"checked\", this.selectionService.isSelected(this.itemIndex));\n }\n}\nSelectionCheckboxDirective.ɵfac = function SelectionCheckboxDirective_Factory(t) { return new (t || SelectionCheckboxDirective)(ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSelectionCheckboxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectionCheckboxDirective, selectors: [[\"\", \"kendoGridSelectionCheckbox\", \"\"]], hostVars: 1, hostBindings: function SelectionCheckboxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.type);\n } }, inputs: { itemIndex: [\"kendoGridSelectionCheckbox\", \"itemIndex\"] } });\n/** @nocollapse */\nSelectionCheckboxDirective.ctorParameters = () => [\n { type: SelectionService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nSelectionCheckboxDirective.propDecorators = {\n itemIndex: [{ type: Input, args: [\"kendoGridSelectionCheckbox\",] }],\n type: [{ type: HostBinding, args: ['attr.type',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionCheckboxDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectionCheckbox]'\n }]\n }], function () { return [{ type: SelectionService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { type: [{\n type: HostBinding,\n args: ['attr.type']\n }], itemIndex: [{\n type: Input,\n args: [\"kendoGridSelectionCheckbox\"]\n }] }); })();\n\nconst columnCellIndex = (cell, cells) => {\n let cellIndex = 0;\n for (let idx = 0; idx < cells.length; idx++) {\n if (cells[idx] === cell) {\n return cellIndex;\n }\n if (!hasClasses(cells[idx], 'k-hierarchy-cell k-group-cell')) {\n cellIndex++;\n }\n }\n};\n/**\n * @hidden\n */\nclass TableBodyComponent {\n constructor(detailsService, groupsService, changeNotification, editService, localization, ngZone, renderer, element, domEvents, selectionService, cellSelectionService, columnInfoService, navigationService) {\n this.detailsService = detailsService;\n this.groupsService = groupsService;\n this.changeNotification = changeNotification;\n this.editService = editService;\n this.localization = localization;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.element = element;\n this.domEvents = domEvents;\n this.selectionService = selectionService;\n this.cellSelectionService = cellSelectionService;\n this.columnInfoService = columnInfoService;\n this.navigationService = navigationService;\n this.columns = [];\n this.groups = [];\n this.skip = 0;\n this.noRecordsText = this.localization.get('noRecords');\n this.isLocked = false;\n this.skipGroupDecoration = false;\n this.showGroupFooters = false;\n this.lockedColumnsCount = 0;\n this.totalColumnsCount = 0;\n this.trackBy = defaultTrackBy;\n this.rowClass = () => null;\n this.cellKeydownSubscription = this.navigationService.cellKeydown.subscribe((args) => this.cellKeydownHandler(args));\n this.trackByWrapper = this.trackByWrapper.bind(this);\n this.trackByColumns = this.trackByColumns.bind(this);\n }\n get newDataItem() {\n return this.editService.newDataItem;\n }\n // Number of unlocked columns in the next table, if any\n get unlockedColumnsCount() {\n return this.totalColumnsCount - this.lockedColumnsCount - (this.allColumns || this.columns).length;\n }\n isAriaSelected(item, column) {\n return this.cellSelectionService.isCellSelected(item, column) ||\n this.isRowSelected(item) ? 'true' : 'false';\n }\n toggleRow(index, dataItem) {\n this.detailsService.toggleRow(index, dataItem);\n return false;\n }\n isExpanded(viewItem) {\n return this.detailsService.isExpanded(viewItem.index, viewItem.data);\n }\n detailButtonStyles(viewItem) {\n const expanded = this.isExpanded(viewItem);\n return expanded ? 'k-minus' : 'k-plus';\n }\n detailButtonTitle(viewItem) {\n const messageKey = this.isExpanded(viewItem) ? 'detailCollapse' : 'detailExpand';\n return this.localization.get(messageKey);\n }\n isGroup(item) {\n return item.type === 'group';\n }\n isDataItem(item) {\n return !this.isGroup(item) && !this.isFooter(item);\n }\n isFooter(item) {\n return item.type === 'footer';\n }\n isInExpandedGroup(item) {\n return this.groupsService.isInExpandedGroup(item.groupIndex, false);\n }\n isParentGroupExpanded(item) {\n return this.groupsService.isInExpandedGroup(item.index || item.groupIndex);\n }\n isOdd(item) {\n return item.index % 2 !== 0;\n }\n isSelectable() {\n return this.selectable && this.selectable.enabled !== false;\n }\n isRowSelected(item) {\n return this.selectionService.isSelected(item.index);\n }\n trackByWrapper(index, item) {\n if (item.type === 'data') {\n item.isEditing = this.editService.hasEdited(item.index);\n }\n return this.trackBy(index, item);\n }\n trackByColumns(index, item) {\n return this.virtualColumns ? index : item;\n }\n ngDoCheck() {\n if (this.hasGroupHeaderColumn) {\n this.groupHeaderColumns = columnsToRender(this.skipGroupDecoration ? this.columns : this.columns.toArray().slice(1));\n }\n else {\n this.groupHeaderColumns = [];\n }\n if (this.isLocked) {\n this.groupHeaderSlaveCellsCount =\n this.hasGroupHeaderColumn ? this.columnsContainer.nonLockedColumnsToRender.length : 1;\n }\n else {\n this.groupHeaderSlaveCellsCount = 0;\n }\n }\n ngOnChanges(changes) {\n if (isChanged(\"columns\", changes, false)) {\n this.changeNotification.notify();\n }\n }\n logicalRowIndex(rowIndex) {\n let pos = this.skip + rowIndex;\n if (this.hasDetailTemplate) {\n pos *= 2;\n }\n const absoluteRowIndex = 1 + pos;\n const addRowOffset = this.editService.hasNewItem ? 1 : 0;\n const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;\n const headerRowCount = this.columnInfoService.totalLevels + filterRowOffset + addRowOffset;\n return absoluteRowIndex + headerRowCount;\n }\n addRowLogicalIndex() {\n return this.columnInfoService.totalLevels + 1 +\n (hasFilterRow(this.filterable) ? 1 : 0);\n }\n logicalColIndex(column) {\n if (!isPresent(column.leafIndex)) {\n return -1;\n }\n return column.leafIndex + (this.hasDetailTemplate ? 1 : 0);\n }\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n const clickHandler = this.clickHandler.bind(this);\n const mousedownSubscription = this.renderer.listen(this.element.nativeElement, 'mousedown', clickHandler);\n const mouseupSubscription = this.renderer.listen(this.element.nativeElement, 'mouseup', clickHandler);\n const clickSubscription = this.renderer.listen(this.element.nativeElement, 'click', clickHandler);\n const contextmenuSubscription = this.renderer.listen(this.element.nativeElement, 'contextmenu', clickHandler);\n const touchstartSubscription = this.renderer.listen(this.element.nativeElement, 'touchstart', clickHandler);\n const touchendSubscription = this.renderer.listen(this.element.nativeElement, 'touchend', clickHandler);\n this.clickSubscription = () => {\n mousedownSubscription();\n mouseupSubscription();\n clickSubscription();\n contextmenuSubscription();\n };\n this.touchSubscription = () => {\n touchstartSubscription();\n touchendSubscription();\n };\n });\n let originalNoRecordText = this.localization.get('noRecords');\n this.localization.changes.subscribe(() => {\n if (this.noRecordsText === originalNoRecordText) {\n this.noRecordsText = this.localization.get('noRecords');\n originalNoRecordText = this.noRecordsText;\n }\n });\n }\n ngOnDestroy() {\n if (this.clickSubscription) {\n this.clickSubscription();\n }\n if (this.touchSubscription) {\n this.touchSubscription();\n }\n this.cellKeydownSubscription.unsubscribe();\n clearTimeout(this.clickTimeout);\n }\n isEditingCell(index, column) {\n return this.editService.isEditing() && this.editService.isEditedColumn(index, column);\n }\n isEditingRow(index) {\n return this.editService.isEditing() && this.editService.hasEdited(index);\n }\n get hasGroupHeaderColumn() {\n return this.columnsContainer.hasGroupHeaderColumn;\n }\n get columnsContainer() {\n return this.columnInfoService.columnsContainer;\n }\n get columnsSpan() {\n return columnsSpan(this.columns);\n }\n get allColumnsSpan() {\n return columnsSpan(this.allColumns || this.columns);\n }\n get colSpan() {\n return this.columnsSpan + this.groups.length + (this.hasDetailTemplate ? 1 : 0);\n }\n get footerColumns() {\n return this.isLocked ? this.columnsContainer.lockedColumnsToRender : this.columnsContainer.nonLockedColumnsToRender;\n }\n showGroupHeader(item) {\n return !item.data.skipHeader;\n }\n get hasDetailTemplate() {\n return isPresent(this.detailTemplate);\n }\n clickHandler(eventArg) {\n const element = this.element.nativeElement;\n const target = this.eventTarget(eventArg);\n let cell, row, body, gridElement;\n let currentTarget = target;\n do {\n cell = closest(currentTarget, matchesNodeName('td'));\n row = closest(cell, matchesNodeName('tr'));\n body = closest(row, matchesNodeName('tbody'));\n currentTarget = body;\n gridElement = closestInScope(currentTarget, matchesClasses('k-grid'), element);\n } while (body && body !== element && !gridElement);\n if (cell && !hasClasses(cell, NON_DATA_CELL_CLASSES) &&\n !hasClasses(row, NON_DATA_ROW_CLASSES) &&\n body === element && !gridElement) {\n this.editService.preventCellClose();\n const focusable = target !== cell && isFocusableWithTabKey(target, false);\n if (!focusable && !matchesNodeName('label')(target) && !hasClasses(target, IGNORE_TARGET_CLASSSES) &&\n !closestInScope(target, matchesClasses(IGNORE_CONTAINER_CLASSES), cell)) {\n const args = this.cellClickArgs(cell, row, eventArg);\n if (eventArg.type === 'mousedown' || eventArg.type === 'touchstart') {\n this.domEvents.cellMousedown.emit(args);\n }\n else if (eventArg.type === 'mouseup' || eventArg.type === 'touchend') {\n this.domEvents.cellMouseup.emit(args);\n }\n else {\n if (args.isEditedColumn || !this.editService.closeCell(eventArg)) {\n if (eventArg.type === 'click') {\n this.clickTimeout = setTimeout(() => {\n this.emitCellClick(args);\n }, 0);\n }\n else {\n this.emitCellClick(args);\n }\n }\n }\n }\n }\n }\n emitCellClick(args) {\n this.domEvents.cellClick.emit(Object.assign(args, {\n isEdited: args.isEditedRow || args.isEditedColumn\n }));\n }\n cellKeydownHandler(args) {\n if (args.keyCode === Keys.Enter) {\n this.clickHandler(args);\n }\n }\n cellClickArgs(cell, row, eventArg) {\n const index = columnCellIndex(cell, row.cells);\n const column = this.columns.toArray()[index];\n const columnIndex = this.lockedColumnsCount + index;\n let rowIndex = row.getAttribute('data-kendo-grid-item-index');\n rowIndex = rowIndex ? parseInt(rowIndex, 10) : -1;\n const dataItem = rowIndex === -1 ? this.editService.newDataItem : this.data.at(rowIndex - this.skip);\n const isEditedColumn = this.editService.isEditedColumn(rowIndex, column);\n const isEditedRow = this.editService.isEdited(rowIndex);\n const type = eventArg.type === 'keydown' ? 'click' : eventArg.type;\n return {\n column: column,\n columnIndex: columnIndex,\n dataItem: dataItem,\n isEditedColumn: isEditedColumn,\n isEditedRow: isEditedRow,\n originalEvent: eventArg,\n rowIndex: rowIndex,\n type: type\n };\n }\n eventTarget(args) {\n if (args.type === 'touchend') {\n const touch = args.changedTouches[0];\n return document.elementFromPoint(touch.clientX, touch.clientY);\n }\n return args.target;\n }\n}\nTableBodyComponent.ɵfac = function TableBodyComponent_Factory(t) { return new (t || TableBodyComponent)(ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DomEventsService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(NavigationService)); };\nTableBodyComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TableBodyComponent, selectors: [[\"\", \"kendoGridTableBody\", \"\"]], inputs: { columns: \"columns\", groups: \"groups\", skip: \"skip\", noRecordsText: \"noRecordsText\", isLocked: \"isLocked\", skipGroupDecoration: \"skipGroupDecoration\", showGroupFooters: \"showGroupFooters\", lockedColumnsCount: \"lockedColumnsCount\", totalColumnsCount: \"totalColumnsCount\", trackBy: \"trackBy\", rowClass: \"rowClass\", allColumns: \"allColumns\", detailTemplate: \"detailTemplate\", noRecordsTemplate: \"noRecordsTemplate\", data: \"data\", selectable: \"selectable\", filterable: \"filterable\", virtualColumns: \"virtualColumns\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c156, decls: 3, vars: 4, consts: [[3, \"ngIf\"], [\"class\", \"k-grid-norecords\", 4, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-grid-add-row\", \"k-grid-edit-row\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"class\", \"k-hierarchy-cell\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngIf\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"isNew\", \"column\", \"dataItem\", \"ngClass\", \"ngStyle\", \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"class\", \"k-group-cell\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 1, \"k-group-cell\"], [\"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"isNew\", \"column\", \"dataItem\", \"ngClass\", \"ngStyle\", \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\"], [1, \"k-grid-norecords\"], [3, \"ngIf\", \"templateContext\"], [4, \"ngIf\"], [\"kendoGridGroupHeader\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"groups\", \"item\", \"hasDetails\", \"skipGroupDecoration\", \"hasGroupHeaderColumn\", \"groupHeaderColumns\", \"rowIndex\", \"totalColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", \"ngClass\", \"k-alt\", \"k-master-row\", \"k-grid-edit-row\", \"k-state-selected\", 4, \"ngIf\"], [\"class\", \"k-detail-row\", \"kendoGridLogicalRow\", \"\", 3, \"k-alt\", \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", 4, \"ngIf\"], [\"class\", \"k-group-footer\", \"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridGroupHeader\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"groups\", \"item\", \"hasDetails\", \"skipGroupDecoration\", \"hasGroupHeaderColumn\", \"groupHeaderColumns\", \"rowIndex\", \"totalColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"kendoGridLogicalRow\", \"\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", \"ngClass\"], [\"class\", \"k-hierarchy-cell\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"detailExpandCell\", 4, \"ngIf\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"column\", \"dataItem\", \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"colIndex\", \"colSpan\", \"touch-action\", \"ngClass\", \"k-grid-edit-cell\", \"ngStyle\", \"k-state-selected\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"detailExpandCell\"], [\"class\", \"k-icon\", \"href\", \"#\", \"tabindex\", \"-1\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-icon\", 3, \"ngClass\", \"click\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"column\", \"dataItem\", \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"colIndex\", \"colSpan\", \"ngClass\", \"ngStyle\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-detail-row\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\"], [\"class\", \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-hierarchy-cell\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", \"aria-selected\", \"false\", 1, \"k-detail-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"colIndex\", \"colSpan\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"k-group-cell\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-group-footer\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [3, \"templateContext\"]], template: function TableBodyComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_0_Template, 4, 8, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_tr_1_Template, 4, 6, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_Template, 4, 4, \"ng-template\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.editService.hasNewItem);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (ctx.data == null ? null : ctx.data.length) === 0 || ctx.data == null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data)(\"ngForTrackBy\", ctx.trackByWrapper);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalRowDirective, LogicalCellDirective, CellComponent, ɵngcc5.NgClass, ɵngcc5.NgStyle, TemplateContextDirective, GroupHeaderComponent, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\n/** @nocollapse */\nTableBodyComponent.ctorParameters = () => [\n { type: DetailsService },\n { type: GroupsService },\n { type: ChangeNotificationService },\n { type: EditService },\n { type: LocalizationService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ElementRef },\n { type: DomEventsService },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: ColumnInfoService },\n { type: NavigationService }\n];\nTableBodyComponent.propDecorators = {\n columns: [{ type: Input }],\n allColumns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n noRecordsTemplate: [{ type: Input }],\n data: [{ type: Input }],\n skip: [{ type: Input }],\n selectable: [{ type: Input }],\n filterable: [{ type: Input }],\n noRecordsText: [{ type: Input }],\n isLocked: [{ type: Input }],\n skipGroupDecoration: [{ type: Input }],\n showGroupFooters: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n trackBy: [{ type: Input }],\n rowClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TableBodyComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridTableBody]',\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{noRecordsText}}\n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"groupHeaderSlaveCellsCount\">\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n [ngClass]=\"rowClass({ dataItem: item.data, index: item.index })\"\n [class.k-alt]=\"isOdd(item)\"\n [class.k-master-row]=\"detailTemplate?.templateRef\"\n [class.k-grid-edit-row]=\"isEditingRow(item.index)\"\n [attr.data-kendo-grid-item-index]=\"item.index\"\n [class.k-state-selected]=\"isSelectable() && isRowSelected(item)\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: DetailsService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: EditService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: DomEventsService }, { type: SelectionService }, { type: CellSelectionService }, { type: ColumnInfoService }, { type: NavigationService }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], skip: [{\n type: Input\n }], noRecordsText: [{\n type: Input\n }], isLocked: [{\n type: Input\n }], skipGroupDecoration: [{\n type: Input\n }], showGroupFooters: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], allColumns: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], noRecordsTemplate: [{\n type: Input\n }], data: [{\n type: Input\n }], selectable: [{\n type: Input\n }], filterable: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass CellComponent {\n constructor(editService, idService, cellContext) {\n this.editService = editService;\n this.idService = idService;\n this.cellContext = cellContext;\n this.isNew = false;\n this._templateContext = {};\n this._editTemplateContext = {};\n }\n get commandCellClass() {\n return this.isCommand(this.column);\n }\n set rowIndex(index) {\n this._rowIndex = index;\n this.updateCellContext();\n }\n get rowIndex() {\n return this._rowIndex;\n }\n get isEdited() {\n if (!(this.editService.isEditing() || this.isNew) || !this.isColumnEditable) {\n return false;\n }\n const editContext = this.editService.columnContext(this.rowIndex, this.column);\n return this.isFieldEditable(editContext, this.column);\n }\n get formGroup() {\n return this.editService.context(this.rowIndex).group;\n }\n get templateContext() {\n return this._templateContext;\n }\n get editTemplateContext() {\n this._editTemplateContext.$implicit = this.formGroup;\n this._editTemplateContext.isNew = this.isNew;\n this._editTemplateContext.column = this.column;\n this._editTemplateContext.dataItem = this.dataItem;\n this._editTemplateContext.formGroup = this.formGroup;\n this._editTemplateContext.rowIndex = this.rowIndex;\n return this._editTemplateContext;\n }\n get format() {\n if (isColumnComponent(this.column) && !isNullOrEmptyString(this.column.format)) {\n return extractFormat(this.column.format);\n }\n return undefined;\n }\n get isBoundColumn() {\n return this.column.field && !this.column.templateRef;\n }\n get isCheckboxColumn() {\n return isCheckboxColumn(this.column) && !this.column.templateRef;\n }\n get selectionCheckboxId() {\n return this.idService.selectionCheckboxId(this.rowIndex);\n }\n get isSpanColumn() {\n return isSpanColumn(this.column) && !this.column.templateRef;\n }\n get childColumns() {\n return columnsToRender([this.column]);\n }\n get isColumnEditable() {\n if (!this.column || this.isCommand(this.column)) {\n return false;\n }\n return this.column.editable !== false;\n }\n ngDoCheck() {\n this.updateCellContext();\n }\n ngOnChanges(_changes) {\n this.updateTemplateContext();\n }\n isCommand(column) {\n return column instanceof CommandColumnComponent;\n }\n isFieldEditable(editContext, column) {\n if (!isPresent(editContext)) {\n return false;\n }\n if (isPresent(column.editTemplate)) {\n return true;\n }\n return isPresent(editContext.group) && isPresent(editContext.group.get(column.field));\n }\n updateCellContext() {\n if (this.cellContext) {\n this.cellContext.rowIndex = this._rowIndex;\n }\n }\n updateTemplateContext() {\n if (!this.column.templateRef) {\n return;\n }\n const context = this._templateContext;\n context.isNew = this.isNew;\n context.column = this.column;\n context.dataItem = this.dataItem;\n context.rowIndex = this.rowIndex;\n context.columnIndex = this.columnIndex;\n context.$implicit = this.dataItem;\n }\n}\nCellComponent.ɵfac = function CellComponent_Factory(t) { return new (t || CellComponent)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 8)); };\nCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CellComponent, selectors: [[\"\", \"kendoGridCell\", \"\"]], hostVars: 2, hostBindings: function CellComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-command-cell\", ctx.commandCellClass);\n } }, inputs: { isNew: \"isNew\", rowIndex: \"rowIndex\", column: \"column\", columnIndex: \"columnIndex\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c161, decls: 3, vars: 3, consts: [[3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [1, \"k-checkbox\", 3, \"kendoGridSelectionCheckbox\"], [1, \"k-checkbox-label\"], [4, \"ngIf\"], [3, \"ngSwitch\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"kendoGridFocusable\", \"\", 3, \"format\", \"formControl\", 4, \"ngSwitchCase\"], [\"type\", \"checkbox\", \"class\", \"k-checkbox\", \"kendoGridFocusable\", \"\", 3, \"formControl\", 4, \"ngSwitchCase\"], [\"type\", \"text\", \"class\", \"k-textbox\", \"kendoGridFocusable\", \"\", 3, \"formControl\", 4, \"ngSwitchDefault\"], [\"kendoGridFocusable\", \"\", 3, \"format\", \"formControl\"], [\"type\", \"checkbox\", \"kendoGridFocusable\", \"\", 1, \"k-checkbox\", 3, \"formControl\"], [\"type\", \"text\", \"kendoGridFocusable\", \"\", 1, \"k-textbox\", 3, \"formControl\"]], template: function CellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_1_Template, 5, 6, \"ng-container\", 1);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_Template, 3, 2, \"ng-container\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.isEdited);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n } }, directives: [ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet, ɵngcc5.NgForOf, FocusableDirective, SelectionCheckboxDirective, ɵngcc5.NgSwitchDefault, ɵngcc6.NumericTextBoxComponent, ɵngcc7.NgControlStatus, ɵngcc7.FormControlDirective, ɵngcc9.DatePickerComponent, ɵngcc7.CheckboxControlValueAccessor, ɵngcc7.DefaultValueAccessor], pipes: [FieldAccessorPipe], encapsulation: 2 });\n/** @nocollapse */\nCellComponent.ctorParameters = () => [\n { type: EditService },\n { type: IdService },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }] }\n];\nCellComponent.propDecorators = {\n commandCellClass: [{ type: HostBinding, args: ['class.k-command-cell',] }],\n column: [{ type: Input }],\n columnIndex: [{ type: Input }],\n isNew: [{ type: Input }],\n rowIndex: [{ type: Input }],\n dataItem: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridCell]',\n template: `\n \n \n \n \n \n \n {{ dataItem | valueOf: childColumn.field: childColumn.format}}\n \n \n {{ dataItem | valueOf: column.field: column.format}}\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n \n \n `\n }]\n }], function () { return [{ type: EditService }, { type: IdService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }] }]; }, { isNew: [{\n type: Input\n }], commandCellClass: [{\n type: HostBinding,\n args: ['class.k-command-cell']\n }], rowIndex: [{\n type: Input\n }], column: [{\n type: Input\n }], columnIndex: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the `edit` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`edit`]({% slug api_grid_gridcomponent %}#toc-edit) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is in the edit mode, the button with `kendoGridEditCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n */\nclass EditCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.beginEdit(this.rowIndex);\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nEditCommandDirective.ɵfac = function EditCommandDirective_Factory(t) { return new (t || EditCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nEditCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditCommandDirective, selectors: [[\"\", \"kendoGridEditCommand\", \"\"]], hostVars: 4, hostBindings: function EditCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function EditCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-edit-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nEditCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nEditCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-edit-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridEditCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-edit-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `cancel` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is not in the edit mode, the button with the `kendoGridCancelCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n * You can control the content of the button based on the state of the row.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass CancelCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return !this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n if (this.isEdited) {\n this.editService.endEdit(this.rowIndex);\n }\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nCancelCommandDirective.ɵfac = function CancelCommandDirective_Factory(t) { return new (t || CancelCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nCancelCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CancelCommandDirective, selectors: [[\"\", \"kendoGridCancelCommand\", \"\"]], hostVars: 4, hostBindings: function CancelCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CancelCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-cancel-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nCancelCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nCancelCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-cancel-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CancelCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridCancelCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-cancel-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `save` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is not in the edit mode, the button with `kendoGridSaveCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n * You can control the content of the button based on the state of the row.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass SaveCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return !this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n if (this.isEdited) {\n this.editService.save(this.rowIndex);\n }\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nSaveCommandDirective.ɵfac = function SaveCommandDirective_Factory(t) { return new (t || SaveCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSaveCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SaveCommandDirective, selectors: [[\"\", \"kendoGridSaveCommand\", \"\"]], hostVars: 4, hostBindings: function SaveCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function SaveCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-save-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nSaveCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nSaveCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-save-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SaveCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSaveCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-save-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `remove` command of the Grid. You can apply this directive to any `button` element\n * inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`remove` event]({% slug api_grid_gridcomponent %}#toc-remove)\n * is triggered ([see example]({% slug editing_reactive_forms_grid %})).\n *\n * > When the row is in the edit mode, the button with the `kendoGridRemoveCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass RemoveCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.remove(this.rowIndex);\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nRemoveCommandDirective.ɵfac = function RemoveCommandDirective_Factory(t) { return new (t || RemoveCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nRemoveCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RemoveCommandDirective, selectors: [[\"\", \"kendoGridRemoveCommand\", \"\"]], hostVars: 4, hostBindings: function RemoveCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function RemoveCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-remove-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nRemoveCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nRemoveCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-remove-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RemoveCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridRemoveCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-remove-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the command for adding a new item to the Grid. You can apply this directive to any\n * `button` element inside a [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`add`]({% slug api_grid_gridcomponent %}#toc-add) event is triggered\n * ([see example]({% slug editing_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nclass AddCommandDirective extends Button {\n constructor(editService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.beginAdd();\n }\n /**\n * @hidden\n */\n get commandClass() {\n return true;\n }\n}\nAddCommandDirective.ɵfac = function AddCommandDirective_Factory(t) { return new (t || AddCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nAddCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: AddCommandDirective, selectors: [[\"\", \"kendoGridAddCommand\", \"\"]], hostVars: 2, hostBindings: function AddCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function AddCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-add-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nAddCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nAddCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-add-command',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AddCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridAddCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-add-command']\n }] }); })();\n\nconst exported$1 = [\n CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n EditTemplateDirective,\n TableBodyComponent,\n NoRecordsTemplateDirective,\n CellComponent,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective\n];\nconst importedModules$3 = [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n SharedModule,\n GroupModule,\n NumericTextBoxModule,\n DatePickerModule\n];\n/**\n * @hidden\n */\nclass BodyModule {\n static exports() {\n return [\n CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n NoRecordsTemplateDirective,\n EditTemplateDirective,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective\n ];\n }\n}\nBodyModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: BodyModule });\nBodyModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function BodyModule_Factory(t) { return new (t || BodyModule)(); }, imports: [[...importedModules$3]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(BodyModule, { declarations: [CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective], imports: [CommonModule,\n ReactiveFormsModule,\n FormsModule, SharedModule, GroupModule, NumericTextBoxModule,\n DatePickerModule], exports: [CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BodyModule, [{\n type: NgModule,\n args: [{\n declarations: [exported$1],\n exports: [exported$1],\n imports: [...importedModules$3]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass FooterComponent {\n constructor() {\n this.columns = [];\n this.groups = [];\n this.lockedColumnsCount = 0;\n this.logicalRowIndex = 0;\n }\n get footerClass() {\n return !this.scrollable;\n }\n get columnsToRender() {\n return columnsToRender(this.columns || []);\n }\n logicalColumnIndex(column) {\n const index = column.leafIndex;\n if (isPresent(index)) {\n return index + (isPresent(this.detailTemplate) ? 1 : 0);\n }\n return -1;\n }\n}\nFooterComponent.ɵfac = function FooterComponent_Factory(t) { return new (t || FooterComponent)(); };\nFooterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FooterComponent, selectors: [[\"\", \"kendoGridFooter\", \"\"]], hostVars: 2, hostBindings: function FooterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-footer\", ctx.footerClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", lockedColumnsCount: \"lockedColumnsCount\", logicalRowIndex: \"logicalRowIndex\", detailTemplate: \"detailTemplate\", scrollable: \"scrollable\" }, attrs: _c162, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"role\", \"presentation\", 3, \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 3, \"k-hierarchy-cell\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnfooter\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"ngClass\", \"ngStyle\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnfooter\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"ngClass\", \"ngStyle\"], [3, \"templateContext\"]], template: function FooterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FooterComponent_ng_template_0_Template, 4, 9, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: [ɵngcc5.NgIf, LogicalRowDirective, ɵngcc5.NgForOf, LogicalCellDirective, ɵngcc5.NgClass, ɵngcc5.NgStyle, TemplateContextDirective], encapsulation: 2 });\nFooterComponent.propDecorators = {\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n scrollable: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n footerClass: [{ type: HostBinding, args: ['class.k-grid-footer',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFooter]',\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"columns.length - lockedColumnsCount\"\n >\n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return []; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], footerClass: [{\n type: HostBinding,\n args: ['class.k-grid-footer']\n }], detailTemplate: [{\n type: Input\n }], scrollable: [{\n type: Input\n }] }); })();\n\nconst exportedModules$3 = [\n FooterComponent\n];\nconst importedModules$4 = [\n CommonModule,\n SharedModule\n];\n/**\n * @hidden\n */\nclass FooterModule {\n static exports() {\n return [];\n }\n}\nFooterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FooterModule });\nFooterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FooterModule_Factory(t) { return new (t || FooterModule)(); }, imports: [[...importedModules$4]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FooterModule, { declarations: [FooterComponent], imports: [CommonModule, SharedModule], exports: [FooterComponent] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$3],\n exports: [exportedModules$3],\n imports: [...importedModules$4]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ToolbarComponent {\n constructor(grid) {\n this.grid = grid;\n this.context = {};\n }\n get classNames() {\n return 'k-header k-grid-toolbar';\n }\n set position(value) {\n this.context.position = value;\n }\n get toolbarTemplateRef() {\n return this.grid.toolbarTemplate ? this.grid.toolbarTemplate.templateRef : undefined;\n }\n}\nToolbarComponent.ɵfac = function ToolbarComponent_Factory(t) { return new (t || ToolbarComponent)(ɵngcc0.ɵɵdirectiveInject(GridComponent)); };\nToolbarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ToolbarComponent, selectors: [[\"kendo-grid-toolbar\"]], hostVars: 2, hostBindings: function ToolbarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassMap(ctx.classNames);\n } }, inputs: { position: \"position\" }, decls: 1, vars: 1, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function ToolbarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolbarComponent_0_Template, 1, 2, undefined, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.toolbarTemplateRef);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nToolbarComponent.ctorParameters = () => [\n { type: GridComponent }\n];\nToolbarComponent.propDecorators = {\n classNames: [{ type: HostBinding, args: ['class',] }],\n position: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ToolbarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-toolbar',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: GridComponent }]; }, { classNames: [{\n type: HostBinding,\n args: ['class']\n }], position: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass LocalEditService {\n constructor(grid, localDataChangesService) {\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n create(item) {\n if (this.hasLocalData && this.grid.skip) {\n this.localDataChangesService.data.splice(this.grid.skip, 0, item);\n }\n else {\n this.data.unshift(item);\n }\n this.dataChanged();\n }\n update(_item) { } // tslint:disable-line:no-empty\n remove(item) {\n const data = this.data;\n for (let idx = 0; idx < data.length; idx++) {\n if (item === data[idx]) {\n data.splice(idx, 1);\n this.dataChanged({ action: 'remove', item: item });\n break;\n }\n }\n }\n assignValues(target, source) {\n Object.assign(target, source);\n }\n dataChanged(args = {}) {\n if (this.hasLocalData) {\n this.localDataChangesService.changes.emit(args);\n }\n }\n get hasLocalData() {\n return Array.isArray(this.localDataChangesService.data);\n }\n get data() {\n if (this.hasLocalData) {\n return this.localDataChangesService.data;\n }\n const data = this.grid.data;\n if (Array.isArray(data)) {\n return data;\n }\n if (isDevMode()) {\n throw new Error('The default edit service of the editing directives works only when binding to plain array.' +\n 'Please provide an editService.');\n }\n return [];\n }\n}\n\n/**\n * @hidden\n */\nclass EditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n this.defaultEditService = this.createDefaultService();\n }\n // Consider adding support for the dependency injection of the service to allow for specifying a generic service without code.\n // The Input should still be kept.\n /**\n * The edit service that will handle the operations.\n */\n set editService(value) {\n this.userEditService = value;\n }\n get editService() {\n return this.userEditService || this.defaultEditService;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions = this.grid.add.subscribe(this.addHandler.bind(this));\n this.subscriptions.add(this.grid.remove.subscribe(this.removeHandler.bind(this)));\n this.subscriptions.add(this.grid.cancel.subscribe(this.cancelHandler.bind(this)));\n this.subscriptions.add(this.grid.save.subscribe(this.saveHandler.bind(this)));\n this.subscriptions.add(this.grid.dataStateChange.subscribe(this.onStateChange.bind(this)));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n createDefaultService() {\n return new LocalEditService(this.grid, this.localDataChangesService);\n }\n addHandler() {\n this.grid.addRow(this.createModel({ isNew: true }));\n }\n saveHandler(args) {\n const item = this.saveModel(args);\n if (item) {\n if (args.isNew) {\n this.editService.create(item);\n }\n else {\n this.editService.update(item);\n }\n }\n this.grid.closeRow(args.rowIndex);\n }\n cancelHandler({ rowIndex }) {\n this.closeEditor(rowIndex);\n }\n removeHandler({ dataItem }) {\n const removeItem = (shouldRemove) => {\n if (shouldRemove) {\n this.editService.remove(dataItem);\n }\n };\n if (this.removeConfirmation) {\n const result = this.removeConfirmation(dataItem);\n if (result instanceof Promise) {\n result.then(removeItem);\n }\n else if (result instanceof Observable) {\n result.pipe(take(1)).subscribe(removeItem);\n }\n else {\n removeItem(result);\n }\n }\n else {\n removeItem(true);\n }\n }\n onStateChange() {\n this.closeEditor();\n }\n closeEditor(rowIndex) {\n this.grid.closeRow(rowIndex);\n }\n}\nEditingDirectiveBase.ɵfac = function EditingDirectiveBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nEditingDirectiveBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditingDirectiveBase, inputs: { editService: \"editService\", removeConfirmation: \"removeConfirmation\" } });\nEditingDirectiveBase.propDecorators = {\n editService: [{ type: Input }],\n removeConfirmation: [{ type: Input }]\n};\n\n\n/**\n * @hidden\n */\nclass LocalRowEditService extends LocalEditService {\n update(_item) {\n this.dataChanged();\n }\n}\n\n/**\n * @hidden\n */\nclass RowEditingDirectiveBase extends EditingDirectiveBase {\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.subscriptions\n .add(this.grid.edit.subscribe(this.editHandler.bind(this)));\n }\n createDefaultService() {\n return new LocalRowEditService(this.grid, this.localDataChangesService);\n }\n addHandler() {\n this.closeEditor();\n super.addHandler();\n }\n editHandler(args) {\n this.closeEditor();\n this.rowIndex = args.rowIndex;\n this.grid.editRow(args.rowIndex, this.createModel(args));\n }\n saveHandler(args) {\n super.saveHandler(args);\n this.clean();\n }\n closeEditor(rowIndex = this.rowIndex) {\n super.closeEditor(rowIndex);\n this.clean();\n }\n clean() {\n delete this.rowIndex;\n }\n}\nRowEditingDirectiveBase.ɵfac = function RowEditingDirectiveBase_Factory(t) { return ɵRowEditingDirectiveBase_BaseFactory(t || RowEditingDirectiveBase); };\nRowEditingDirectiveBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RowEditingDirectiveBase, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵRowEditingDirectiveBase_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(RowEditingDirectiveBase);\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using\n * the Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-the-template-directive)).\n */\nclass TemplateEditingDirective extends RowEditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n editHandler(args) {\n super.editHandler(args);\n this.dataItem = args.dataItem;\n this.originalValues = {};\n this.editService.assignValues(this.originalValues, this.dataItem);\n }\n closeEditor(rowIndex) {\n if (this.dataItem) {\n this.editService.assignValues(this.dataItem, this.originalValues);\n }\n super.closeEditor(rowIndex);\n }\n createModel(args) {\n if (args.isNew) {\n return this.createNewItem();\n }\n }\n saveModel(args) {\n return args.dataItem;\n }\n clean() {\n super.clean();\n delete this.dataItem;\n }\n}\nTemplateEditingDirective.ɵfac = function TemplateEditingDirective_Factory(t) { return new (t || TemplateEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nTemplateEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateEditingDirective, selectors: [[\"\", \"kendoGridTemplateEditing\", \"\"]], inputs: { createNewItem: [\"kendoGridTemplateEditing\", \"createNewItem\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTemplateEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nTemplateEditingDirective.propDecorators = {\n createNewItem: [{ type: Input, args: ['kendoGridTemplateEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridTemplateEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createNewItem: [{\n type: Input,\n args: ['kendoGridTemplateEditing']\n }] }); })();\n\n/**\n * @hidden\n */\nconst markAllAsTouched = (control) => {\n control.markAsTouched();\n if (control.hasOwnProperty('controls')) {\n let controls = control.controls;\n for (let inner in controls) {\n if (controls.hasOwnProperty(inner)) {\n markAllAsTouched(controls[inner]);\n }\n }\n }\n};\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using the\n * Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-the-reactive-directive)).\n */\nclass ReactiveEditingDirective extends RowEditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n createModel(args) {\n return this.createFormGroup(args);\n }\n saveModel({ dataItem, formGroup, isNew }) {\n if (!formGroup.dirty && !isNew) {\n return;\n }\n if (formGroup.valid) {\n this.editService.assignValues(dataItem, formGroup.value);\n return dataItem;\n }\n markAllAsTouched(formGroup);\n }\n}\nReactiveEditingDirective.ɵfac = function ReactiveEditingDirective_Factory(t) { return new (t || ReactiveEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nReactiveEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ReactiveEditingDirective, selectors: [[\"\", \"kendoGridReactiveEditing\", \"\"]], inputs: { createFormGroup: [\"kendoGridReactiveEditing\", \"createFormGroup\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nReactiveEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nReactiveEditingDirective.propDecorators = {\n createFormGroup: [{ type: Input, args: ['kendoGridReactiveEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ReactiveEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridReactiveEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createFormGroup: [{\n type: Input,\n args: ['kendoGridReactiveEditing']\n }] }); })();\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using the in-cell\n * editing with Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-the-incell-directive)).\n */\nclass InCellEditingDirective extends EditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n // Need mixin\n createModel(args) {\n return this.createFormGroup(args);\n }\n saveModel({ dataItem, formGroup, isNew }) {\n if (!formGroup.dirty && !isNew) {\n return;\n }\n if (formGroup.valid) {\n this.editService.assignValues(dataItem, formGroup.value);\n return dataItem;\n }\n markAllAsTouched(formGroup);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.subscriptions.add(this.grid.cellClick.subscribe(this.cellClickHandler.bind(this)));\n this.subscriptions.add(this.grid.cellClose.subscribe(this.cellCloseHandler.bind(this)));\n }\n removeHandler(args) {\n super.removeHandler(args);\n this.grid.cancelCell();\n }\n cellClickHandler(args) {\n if (!args.isEdited && args.type !== 'contextmenu') {\n this.grid.editCell(args.rowIndex, args.columnIndex, this.createFormGroup(args));\n }\n }\n cellCloseHandler(args) {\n const { formGroup, dataItem } = args;\n if (!formGroup.valid) {\n args.preventDefault();\n }\n else if (formGroup.dirty) {\n this.editService.assignValues(dataItem, formGroup.value);\n this.editService.update(dataItem);\n }\n }\n}\nInCellEditingDirective.ɵfac = function InCellEditingDirective_Factory(t) { return new (t || InCellEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nInCellEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: InCellEditingDirective, selectors: [[\"\", \"kendoGridInCellEditing\", \"\"]], inputs: { createFormGroup: [\"kendoGridInCellEditing\", \"createFormGroup\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nInCellEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nInCellEditingDirective.propDecorators = {\n createFormGroup: [{ type: Input, args: ['kendoGridInCellEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(InCellEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridInCellEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createFormGroup: [{\n type: Input,\n args: ['kendoGridInCellEditing']\n }] }); })();\n\nconst hasGroups = (items) => items && items.length && items[0].field && items[0].items;\nconst groupDescriptorsPresent = (descriptors) => isPresent(descriptors) && descriptors.length > 0;\nconst processGroups = (data, state$$1) => process(data, state$$1).data;\nconst removeParentDescriptors = (parents, owner) => g => g.field !== owner.field && !parents.some(y => y.field === g.field);\nconst findGroup = (groupIndex, groups) => {\n const parents = [];\n return {\n group: groupIndex.split(\"_\").reduce((acc, x) => {\n const idx = parseInt(x, 10);\n if (acc.items) {\n parents.push(acc);\n return acc.items[idx];\n }\n return isArray(acc) ? acc[idx] : acc;\n }, groups),\n parents\n };\n};\nconst findChildren = (data, parents) => {\n const filters = parents.map(p => ({ field: p.field, operator: \"eq\", value: p.value }));\n return filterBy(data, {\n filters: filters,\n logic: \"and\"\n });\n};\n/**\n * @hidden\n */\nconst count = (groups, includeFooters = false) => (groups.reduce((acc, group) => {\n if (!group.skipHeader) {\n acc++;\n }\n if (group.items) {\n const children = count(group.items, includeFooters);\n if (includeFooters && children && !group.hideFooter) {\n acc++;\n }\n acc += children;\n }\n return acc;\n}, 0) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst slice = (groups, skip, take$$1, includeFooters = false) => {\n if (!isPresent(take$$1)) {\n return groups;\n }\n const result = [];\n for (let idx = 0, length = groups.length; idx < length; idx++) {\n if (take$$1 <= 0) {\n break;\n }\n const group = groups[idx];\n const groupItems = group.items;\n let itemCount = count(groupItems, includeFooters);\n if (includeFooters && groupItems.length) {\n itemCount++;\n }\n const skipHeader = skip > 0;\n if (skip) {\n skip--;\n if (itemCount && skip >= itemCount) {\n skip -= itemCount;\n continue;\n }\n }\n if (!skipHeader || itemCount) {\n const items = [];\n let hideFooter = true;\n if (!skipHeader) {\n take$$1--;\n }\n if (take$$1) {\n if (hasGroups(groupItems)) {\n const children = slice(groupItems, skip, take$$1, includeFooters);\n items.push(...children);\n take$$1 -= count(children, includeFooters);\n }\n else {\n items.push(...groupItems.slice(skip, Math.min(skip + take$$1, groupItems.length)));\n take$$1 -= items.length;\n }\n if (take$$1 && includeFooters) {\n hideFooter = false;\n take$$1--;\n }\n skip = 0;\n }\n result.push({\n aggregates: group.aggregates,\n field: group.field,\n hideFooter,\n items,\n offset: idx,\n skipHeader,\n value: group.value\n });\n }\n }\n return result;\n};\nconst skippedHeaders = (groupItem) => {\n let total = 0;\n while (groupItem) {\n if (groupItem.skipHeader) {\n total++;\n }\n groupItem = groupItem.items && groupItem.items[0] || null;\n }\n return total;\n};\n/**\n * A directive which encapsulates the in-memory handling of grouping with virtual scrolling.\n */\nclass GroupBindingDirective extends DataBindingDirective {\n constructor(grid, changeDetector, localDataChangesService) {\n super(grid, changeDetector, localDataChangesService);\n }\n /**\n * The array of data which will be used to populate the Grid.\n */\n set kendoGridGroupBinding(value) {\n this.groups = null;\n this.grid.resetGroupsState();\n this.data = value;\n }\n /**\n * @hidden\n */\n set data(value) {\n this.originalData = value || [];\n this.dataChanged = true;\n }\n /**\n * Defines the descriptors by which the data will be sorted.\n */\n set sort(value) {\n const clear = this.state.sort !== value;\n this.grid.sort = this.state.sort = value;\n if (clear) {\n this.groups = null;\n this.grid.resetGroupsState();\n }\n }\n /**\n * Defines the descriptor by which the data will be filtered.\n */\n set filter(value) {\n const clear = diffFilters(this.state.filter, value);\n if (clear) {\n this.state.filter = value;\n this.grid.filter = cloneFilters(value);\n this.groups = null;\n this.grid.resetGroupsState();\n }\n }\n /**\n * Defines the descriptors by which the data will be grouped.\n */\n set group(value) {\n // don't clear if no groups are present in previous and current value\n const groupsPresent = groupDescriptorsPresent(this.state.group) || groupDescriptorsPresent(value);\n const clear = this.state.group !== value && groupsPresent;\n this.grid.group = this.state.group = value;\n if (clear) {\n this.groups = null;\n this.grid.resetGroupsState();\n this.skip = 0;\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.grid.groupExpand.subscribe(this.groupExpand.bind(this));\n this.grid.groupCollapse.subscribe(this.groupCollapse.bind(this));\n }\n groupExpand({ groupIndex }) {\n this.grid.expandGroupChildren(groupIndex);\n const { group, parents } = findGroup(groupIndex, this.groups);\n if (!group.items.length) {\n const descriptors = this.state.group.filter(removeParentDescriptors(parents, group));\n const children = findChildren(this.originalData, parents.concat(group));\n group.items = processGroups(children, {\n filter: this.state.filter,\n group: descriptors,\n sort: this.state.sort\n });\n }\n this.grid.data = this.dataResult(this.state.skip, this.state.take);\n }\n groupCollapse({ groupIndex }) {\n const { group } = findGroup(groupIndex, this.groups);\n if (group) {\n group.items = [];\n }\n this.grid.data = this.dataResult(this.state.skip, this.state.take);\n }\n process(state$$1) {\n if (state$$1.group && state$$1.group.length) {\n const groups = this.processGroups(state$$1);\n this.grid.skip -= skippedHeaders(groups.data[0]);\n return groups;\n }\n else {\n this.groups = null;\n }\n return super.process(state$$1);\n }\n processGroups(state$$1) {\n if (!this.groups || !this.groups.length) {\n this.groups = processGroups(this.originalData, {\n filter: state$$1.filter,\n group: state$$1.group,\n sort: state$$1.sort\n });\n }\n return this.dataResult(state$$1.skip, state$$1.take);\n }\n dataResult(skip, take$$1) {\n const includeFooters = this.grid.showGroupFooters;\n return {\n data: slice(this.groups, skip, take$$1, includeFooters),\n total: count(this.groups, includeFooters)\n };\n }\n applyState({ skip, take: take$$1, sort, group, filter: filter$$1 }) {\n this.skip = skip;\n this.state.take = take$$1;\n // this.pageSize = take; // do need to update take as the process with slice correctly\n this.sort = sort;\n this.group = group;\n this.filter = filter$$1;\n }\n}\nGroupBindingDirective.ɵfac = function GroupBindingDirective_Factory(t) { return new (t || GroupBindingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nGroupBindingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupBindingDirective, selectors: [[\"\", \"kendoGridGroupBinding\", \"\"]], inputs: { kendoGridGroupBinding: \"kendoGridGroupBinding\", sort: \"sort\", filter: \"filter\", group: \"group\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGroupBindingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef },\n { type: LocalDataChangesService }\n];\nGroupBindingDirective.propDecorators = {\n kendoGridGroupBinding: [{ type: Input, args: [\"kendoGridGroupBinding\",] }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n group: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupBindingDirective, [{\n type: Directive,\n args: [{ selector: '[kendoGridGroupBinding]' }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: LocalDataChangesService }]; }, { kendoGridGroupBinding: [{\n type: Input,\n args: [\"kendoGridGroupBinding\"]\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], group: [{\n type: Input\n }] }); })();\n\nconst exportedModules$4 = [\n GridComponent,\n ToolbarTemplateDirective,\n ToolbarComponent,\n DataBindingDirective,\n SelectionDirective,\n CustomMessagesComponent,\n GroupBindingDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n ...GroupModule.exports(),\n ...SharedModule.exports(),\n ...BodyModule.exports(),\n ...HeaderModule.exports(),\n ...FooterModule.exports(),\n ...PagerModule.exports(),\n ...RowFilterModule.exports(),\n ...FilterMenuModule.exports(),\n ...ColumnMenuModule.exports()\n];\nconst declarations = [\n GridComponent,\n ListComponent,\n ToolbarComponent,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n DataBindingDirective,\n ToolbarTemplateDirective,\n SelectionDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n GroupBindingDirective,\n GridMarqueeDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Grid component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid module\n * import { GridModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule], // import Grid module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass GridModule {\n}\nGridModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: GridModule });\nGridModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function GridModule_Factory(t) { return new (t || GridModule)(); }, imports: [[\n CommonModule,\n GroupModule,\n SharedModule,\n BodyModule,\n HeaderModule,\n FooterModule,\n PagerModule,\n RowFilterModule,\n FilterMenuModule,\n ResizeSensorModule,\n ColumnMenuModule\n ]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(GridModule, { declarations: function () { return [GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExpandDetailsDirective, GroupBindingDirective, GridMarqueeDirective]; }, imports: function () { return [CommonModule, GroupModule, SharedModule, BodyModule, HeaderModule, FooterModule, PagerModule, RowFilterModule, FilterMenuModule, ResizeSensorModule, ColumnMenuModule]; }, exports: function () { return [GridComponent, ToolbarTemplateDirective, ToolbarComponent, DataBindingDirective, SelectionDirective, CustomMessagesComponent, GroupBindingDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExpandDetailsDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, ColumnComponent, SpanColumnComponent, ColumnGroupComponent, FooterTemplateDirective, DetailTemplateDirective, FocusableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, NoRecordsTemplateDirective, EditTemplateDirective, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, HeaderTemplateDirective, SelectAllCheckboxDirective, PagerComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, PagerTemplateDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, FilterCellOperatorsComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, ColumnChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules$4],\n imports: [\n CommonModule,\n GroupModule,\n SharedModule,\n BodyModule,\n HeaderModule,\n FooterModule,\n PagerModule,\n RowFilterModule,\n FilterMenuModule,\n ResizeSensorModule,\n ColumnMenuModule\n ]\n }]\n }], null, null); })();\n\nclass PDFMarginComponent$1 extends PDFMarginComponent {\n}\nPDFMarginComponent$1.ɵfac = function PDFMarginComponent$1_Factory(t) { return ɵPDFMarginComponent$1_BaseFactory(t || PDFMarginComponent$1); };\nPDFMarginComponent$1.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFMarginComponent$1, selectors: [[\"kendo-grid-pdf-margin\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PDFMarginComponent$1_Template(rf, ctx) { }, encapsulation: 2 });\nconst ɵPDFMarginComponent$1_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(PDFMarginComponent$1);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFMarginComponent$1, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-pdf-margin',\n template: ''\n }]\n }], null, null); })();\n\n/**\n * Represents the PDF page template of the Grid that helps to customize the PDF pages. To define a page template,\n * nest an `` tag with the `kendoGridPDFTemplate` directive inside ``.\n *\n * The template context provides the following fields:\n * - `pageNumber`—Defines PDF page number.\n * - `totalPages`—Defines the total number of PDF pages.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
    \n * Page {{ pageNum }} of {{ totalPages }}\n *
    \n *
    \n *
    \n *
    \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000\n * }\n * ];\n * }\n *\n * ```\n */\nclass PDFTemplateDirective$1 extends PDFTemplateDirective {\n constructor(templateRef) {\n super(templateRef);\n }\n}\nPDFTemplateDirective$1.ɵfac = function PDFTemplateDirective$1_Factory(t) { return new (t || PDFTemplateDirective$1)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPDFTemplateDirective$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PDFTemplateDirective$1, selectors: [[\"\", \"kendoGridPDFTemplate\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nPDFTemplateDirective$1.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFTemplateDirective$1, [{\n type: Directive,\n args: [{\n selector: '[kendoGridPDFTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nconst HEADER_CLASS = 'k-grid-header';\n/**\n * @hidden\n */\nconst FOOTER_CLASS = 'k-grid-footer';\nconst GRID_LIST = 'KENDO-GRID-LIST';\nconst TABLE = 'TABLE';\nconst matchesList = matchesNodeName(GRID_LIST);\nconst matchesTable = matchesNodeName(TABLE);\nconst suffix = (locked) => locked ? 'locked' : 'wrap';\n/**\n * @hidden\n */\nclass GridQuery {\n constructor(element) {\n this.element = element;\n this.list = findElement(element, matchesList);\n }\n content(locked) {\n return findElement(this.list, matchesClasses(`k-grid-content${locked ? '-locked' : ''}`));\n }\n header(locked) {\n this.headerWrap = this.headerWrap || findElement(this.element, matchesClasses(HEADER_CLASS));\n return findElement(this.headerWrap, matchesClasses(`${HEADER_CLASS}-${suffix(locked)}`));\n }\n footer(locked) {\n this.footerWrap = this.footerWrap || findElement(this.element, matchesClasses(FOOTER_CLASS));\n return findElement(this.footerWrap, matchesClasses(`${FOOTER_CLASS}-${suffix(locked)}`));\n }\n table() {\n return findElement(this.element, matchesTable);\n }\n}\n\nconst FIRST_CLASS = 'k-first';\nconst INPUTS = ['input', 'select', 'textarea', 'option'];\n/** @hidden */\nconst cloneNode = (node) => {\n const clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n if (INPUTS.indexOf(String(node.nodeName).toLowerCase()) >= 0) {\n clone.removeAttribute(\"id\");\n clone.removeAttribute(\"name\");\n clone.value = node.value;\n clone.checked = node.checked;\n clone.selected = node.selected;\n }\n let child = node.firstChild;\n while (child) {\n clone.appendChild(cloneNode(child));\n child = child.nextSibling;\n }\n return clone;\n};\nconst appendNodes = (element, nodes) => {\n const length = nodes.length;\n for (let idx = 0; idx < length; idx++) {\n element.appendChild(cloneNode(nodes[idx]));\n }\n};\nconst wrapTable = (table) => {\n const wrapper = document.createElement('div');\n wrapper.className = 'k-widget k-grid';\n wrapper.appendChild(table);\n return wrapper;\n};\nconst createTableElement = (sources) => {\n const sourceCount = sources.length;\n const element = cloneNode(sources[0]);\n const rowsCount = element.rows.length;\n if (sourceCount > 1) {\n for (let rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n for (let sourceIdx = 1; sourceIdx < sourceCount; sourceIdx++) {\n appendNodes(element.rows[rowIdx], sources[sourceIdx].rows[rowIdx].cells);\n }\n }\n }\n return element;\n};\nconst setFirstCellClass = (header, headers) => {\n if (headers.length > 1 && header.rows.length > 1) {\n for (let idx = 1; idx < header.rows.length; idx++) {\n const firstCellIndex = headers[0].rows[idx].cells.length;\n const cell = header.rows[idx].cells[firstCellIndex];\n if (String(cell.className).indexOf(FIRST_CLASS) === -1) {\n cell.className += ` ${FIRST_CLASS}`;\n }\n }\n }\n};\nconst createTable = (colGroups, headers, bodies, footers) => {\n const table = document.createElement('table');\n const colGroup = colGroups[0].cloneNode(true);\n for (let idx = 1; idx < colGroups.length; idx++) {\n appendNodes(colGroup, colGroups[idx].querySelectorAll('col'));\n }\n const header = createTableElement(headers);\n const body = createTableElement(bodies);\n header.className = HEADER_CLASS;\n setFirstCellClass(header, headers);\n table.appendChild(colGroup);\n table.appendChild(header);\n table.appendChild(body);\n if (footers.length) {\n const footer = createTableElement(footers);\n footer.className = FOOTER_CLASS;\n table.appendChild(footer);\n }\n return wrapTable(table);\n};\n/**\n * @hidden\n */\nconst exportElement = (wrapper) => {\n const query = new GridQuery(wrapper);\n const content = query.content();\n let result;\n if (content) {\n const colGroups = [content.querySelector('colgroup')];\n const headers = [query.header().querySelector('thead')];\n const bodies = [content.querySelector('tbody')];\n const footer = query.footer();\n const footers = [];\n if (footer) {\n footers.push(footer.querySelector('tfoot'));\n }\n const lockedContent = query.content(true);\n if (lockedContent) {\n colGroups.unshift(lockedContent.querySelector('colgroup'));\n headers.unshift(query.header(true).querySelector('thead'));\n bodies.unshift(lockedContent.querySelector('tbody'));\n if (footer) {\n footers.unshift(query.footer(true).querySelector('tfoot'));\n }\n }\n result = createTable(colGroups, headers, bodies, footers);\n }\n else {\n result = wrapTable(query.table().cloneNode(true));\n }\n return result;\n};\n\nconst createElement$1 = (tagName, className) => {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n return element;\n};\nconst createDiv = (className) => {\n return createElement$1('div', className);\n};\n/**\n * Configures the settings for the export of Grid in PDF ([see example]({% slug pdfexport_grid %})).\n */\nclass PDFComponent extends PDFExportComponent {\n constructor(pdfService, suspendService, ngZone, element) {\n super(element);\n this.pdfService = pdfService;\n this.suspendService = suspendService;\n this.ngZone = ngZone;\n this.columns = new QueryList();\n this.saveSubscription = pdfService.savePDF.subscribe(this.savePDF.bind(this));\n this.drawSubscription = pdfService.drawPDF.subscribe(this.drawPDF.bind(this));\n this.reset = this.reset.bind(this);\n this.draw = this.draw.bind(this);\n }\n ngOnDestroy() {\n this.saveSubscription.unsubscribe();\n this.drawSubscription.unsubscribe();\n this.reset();\n }\n savePDF(component) {\n this.createPDF(component, this.draw);\n }\n drawPDF({ component, promise }) {\n this.createPDF(component, () => {\n this.createExportGroup(promise);\n });\n }\n createPDF(component, callback) {\n const pageSize = component.pageSize;\n const total = component.view.total;\n const columns = this.columns.toArray();\n if (columns.length) {\n this.originalColumns = component.columns.toArray();\n }\n this.component = component;\n this.suspendService.scroll = true;\n this.pdfService.exporting = true;\n this.initProgress();\n this.renderAllPages = this.allPages && pageSize < total;\n if (this.renderAllPages) {\n this.skip = component.skip;\n this.pageSize = pageSize;\n this.changePage(0, total, callback, columns);\n }\n else if (columns.length || component.virtualColumns) {\n this.changeColumns(columns, callback);\n }\n else {\n callback();\n }\n }\n initProgress() {\n const wrapperElement = this.component.wrapper.nativeElement;\n const progress = this.progress = createDiv('k-loading-pdf-mask');\n const overlay = cloneNode(wrapperElement);\n progress.appendChild(overlay);\n progress.appendChild(createDiv('k-loading-color'));\n progress.appendChild(createElement$1('span', 'k-i-loading k-icon'));\n this.originalHeight = wrapperElement.style.height;\n this.originalOverflow = wrapperElement.style.overflow;\n wrapperElement.style.height = wrapperElement.offsetHeight + 'px';\n wrapperElement.style.overflow = 'hidden';\n wrapperElement.appendChild(progress);\n this.applyScroll(overlay);\n }\n applyScroll(overlay) {\n const query = new GridQuery(this.component.wrapper.nativeElement);\n const content = query.content();\n if (content) {\n const overlayQuery = new GridQuery(overlay);\n const overlayContent = overlayQuery.content();\n overlayContent.scrollTop = content.scrollTop;\n overlayContent.scrollLeft = content.scrollLeft;\n overlayQuery.header().scrollLeft = query.header().scrollLeft;\n const footer = query.footer();\n if (footer) {\n overlayQuery.footer().scrollLeft = footer.scrollLeft;\n }\n const lockedContent = query.content(true);\n if (lockedContent) {\n const overlayLockedContent = overlayQuery.content(true);\n overlayLockedContent.scrollTop = lockedContent.scrollTop;\n overlayLockedContent.scrollLeft = lockedContent.scrollLeft;\n }\n }\n }\n draw() {\n this.createExportElement((element) => {\n this.save(element, this.fileName);\n });\n }\n createExportGroup(promise) {\n this.createExportElement((element) => {\n this.exportElement(element).then(group => promise.resolve(group));\n });\n }\n createExportElement(callback) {\n this.ngZone.runOutsideAngular(() => {\n const container = this.container = createDiv('k-grid-pdf-export-element');\n const element = exportElement(this.component.wrapper.nativeElement);\n container.appendChild(element);\n document.body.appendChild(container);\n callback(element);\n });\n }\n drawOptions() {\n const options = super.drawOptions();\n options._destructive = true;\n return options;\n }\n cleanup() {\n super.cleanup();\n this.pdfService.exporting = false;\n if (this.component) {\n const originalColumns = this.originalColumns;\n delete this.originalColumns;\n if (this.renderAllPages) {\n this.changePage(this.skip, this.pageSize, this.reset, originalColumns);\n }\n else if (originalColumns || this.component.virtualColumns) {\n this.changeColumns(originalColumns, this.reset);\n }\n else {\n this.reset();\n }\n }\n else {\n this.reset();\n }\n this.removeContainer();\n }\n removeContainer() {\n if (this.container) {\n document.body.removeChild(this.container);\n delete this.container;\n }\n }\n changePage(skip, _take, callback, columns) {\n this.ngZone.run(() => {\n this.pdfService.dataChanged.pipe(take(1)).subscribe(() => {\n if ((columns && columns.length) || this.component.virtualColumns) {\n this.changeColumns(columns, callback);\n }\n else {\n this.onStable(callback);\n }\n });\n this.component.notifyPageChange('pdf', { skip: skip, take: _take });\n });\n }\n changeColumns(columns, callback) {\n this.ngZone.run(() => {\n this.onStable(callback);\n if (columns && columns.length) {\n this.component.columns.reset(columns);\n }\n });\n }\n reset() {\n this.suspendService.scroll = false;\n this.renderAllPages = false;\n if (!this.component) {\n return;\n }\n const wrapperElement = this.component.wrapper.nativeElement;\n wrapperElement.removeChild(this.progress);\n wrapperElement.style.height = this.originalHeight;\n wrapperElement.style.overflow = this.originalOverflow;\n delete this.progress;\n delete this.component;\n }\n onStable(callback) {\n // not sure if it is an actual scenario. occurs in the tests.\n // onStable is triggered in the same pass without the change detection.\n // thus, the callback is called before the changes are applied without the timeout.\n setTimeout(() => {\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(callback);\n }, 0); // tslint:disable-line: align\n }\n}\nPDFComponent.ɵfac = function PDFComponent_Factory(t) { return new (t || PDFComponent)(ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(SuspendService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nPDFComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFComponent, selectors: [[\"kendo-grid-pdf\"]], contentQueries: function PDFComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFMarginComponent$1, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFTemplateDirective$1, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.marginComponent = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pageTemplateDirective = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { allPages: \"allPages\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PDFComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nPDFComponent.ctorParameters = () => [\n { type: PDFService },\n { type: SuspendService },\n { type: NgZone },\n { type: ElementRef }\n];\nPDFComponent.propDecorators = {\n allPages: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase$1,] }],\n marginComponent: [{ type: ContentChild, args: [PDFMarginComponent$1,] }],\n pageTemplateDirective: [{ type: ContentChild, args: [PDFTemplateDirective$1,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-pdf',\n template: ''\n }]\n }], function () { return [{ type: PDFService }, { type: SuspendService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }]; }, { columns: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }], allPages: [{\n type: Input\n }], marginComponent: [{\n type: ContentChild,\n args: [PDFMarginComponent$1]\n }], pageTemplateDirective: [{\n type: ContentChild,\n args: [PDFTemplateDirective$1]\n }] }); })();\n\n/**\n * Represents the `export-to-PDF` command of the Grid.\n * You can apply this directive to any `button` element inside a\n * [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When the user clicks a button that is associated with the directive, the\n * [`pdfExport`]({% slug api_grid_gridcomponent %}#toc-pdfexport) event\n * fires ([see example]({% slug pdfexport_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass PDFCommandDirective extends Button {\n constructor(pdfService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.pdfService = pdfService;\n this.ngZone = ngZone;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.pdfService.exportClick.emit();\n }\n /**\n * @hidden\n */\n get pdfClass() {\n return true;\n }\n}\nPDFCommandDirective.ɵfac = function PDFCommandDirective_Factory(t) { return new (t || PDFCommandDirective)(ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nPDFCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PDFCommandDirective, selectors: [[\"\", \"kendoGridPDFCommand\", \"\"]], hostVars: 2, hostBindings: function PDFCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function PDFCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-pdf\", ctx.pdfClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nPDFCommandDirective.ctorParameters = () => [\n { type: PDFService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nPDFCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n pdfClass: [{ type: HostBinding, args: ['class.k-grid-pdf',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridPDFCommand]'\n }]\n }], function () { return [{ type: PDFService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], pdfClass: [{\n type: HostBinding,\n args: ['class.k-grid-pdf']\n }] }); })();\n\nconst exportedModules$5 = [\n PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1\n];\nconst declarations$1 = [\n PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Grid PDF component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid and PDF modules\n * import { GridModule, PDFModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule, PDFModule], // import Grid and PDF modules\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass PDFModule {\n}\nPDFModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PDFModule });\nPDFModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PDFModule_Factory(t) { return new (t || PDFModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PDFModule, { declarations: [PDFComponent, PDFMarginComponent$1, PDFCommandDirective, PDFTemplateDirective$1], exports: [PDFComponent, PDFMarginComponent$1, PDFCommandDirective, PDFTemplateDirective$1] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$5]\n }]\n }], null, null); })();\n\n/**\n * Arguments for the `excelExport` event.\n */\nclass ExcelExportEvent extends PreventableEvent {\n constructor(workbook) {\n super();\n this.workbook = workbook;\n }\n}\n\n/* tslint:disable object-literal-sort-keys */\nconst fetchComponentData = (component) => {\n return {\n data: component.view.map(item => item),\n group: component.group\n };\n};\nconst toExcelColumn = (column) => {\n return {\n title: column.title,\n field: column.field,\n locked: Boolean(column.locked),\n width: column.width,\n level: column.level,\n hidden: !column.isVisible,\n groupHeaderTemplate: column.groupHeaderTemplate,\n groupHeaderColumnTemplate: column.groupHeaderColumnTemplate,\n groupFooterTemplate: column.groupFooterTemplate,\n footerTemplate: column.footerTemplate\n };\n};\nconst toExcelColumns = (columns) => {\n const result = [];\n sortColumns(columns)\n .forEach((column) => {\n if (column.isSpanColumn) {\n result.push(...toExcelColumns(column.childrenArray));\n }\n else {\n const excelColumn = toExcelColumn(column);\n if (column.isColumnGroup) {\n excelColumn.children = [excelColumn].concat(toExcelColumns(column.childrenArray));\n }\n result.push(excelColumn);\n }\n });\n return result;\n};\nconst componentColumns = (component) => {\n const columns = toExcelColumns(component.columns.toArray());\n return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);\n};\n/**\n * Configures the settings for the export of Grid in Excel ([see example]({% slug excelexport_grid %})).\n */\nclass ExcelComponent {\n constructor(excelService, localization, zone) {\n this.localization = localization;\n this.zone = zone;\n /**\n * Specifies the file name of the exported Excel file.\n * @default \"Export.xlsx\"\n */\n this.fileName = 'Export.xlsx';\n /**\n * @hidden\n */\n this.columns = new QueryList();\n this.saveSubscription = excelService.saveToExcel.subscribe(this.save.bind(this));\n }\n ngOnDestroy() {\n this.saveSubscription.unsubscribe();\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n }\n }\n save(component) {\n const data = (this.fetchData || fetchComponentData)(component);\n const exportData = (result) => {\n delete this.dataSubscription;\n this.exportData(component, result);\n };\n if (data instanceof Promise) {\n data.then(exportData);\n }\n else if (data instanceof Observable) {\n this.dataSubscription = data.pipe(take(1)).subscribe(exportData);\n }\n else {\n exportData(data);\n }\n }\n exportData(component, result) {\n const options = workbookOptions({\n columns: this.columns.length ? this.columns : componentColumns(component),\n data: result.data,\n group: result.group,\n filterable: this.filterable,\n creator: this.creator,\n date: this.date,\n paddingCellOptions: this.paddingCellOptions,\n headerPaddingCellOptions: this.headerPaddingCellOptions,\n rtl: this.localization.rtl,\n collapsible: this.collapsible\n });\n const args = new ExcelExportEvent(options);\n component.excelExport.emit(args);\n if (!args.isDefaultPrevented()) {\n this.zone.runOutsideAngular(() => this.saveFile(options));\n }\n }\n saveFile(options) {\n toDataURL(options).then((dataURL) => {\n saveAs(dataURL, this.fileName, {\n forceProxy: this.forceProxy,\n proxyURL: this.proxyURL\n });\n });\n }\n}\nExcelComponent.ɵfac = function ExcelComponent_Factory(t) { return new (t || ExcelComponent)(ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ExcelComponent, selectors: [[\"kendo-grid-excel\"]], contentQueries: function ExcelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { fileName: \"fileName\", filterable: \"filterable\", creator: \"creator\", date: \"date\", forceProxy: \"forceProxy\", proxyURL: \"proxyURL\", fetchData: \"fetchData\", paddingCellOptions: \"paddingCellOptions\", headerPaddingCellOptions: \"headerPaddingCellOptions\", collapsible: \"collapsible\" }, decls: 0, vars: 0, template: function ExcelComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nExcelComponent.ctorParameters = () => [\n { type: ExcelService },\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelComponent.propDecorators = {\n fileName: [{ type: Input }],\n filterable: [{ type: Input }],\n creator: [{ type: Input }],\n date: [{ type: Input }],\n forceProxy: [{ type: Input }],\n proxyURL: [{ type: Input }],\n fetchData: [{ type: Input }],\n paddingCellOptions: [{ type: Input }],\n headerPaddingCellOptions: [{ type: Input }],\n collapsible: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase, { descendants: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-excel',\n template: ``\n }]\n }], function () { return [{ type: ExcelService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { fileName: [{\n type: Input\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase, { descendants: true }]\n }], filterable: [{\n type: Input\n }], creator: [{\n type: Input\n }], date: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], fetchData: [{\n type: Input\n }], paddingCellOptions: [{\n type: Input\n }], headerPaddingCellOptions: [{\n type: Input\n }], collapsible: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the `export-to-Excel` command of the Grid. You can apply this\n * directive to any `button` element inside a\n * [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When the user clicks a button associated with the directive, the\n * [`excelExport`]({% slug api_grid_gridcomponent %}#toc-excelexport) event\n * fires ([see example]({% slug excelexport_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass ExcelCommandDirective extends Button {\n constructor(excelService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.excelService = excelService;\n this.ngZone = ngZone;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.excelService.exportClick.emit();\n }\n /**\n * @hidden\n */\n get excelClass() {\n return true;\n }\n}\nExcelCommandDirective.ɵfac = function ExcelCommandDirective_Factory(t) { return new (t || ExcelCommandDirective)(ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ExcelCommandDirective, selectors: [[\"\", \"kendoGridExcelCommand\", \"\"]], hostVars: 2, hostBindings: function ExcelCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ExcelCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-excel\", ctx.excelClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nExcelCommandDirective.ctorParameters = () => [\n { type: ExcelService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n excelClass: [{ type: HostBinding, args: ['class.k-grid-excel',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridExcelCommand]'\n }]\n }], function () { return [{ type: ExcelService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], excelClass: [{\n type: HostBinding,\n args: ['class.k-grid-excel']\n }] }); })();\n\nconst declarations$2 = [ExcelComponent, ExcelCommandDirective];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Excel component of the Grid.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid and Excel modules\n * import { GridModule, ExcelModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule, ExcelModule], // import Grid and Excel modules\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ExcelModule {\n}\nExcelModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ExcelModule });\nExcelModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ExcelModule_Factory(t) { return new (t || ExcelModule)(); }, imports: [ExcelExportModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ExcelModule, { declarations: function () { return [ExcelComponent, ExcelCommandDirective]; }, exports: function () { return [ExcelComponent, ExcelCommandDirective, ExcelExportModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$2],\n exports: [declarations$2, ExcelExportModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ColumnChooserComponent, ColumnListComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemBase, ColumnMenuItemContentTemplateDirective, ColumnMenuItemComponent, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnMenuModule, ColumnMenuService, ColumnHandleDirective, ColumnResizingService, TableDirective, ColumnInfoService, DomEventsService, ExpandStateService, IdService, PreventableEvent, SortService, ChangeNotificationService, ColumnReorderService, DragAndDropModule, DragAndDropService, DragHintService, DraggableColumnDirective, DropCueService, DropTargetDirective, EditingDirectiveBase, RowEditingDirectiveBase, AddCommandDirective, CancelCommandDirective, EditCommandDirective, EditService as EditService$1, LocalDataChangesService, RemoveCommandDirective, SaveCommandDirective, ExcelCommandDirective, BooleanFilterComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellWrapperComponent, DateFilterComponent, FilterHostDirective, FilterInputWrapperComponent, FilterInputDirective, FilterRowComponent, DateFilterMenuInputComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuComponent, NumericFilterMenuInputComponent, StringFilterMenuInputComponent, NumericFilterComponent, FilterOperatorBase, SharedFilterModule, StringFilterComponent, GroupHeaderComponent, GroupIndicatorComponent, GroupInfoService, GroupPanelComponent, GroupsService, BrowserSupportService, ResizeService, ResponsiveService, LocalizedMessagesDirective, Messages, FocusGroup, FocusRoot, LogicalCellDirective, LogicalRowDirective, NavigationService, PagerContextService, PagerElementComponent, PDFCommandDirective, PDFTemplateDirective$1 as PDFTemplateDirective, CellComponent, CELL_CONTEXT, EMPTY_CELL_CONTEXT, FieldAccessorPipe, DetailsService, DEFAULT_SCROLLER_FACTORY, SCROLLER_FACTORY_TOKEN, ScrollRequestService, ScrollSyncService, ScrollerService, CellSelectionService, GridMarqueeDirective, SelectAllCheckboxDirective, SelectionCheckboxDirective, Selection, SelectionService, GridModule, SharedModule, GridComponent, ColumnBase$1 as ColumnBase, ColumnComponent, CommandColumnComponent, SpanColumnComponent, ColumnGroupComponent, CheckboxColumnComponent, ToolbarComponent, ToolbarTemplateDirective, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, PagerTemplateDirective, ExpandDetailsDirective, DetailTemplateDirective, DetailExpandEvent, DetailCollapseEvent, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, ResizableContainerDirective, TemplateContextDirective, NoRecordsTemplateDirective, DataBindingDirective, SelectionDirective, FilterService, FilterCellTemplateDirective, FilterCellComponent, StringFilterCellComponent, DateFilterCellComponent, BaseFilterCellComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, StringFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, RowFilterModule, FilterMenuModule, BodyModule, GroupModule, HeaderModule, FooterModule, PagerModule, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, EditTemplateDirective, ColGroupComponent, HeaderComponent, ListComponent, FooterComponent, TableBodyComponent, PagerComponent, CustomMessagesComponent, LoadingComponent, PDFModule, PDFComponent, PDFMarginComponent$1 as PDFMarginComponent, PDFService, ExcelModule, ExcelComponent, ExcelService, ExcelExportEvent, CellCloseEvent, SuspendService, GroupBindingDirective, slice, count, Skip, ColumnReorderEvent, FocusableDirective, ColumnVisibilityChangeEvent, ColumnMenuComponent, SinglePopupService, PopupCloseEvent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztrVEFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7aUdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3VFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1R0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7bUhBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzBJQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRIQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7MElBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1SUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs0SkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs4S0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1SUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NEpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NklBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NklBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt5SkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztvZEFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7eUpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7eUpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUpBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7cUpBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O3NKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OE1BS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7K0hBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7MkdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs2T0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MklBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3VFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3NKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3NJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztrTEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7bUhBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3VFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3NIQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O3FNQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NkdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzZFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzswQkFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MkZBR0U7QUFDRjtBQUNBOzs7Z0RBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tuQkFpY0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MFBBbUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NlNBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NEtBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7MkdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzsyYkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7b3BFQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7bUZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3lKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7MklBMEJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O3dLQXFCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzsyR0FBQztBQUNEO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztXQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7a1RBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7dU5Ba0NFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztpT0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21NQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O2lHQWVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRNQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O3NMQW9CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEhBK0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7MkhBbUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzBHQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzJIQXVCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lKQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt3WkFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O21LQWtDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O3dFQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OzZCQVVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs2UEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VMQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OEZBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O21FQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7aURBVUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7c1JBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lHQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7NkVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7MkVBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztpS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozt1S0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztpS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs4SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztnS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzttS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzsrSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztpS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzttS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztnS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozt5S0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs2SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztzS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs4SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztnS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztpS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzsrSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs0S0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3dMQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRIQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzBCQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OytQQXVCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTBDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1SkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEwQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUpBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs0R0FpQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSUEyQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztpREFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRGQWlCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzZMQXFFRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3dOQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1TkE4Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lEQWdCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztnR0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzsybUJBNExFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs2REFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2lJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztpSEFzQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NFFBbUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7eUVBZ0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7dUtBaUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztzSEErQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OytJQThDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztnTEFrQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzRJQW9ERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzJEQW1CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O29PQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7d0tBc0NFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzBCQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozt3RkFnQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Z0VBMEJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7MkNBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O3lKQXFCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7a0tBa0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzBMQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBdUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRUFhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzJHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O2tPQWtDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7b0VBU0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7cUpBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozt3SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozt5SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7K0VBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7bVFBZ05FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OzhaQThERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzswREFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7MERBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs2S0E4Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2lGQWFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1S0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O2lIQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt5UUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs2UUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3FRQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7a1NBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQW1CRTtBQUNGO0FBQ0E7QUFDQTs7Ozs7Ozs7OzswQkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUxBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7d0xBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzswREFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzBCQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7MllBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzswREFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbmplY3QsIFNraXBTZWxmLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE5nWm9uZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEhvc3RCaW5kaW5nLCBUZW1wbGF0ZVJlZiwgUXVlcnlMaXN0LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBDb250ZW50Q2hpbGQsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdCwgT3V0cHV0LCBpc0Rldk1vZGUsIFNlY3VyaXR5Q29udGV4dCwgVmlld0VuY2Fwc3VsYXRpb24sIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBTZWxmLCBWaWV3Q29udGFpbmVyUmVmLCBQaXBlLCBOZ01vZHVsZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0RvY3VtZW50QXZhaWxhYmxlLCBLZXlzLCBEcmFnZ2FibGVEaXJlY3RpdmUsIGlzQ2hhbmdlZCwgYW55Q2hhbmdlZCwgaGFzT2JzZXJ2ZXJzLCBSZXNpemVTZW5zb3JDb21wb25lbnQsIERyYWdnYWJsZU1vZHVsZSwgRXZlbnRzTW9kdWxlLCBndWlkLCBSZXNpemVTZW5zb3JNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgbWVyZ2UsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb20sIGludGVydmFsLCBmcm9tRXZlbnQsIHppcCwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCwgQ29tcG9uZW50TWVzc2FnZXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1sMTBuJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgZmlsdGVyLCB0YWtlVW50aWwsIG1hcCwgc3dpdGNoTWFwVG8sIGRlbGF5LCBhdWRpdFRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YXAsIHRocm90dGxlVGltZSwgZGVib3VuY2VUaW1lLCBidWZmZXJDb3VudCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBvcmRlckJ5LCBwcm9jZXNzLCBpc0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3IsIGZpbHRlckJ5IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuaW1wb3J0IHsgUG9wdXBTZXJ2aWNlLCBQb3B1cE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXBvcHVwJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgZ2V0dGVyIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWNvbW1vbic7XG5pbXBvcnQgeyBEcm9wRG93bkxpc3RNb2R1bGUsIEF1dG9Db21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRyb3Bkb3ducyc7XG5pbXBvcnQgeyBJbnB1dHNNb2R1bGUsIE51bWVyaWNUZXh0Qm94Q29tcG9uZW50LCBOdW1lcmljVGV4dEJveE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWlucHV0cyc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0cyc7XG5pbXBvcnQgeyBJbnRsU2VydmljZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWludGwnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1idXR0b25zJztcbmltcG9ydCB7IFBERk1hcmdpbkNvbXBvbmVudCwgUERGVGVtcGxhdGVEaXJlY3RpdmUsIFBERkV4cG9ydENvbXBvbmVudCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXBkZi1leHBvcnQnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgd29ya2Jvb2tPcHRpb25zLCB0b0RhdGFVUkwsIENvbHVtbkJhc2UsIEV4Y2VsRXhwb3J0TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERvbUV2ZW50c1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNlbGxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsTW91c2Vkb3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNlbGxNb3VzZXVwID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmtleWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXNJbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c091dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy53aW5kb3dCbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbn1cbkRvbUV2ZW50c1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbmNvbnN0IEVNUFRZX1JFR0VYID0gL15cXHMqJC87XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNQcmVzZW50ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzQmxhbmsgPSAodmFsdWUpID0+IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNBcnJheSA9ICh2YWx1ZSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNUcnV0aHkgPSAodmFsdWUpID0+ICEhdmFsdWU7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNOdWxsT3JFbXB0eVN0cmluZyA9ICh2YWx1ZSkgPT4gaXNCbGFuayh2YWx1ZSkgfHwgRU1QVFlfUkVHRVgudGVzdCh2YWx1ZSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgb2JzZXJ2ZSA9IChsaXN0KSA9PiBtZXJnZShvZihsaXN0KSwgbGlzdC5jaGFuZ2VzKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1VuaXZlcnNhbCA9ICgpID0+IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNTdHJpbmcgPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNOdW1iZXIgPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNOYU4odmFsdWUpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGV4dHJhY3RGb3JtYXQgPSAoZm9ybWF0KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGZvcm1hdCkgJiYgIWlzTnVsbE9yRW1wdHlTdHJpbmcoZm9ybWF0KSAmJiBmb3JtYXQuc3RhcnRzV2l0aCgnezA6JykpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdC5zbGljZSgzLCBmb3JtYXQubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG5vdCA9IChmbikgPT4gKC4uLmFyZ3MpID0+ICFmbi5hcHBseShudWxsLCBhcmdzKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBvciA9ICguLi5jb25kaXRpb25zKSA9PiAodmFsdWUpID0+IGNvbmRpdGlvbnMucmVkdWNlKChhY2MsIHgpID0+IGFjYyB8fCB4KHZhbHVlKSwgZmFsc2UpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGFuZCA9ICguLi5jb25kaXRpb25zKSA9PiAodmFsdWUpID0+IGNvbmRpdGlvbnMucmVkdWNlKChhY2MsIHgpID0+IGFjYyAmJiB4KHZhbHVlKSwgdHJ1ZSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgU2tpcCA9IG5ldyBJbmplY3Rpb25Ub2tlbihcIlNraXBcIik7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6dmFyaWFibGUtbmFtZVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNyZWF0ZVByb21pc2UgPSAoKSA9PiB7XG4gICAgbGV0IHJlc29sdmVGbiwgcmVqZWN0Rm47XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzb2x2ZUZuID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVqZWN0Rm4gPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZUZuO1xuICAgIHByb21pc2UucmVqZWN0ID0gcmVqZWN0Rm47XG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuLyoqIEBoaWRkZW4gKi9cbmNvbnN0IGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoKTtcbi8vIFRPRE86IE1vdmUgdG8ga2VuZG8tY29tbW9uXG5mdW5jdGlvbiBnZXRJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO1xuICAgIGNvbnN0IHByb3RvID0gTWFwLnByb3RvdHlwZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgaWYgKGtleSAhPT0gJ2VudHJpZXMnICYmIGtleSAhPT0gJ3NpemUnICYmIHByb3RvW2tleV0gPT09IHByb3RvLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jb25zdCBGUkFNRV9EVVJBVElPTiA9IDEwMDAgLyA2MDtcbmNvbnN0IHduZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge307XG4vKiogQGhpZGRlbiAqL1xuY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd25kLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3bmQubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgKGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIEZSQU1FX0RVUkFUSU9OKSk7XG4vKiogQGhpZGRlbiAqL1xuY29uc3QgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3bmQuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd25kLm1zQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGNsZWFyVGltZW91dDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkZXRlY3RJRSA9ICgpID0+IHtcbiAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVhLmluZGV4T2YoJ01TSUUgJyk7XG4gICAgY29uc3QgdHJpZGVudCA9IHVhLmluZGV4T2YoJ1RyaWRlbnQvJyk7XG4gICAgcmV0dXJuIG1zaWUgPiAwIHx8IHRyaWRlbnQgPiAwO1xufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbn1cbkxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRm9jdXNSb290IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJlZ2lzdGVyR3JvdXAoZ3JvdXApIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLmFkZChncm91cCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5yZWdpc3Rlckdyb3VwKGdyb3VwKSB7XG4gICAgICAgIGlmICh0aGlzLmFsaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5kZWxldGUoZ3JvdXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5hbGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaChmID0+IGYuYWN0aXZhdGUoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goZiA9PiBmLmRlYWN0aXZhdGUoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5Gb2N1c1Jvb3QuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbmNvbnN0IGZvY3VzYWJsZVJlZ2V4ID0gL14oPzphfGlucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2k7XG5jb25zdCBOT0RFX05BTUVfUFJFRElDQVRFUyA9IHt9O1xuY29uc3QgdG9DbGFzc0xpc3QgPSAoY2xhc3NOYW1lcykgPT4gU3RyaW5nKGNsYXNzTmFtZXMpLnRyaW0oKS5zcGxpdCgnICcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0NsYXNzZXMgPSAoZWxlbWVudCwgY2xhc3NOYW1lcykgPT4ge1xuICAgIGNvbnN0IG5hbWVzTGlzdCA9IHRvQ2xhc3NMaXN0KGNsYXNzTmFtZXMpO1xuICAgIHJldHVybiBCb29sZWFuKHRvQ2xhc3NMaXN0KGVsZW1lbnQuY2xhc3NOYW1lKS5maW5kKChjbGFzc05hbWUpID0+IG5hbWVzTGlzdC5pbmRleE9mKGNsYXNzTmFtZSkgPj0gMCkpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtYXRjaGVzQ2xhc3NlcyA9IChjbGFzc05hbWVzKSA9PiAoZWxlbWVudCkgPT4gaGFzQ2xhc3NlcyhlbGVtZW50LCBjbGFzc05hbWVzKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtYXRjaGVzTm9kZU5hbWUgPSAobm9kZU5hbWUpID0+IHtcbiAgICBpZiAoIU5PREVfTkFNRV9QUkVESUNBVEVTW25vZGVOYW1lXSkge1xuICAgICAgICBOT0RFX05BTUVfUFJFRElDQVRFU1tub2RlTmFtZV0gPSAoZWxlbWVudCkgPT4gU3RyaW5nKGVsZW1lbnQubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBOT0RFX05BTUVfUFJFRElDQVRFU1tub2RlTmFtZV07XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNsb3Nlc3QgPSAobm9kZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgd2hpbGUgKG5vZGUgJiYgIXByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2xvc2VzdEluU2NvcGUgPSAobm9kZSwgcHJlZGljYXRlLCBzY29wZSkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHNjb3BlICYmICFwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgaWYgKG5vZGUgIT09IHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY29udGFpbnMgPSAocGFyZW50LCBub2RlLCBtYXRjaFNlbGYgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IG91dHNpZGUgPSAhY2xvc2VzdChub2RlLCAoY2hpbGQpID0+IGNoaWxkID09PSBwYXJlbnQpO1xuICAgIGlmIChvdXRzaWRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWwgPSBjbG9zZXN0KG5vZGUsIChjaGlsZCkgPT4gY2hpbGQgPT09IG5vZGUpO1xuICAgIHJldHVybiBlbCAmJiAobWF0Y2hTZWxmIHx8IGVsICE9PSBwYXJlbnQpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1Zpc2libGUgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGhhc1NpemUgPSByZWN0LndpZHRoID4gMCAmJiByZWN0LmhlaWdodCA+IDA7XG4gICAgY29uc3QgaGFzUG9zaXRpb24gPSByZWN0LnggIT09IDAgJiYgcmVjdC55ICE9PSAwO1xuICAgIC8vIEVsZW1lbnRzIGNhbiBoYXZlIHplcm8gc2l6ZSBkdWUgdG8gc3R5bGluZywgYnV0IHRoZXkgd2lsbCBzdGlsbCBjb3VudCBhcyB2aXNpYmxlLlxuICAgIC8vIEZvciBleGFtcGxlLCB0aGUgc2VsZWN0aW9uIGNoZWNrYm94IGhhcyBubyBzaXplLCBidXQgaXMgbWFkZSB2aXNpYmxlIHRocm91Z2ggc3R5bGluZy5cbiAgICByZXR1cm4gKGhhc1NpemUgfHwgaGFzUG9zaXRpb24pICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0ZvY3VzYWJsZSA9IChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50LnRhZ05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgaGFzVGFiSW5kZXggPSBCb29sZWFuKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpKTtcbiAgICBjb25zdCBmb2N1c2FibGUgPSAhZWxlbWVudC5kaXNhYmxlZCAmJiBmb2N1c2FibGVSZWdleC50ZXN0KHRhZ05hbWUpO1xuICAgIHJldHVybiBmb2N1c2FibGUgfHwgaGFzVGFiSW5kZXg7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzRm9jdXNhYmxlV2l0aFRhYktleSA9IChlbGVtZW50LCBjaGVja1Zpc2liaWxpdHkgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCFpc0ZvY3VzYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRhYkluZGV4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgY29uc3QgdmlzaWJsZSA9ICFjaGVja1Zpc2liaWxpdHkgfHwgaXNWaXNpYmxlKGVsZW1lbnQpO1xuICAgIHJldHVybiB2aXNpYmxlICYmIHRhYkluZGV4ICE9PSAnLTEnO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmaW5kRWxlbWVudCA9IChub2RlLCBwcmVkaWNhdGUsIG1hdGNoU2VsZiA9IHRydWUpID0+IHtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWF0Y2hTZWxmICYmIHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KG5vZGUsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZmluZEZvY3VzYWJsZSA9IChlbGVtZW50LCBjaGVja1Zpc2liaWxpdHkgPSB0cnVlKSA9PiB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGVsZW1lbnQsIChub2RlKSA9PiBpc0ZvY3VzYWJsZVdpdGhUYWJLZXkobm9kZSwgY2hlY2tWaXNpYmlsaXR5KSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZpbmRGb2N1c2FibGVDaGlsZCA9IChlbGVtZW50LCBjaGVja1Zpc2liaWxpdHkgPSB0cnVlKSA9PiB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGVsZW1lbnQsIChub2RlKSA9PiBpc0ZvY3VzYWJsZVdpdGhUYWJLZXkobm9kZSwgY2hlY2tWaXNpYmlsaXR5KSwgZmFsc2UpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBydGxTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgZWxlbWVudCwgaW5pdGlhbCkge1xuICAgIGxldCByZXN1bHQgPSBwb3NpdGlvbjtcbiAgICBpZiAoaW5pdGlhbCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gLXBvc2l0aW9uO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbml0aWFsID4gMCkge1xuICAgICAgICByZXN1bHQgPSBlbGVtZW50LnNjcm9sbFdpZHRoIC0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHBvc2l0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBpc0J1dHRvbiA9IG1hdGNoZXNOb2RlTmFtZSgnYnV0dG9uJyk7XG5jb25zdCBpc0lucHV0VGFnID0gbWF0Y2hlc05vZGVOYW1lKCdpbnB1dCcpO1xuY29uc3QgbmF2aWdhYmxlUmVnZXggPSAvKGJ1dHRvbnxjaGVja2JveHxjb2xvcnxmaWxlfHJhZGlvfHJlc2V0fHN1Ym1pdCkvaTtcbmNvbnN0IGlzTmF2aWdhYmxlSW5wdXQgPSBlbGVtZW50ID0+IGlzSW5wdXRUYWcoZWxlbWVudCkgJiYgbmF2aWdhYmxlUmVnZXgudGVzdChlbGVtZW50LnR5cGUpO1xuY29uc3QgaXNOYXZpZ2FibGUgPSBlbGVtZW50ID0+ICFlbGVtZW50LmRpc2FibGVkICYmIChpc0J1dHRvbihlbGVtZW50KSB8fCBpc05hdmlnYWJsZUlucHV0KGVsZW1lbnQpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEZWZhdWx0Rm9jdXNhYmxlRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoaG9zdCwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gZmluZEZvY3VzYWJsZSh0aGlzLmVsZW1lbnQsIGZhbHNlKSB8fCB0aGlzLmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBlbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2FibGUgJiYgIXRoaXMuZm9jdXNhYmxlLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNhYmxlICYmIGlzVmlzaWJsZSh0aGlzLmZvY3VzYWJsZSk7XG4gICAgfVxuICAgIGlzTmF2aWdhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5Gb2N1cygpICYmIGlzTmF2aWdhYmxlKHRoaXMuZWxlbWVudCk7XG4gICAgfVxuICAgIHRvZ2dsZShhY3RpdmUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5mb2N1c2FibGUsICd0YWJJbmRleCcsIGFjdGl2ZSA/ICcwJyA6ICctMScpO1xuICAgIH1cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzYWJsZS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlICYmIHRoaXMuZW5hYmxlZDtcbiAgICB9XG4gICAgaGFzRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0aGlzLmVsZW1lbnQgJiYgY2xvc2VzdChkb2N1bWVudC5hY3RpdmVFbGVtZW50LCBlID0+IGUgPT09IHRoaXMuZWxlbWVudCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgQ0VMTF9DT05URVhUID0gbmV3IEluamVjdGlvblRva2VuKCdncmlkLWNlbGwtY29udGV4dCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEVNUFRZX0NFTExfQ09OVEVYVCA9IHt9O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgY29udHJvbHMgdGhlIHdheSBmb2N1c2FibGUgZWxlbWVudHMgcmVjZWl2ZVxuICogW2ZvY3VzIGluIGEgbmF2aWdhYmxlIEdyaWRdKHslIHNsdWcga2V5Ym9hcmRfbmF2aWdhdGlvbl9ncmlkICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJrLXRleHRib3hcIiBwbGFjZWhvbGRlcj1cIlRhYiBzdG9wICMwXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA4cHg7XCIgLz5cbiAqICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtuYXZpZ2FibGVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCIgdGl0bGU9XCJQcm9kdWN0IElEXCIgd2lkdGg9XCIxMDBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCIgd2lkdGg9XCIxNTBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gKiAgICAgICAgICAgICAgICAgIDwhLS0gVGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IHdpbGwgYmUgZm9jdXNlZCB3aGVuIHByZXNzaW5nIEVudGVyIG9uIHRoZSBjZWxsIC0tPlxuICogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImstdGV4dGJveFwiIGtlbmRvR3JpZEZvY3VzYWJsZSBbdmFsdWVdPVwiZGF0YUl0ZW0uUHJvZHVjdE5hbWVcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4O1wiIC8+XG4gKiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJrLWJ1dHRvblwiIGtlbmRvR3JpZEZvY3VzYWJsZT5VcGRhdGU8L2J1dHRvbj5cbiAqICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiB3aWR0aD1cIjEwMFwiPlxuICogICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGU+XG4gKiAgICAgICAgICAgICAgICAgIDwhLS0gQSBzaW5nbGUgZm9jdXNhYmxlIGVsZW1lbnQgd2lsbCBiZSBmb2N1c2VkIGR1cmluZyBuYXZpZ2F0aW9uIC0tPlxuICogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiay1idXR0b25cIiBrZW5kb0dyaWRGb2N1c2FibGU+RGVsZXRlPC9idXR0b24+XG4gKiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJrLXRleHRib3hcIiBwbGFjZWhvbGRlcj1cIlRhYiBzdG9wICMyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA4cHg7XCIgLz5cbiAqICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YTogYW55ID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgICAgfV07XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgRm9jdXNhYmxlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihjZWxsQ29udGV4dCwgaG9zdEVsZW1lbnQsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuY2VsbENvbnRleHQgPSBjZWxsQ29udGV4dDtcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0aGlzLmNlbGxDb250ZXh0LmZvY3VzR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAucmVnaXN0ZXJFbGVtZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IG5ldyBEZWZhdWx0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLmhvc3RFbGVtZW50LCB0aGlzLnJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmdyb3VwLmlzQWN0aXZlO1xuICAgICAgICAgICAgdGhpcy50b2dnbGUoaXNBY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cC51bnJlZ2lzdGVyRWxlbWVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlKGFjdGl2ZSkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50ICYmIGFjdGl2ZSAhPT0gdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRvZ2dsZShhY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjYW5Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuY2FuRm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzTmF2aWdhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5pc05hdmlnYWJsZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaGFzRm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxufVxuRm9jdXNhYmxlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRm9jdXNhYmxlXScgKyBgLFxuICAgICAgICBba2VuZG9HcmlkRWRpdENvbW1hbmRdLFxuICAgICAgICBba2VuZG9HcmlkUmVtb3ZlQ29tbWFuZF0sXG4gICAgICAgIFtrZW5kb0dyaWRTYXZlQ29tbWFuZF0sXG4gICAgICAgIFtrZW5kb0dyaWRDYW5jZWxDb21tYW5kXSxcbiAgICAgICAgW2tlbmRvR3JpZFNlbGVjdGlvbkNoZWNrYm94XVxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRm9jdXNhYmxlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW0NFTExfQ09OVEVYVCxdIH0sIHsgdHlwZTogU2tpcFNlbGYgfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JpZEZvY3VzYWJsZUVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKG5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICB9XG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNDZWxsKCk7XG4gICAgfVxuICAgIHRvZ2dsZShhY3RpdmUpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS50b2dnbGUoYWN0aXZlKTtcbiAgICB9XG4gICAgY2FuRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaGFzRm9jdXMoKTtcbiAgICB9XG4gICAgaXNOYXZpZ2FibGUoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBOYXZpZ2F0aW9uQ3Vyc29yIHtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gMDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb2wgPSAwO1xuICAgICAgICB0aGlzLnZpcnR1YWxDb2wgPSAwO1xuICAgICAgICB0aGlzLnZpcnR1YWxSb3cgPSAwO1xuICAgIH1cbiAgICBnZXQgcm93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5maW5kUm93KHRoaXMuYWN0aXZlUm93KTtcbiAgICB9XG4gICAgZ2V0IGNlbGwoKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93O1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5maW5kQ2VsbCh0aGlzLmFjdGl2ZUNvbCwgcm93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVJvd0luZGV4KCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvdztcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5kYXRhUm93SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3N1bWVzIGFuZCBhbm5vdW5jZXMgYSBuZXcgY3Vyc29yIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHJlc2V0KHJvd0luZGV4ID0gdGhpcy5hY3RpdmVSb3csIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVDb2wsIGZvcmNlID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0ZShyb3dJbmRleCwgY29sSW5kZXgsIGZvcmNlKSkge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsUm93ID0gcm93SW5kZXg7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxDb2wgPSBjb2xJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhY3RpdmF0ZShyb3dJbmRleCwgY29sSW5kZXgsIGZvcmNlKSB7XG4gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5pc0FjdGl2ZVJhbmdlKHJvd0luZGV4LCBjb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2Q29sSW5kZXggPSB0aGlzLmFjdGl2ZUNvbDtcbiAgICAgICAgY29uc3QgcHJldlJvd0luZGV4ID0gdGhpcy5hY3RpdmVSb3c7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29sID0gY29sSW5kZXg7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gcm93SW5kZXg7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KHtcbiAgICAgICAgICAgIGNvbEluZGV4LFxuICAgICAgICAgICAgcHJldkNvbEluZGV4LFxuICAgICAgICAgICAgcHJldlJvd0luZGV4LFxuICAgICAgICAgICAgcm93SW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc0FjdGl2ZVJhbmdlKHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVSb3cgIT09IHJvd0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuY2VsbDtcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLm1vZGVsLmNlbGxSYW5nZShjZWxsKTtcbiAgICAgICAgcmV0dXJuICFCb29sZWFuKGNlbGwpIHx8IChzdGFydCA8PSBjb2xJbmRleCAmJiBjb2xJbmRleCA8PSBlbmQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3N1bWVzIGEgbmV3IGN1cnNvciBwb3NpdGlvbiB3aXRob3V0IGFubm91bmNpbmcgaXQuXG4gICAgICovXG4gICAgYXNzdW1lKHJvd0luZGV4ID0gdGhpcy5hY3RpdmVSb3csIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVDb2wpIHtcbiAgICAgICAgdGhpcy52aXJ0dWFsUm93ID0gcm93SW5kZXg7XG4gICAgICAgIHRoaXMudmlydHVhbENvbCA9IGNvbEluZGV4O1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbCA9IGNvbEluZGV4O1xuICAgICAgICB0aGlzLmFjdGl2ZVJvdyA9IHJvd0luZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbm5vdW5jZXMgYSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiB0byBzdWJzY3JpYmVycy5cbiAgICAgKi9cbiAgICBhbm5vdW5jZSgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgY29sSW5kZXg6IHRoaXMuYWN0aXZlQ29sLFxuICAgICAgICAgICAgcHJldkNvbEluZGV4OiB0aGlzLmFjdGl2ZUNvbCxcbiAgICAgICAgICAgIHByZXZSb3dJbmRleDogdGhpcy5hY3RpdmVSb3csXG4gICAgICAgICAgICByb3dJbmRleDogdGhpcy5hY3RpdmVSb3dcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFjdGl2YXRlVmlydHVhbENlbGwoY2VsbCkge1xuICAgICAgICBjb25zdCByb3dSYW5nZSA9IHRoaXMubW9kZWwucm93UmFuZ2UoY2VsbCk7XG4gICAgICAgIGNvbnN0IGNlbGxSYW5nZSA9IHRoaXMubW9kZWwuY2VsbFJhbmdlKGNlbGwpO1xuICAgICAgICBjb25zdCBhY3RpdmVDb2wgPSB0aGlzLmFjdGl2ZUNvbDtcbiAgICAgICAgY29uc3QgYWN0aXZlUm93ID0gdGhpcy5hY3RpdmVSb3c7XG4gICAgICAgIGlmIChyb3dSYW5nZS5zdGFydCA8PSBhY3RpdmVSb3cgJiYgYWN0aXZlUm93IDw9IHJvd1JhbmdlLmVuZCAmJlxuICAgICAgICAgICAgY2VsbFJhbmdlLnN0YXJ0IDw9IGFjdGl2ZUNvbCAmJiBhY3RpdmVDb2wgPD0gY2VsbFJhbmdlLmVuZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSBjZWxsLnJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDb2wgPSBjZWxsLmNvbEluZGV4O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNBY3RpdmUocm93SW5kZXgsIGNvbEluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUNvbCA9PT0gY29sSW5kZXggJiYgdGhpcy5hY3RpdmVSb3cgPT09IHJvd0luZGV4O1xuICAgIH1cbiAgICBtb3ZlVXAob2Zmc2V0ID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXRSb3coLW9mZnNldCk7XG4gICAgfVxuICAgIG1vdmVEb3duKG9mZnNldCA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0Um93KG9mZnNldCk7XG4gICAgfVxuICAgIG1vdmVMZWZ0KG9mZnNldCA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0Q29sKC1vZmZzZXQpO1xuICAgIH1cbiAgICBtb3ZlUmlnaHQob2Zmc2V0ID0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXRDb2wob2Zmc2V0KTtcbiAgICB9XG4gICAgbGFzdENlbGxJbmRleChyb3cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YWRhdGEuY29sdW1ucy5sZWFmQ29sdW1uc1RvUmVuZGVyLmxlbmd0aCAtIDEgK1xuICAgICAgICAgICAgKHRoaXMubWV0YWRhdGEuaGFzRGV0YWlsVGVtcGxhdGUgJiYgKCFyb3cgfHwgIXJvdy5ncm91cEl0ZW0pID8gMSA6IDApO1xuICAgIH1cbiAgICBvZmZzZXRDb2wob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHByZXZSb3cgPSB0aGlzLm1vZGVsLmZpbmRSb3codGhpcy52aXJ0dWFsUm93KTtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5sYXN0Q2VsbEluZGV4KHByZXZSb3cpO1xuICAgICAgICBjb25zdCB2aXJ0dWFsQ29sID0gdGhpcy52aXJ0dWFsQ29sO1xuICAgICAgICB0aGlzLnZpcnR1YWxDb2wgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih2aXJ0dWFsQ29sICsgb2Zmc2V0LCBsYXN0SW5kZXgpKTtcbiAgICAgICAgbGV0IG5leHRDb2xJbmRleCA9IHRoaXMudmlydHVhbENvbDtcbiAgICAgICAgbGV0IG5leHRSb3dJbmRleCA9IHRoaXMudmlydHVhbFJvdztcbiAgICAgICAgbGV0IGNlbGwgPSB0aGlzLm1vZGVsLmZpbmRDZWxsKHRoaXMudmlydHVhbENvbCwgcHJldlJvdyk7XG4gICAgICAgIGlmICghY2VsbCAmJiB0aGlzLm1ldGFkYXRhLnZpcnR1YWxDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZShuZXh0Um93SW5kZXgsIG5leHRDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGwuY29sU3BhbiA+IDEgJiYgY2VsbC5jb2xJbmRleCA8PSB2aXJ0dWFsQ29sICYmIHZpcnR1YWxDb2wgPCBjZWxsLmNvbEluZGV4ICsgY2VsbC5jb2xTcGFuKSB7XG4gICAgICAgICAgICBuZXh0Q29sSW5kZXggPSBvZmZzZXQgPiAwID8gTWF0aC5taW4oY2VsbC5jb2xJbmRleCArIGNlbGwuY29sU3BhbiwgbGFzdEluZGV4KSA6IE1hdGgubWF4KDAsIGNlbGwuY29sSW5kZXggKyBvZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgbmV4dENlbGwgPSB0aGlzLm1vZGVsLmZpbmRDZWxsKG5leHRDb2xJbmRleCwgcHJldlJvdyk7XG4gICAgICAgICAgICBpZiAoY2VsbCAhPT0gbmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICBjZWxsID0gbmV4dENlbGw7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ29sID0gY2VsbC5jb2xJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbENvbCA9IHZpcnR1YWxDb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGUoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgfVxuICAgIG9mZnNldFJvdyhvZmZzZXQpIHtcbiAgICAgICAgbGV0IG5leHRDb2xJbmRleCA9IHRoaXMudmlydHVhbENvbDtcbiAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEgJiYgdGhpcy5tZXRhZGF0YS5pc1ZpcnR1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5tZXRhZGF0YS5tYXhMb2dpY2FsUm93SW5kZXg7XG4gICAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5hY3RpdmVSb3cgKyBvZmZzZXQsIG1heEluZGV4KSk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5oYXNEZXRhaWxUZW1wbGF0ZSAmJiAhdGhpcy5tb2RlbC5maW5kUm93KG5leHRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSBvZmZzZXQgPiAwID8gbmV4dEluZGV4ICsgMSA6IG5leHRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV4dEluZGV4LCBtYXhJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEuaGFzRGV0YWlsVGVtcGxhdGUgJiYgbmV4dEluZGV4ID09PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmxhc3RSb3cuaW5kZXggIT09IG1heEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gbmF2aWdhdGUgcGFzdCB0aGUgbGFzdCBjb2xsYXBzZWQgcm93LlxuICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gdGhpcy5tb2RlbC5maW5kUm93KG5leHRJbmRleCk7XG4gICAgICAgICAgICBpZiAobmV4dFJvdykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGlvblxuICAgICAgICAgICAgICAgIGxldCBjZWxsID0gdGhpcy5tb2RlbC5maW5kQ2VsbCh0aGlzLnZpcnR1YWxDb2wsIG5leHRSb3cpO1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLnJvd0luZGV4IDw9IHRoaXMudmlydHVhbFJvdyAmJiBvZmZzZXQgPiAwICYmIGNlbGwucm93U3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHRoaXMubW9kZWwuZmluZENlbGwodGhpcy52aXJ0dWFsQ29sLCB0aGlzLm1vZGVsLmZpbmRSb3coY2VsbC5yb3dJbmRleCArIGNlbGwucm93U3BhbiAtIDEgKyBvZmZzZXQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gY2VsbC5yb3dJbmRleDtcbiAgICAgICAgICAgICAgICBuZXh0Q29sSW5kZXggPSBjZWxsLmNvbEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aXJ0dWFsUm93ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGUobmV4dEluZGV4LCBuZXh0Q29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRSb3cgPSB0aGlzLm1vZGVsLmZpbmRSb3codGhpcy52aXJ0dWFsUm93ICsgb2Zmc2V0KSB8fCB0aGlzLm1vZGVsLm5leHRSb3codGhpcy52aXJ0dWFsUm93LCBvZmZzZXQpO1xuICAgICAgICBpZiAoIW5leHRSb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2VsbCA9IHRoaXMubW9kZWwuZmluZENlbGwodGhpcy52aXJ0dWFsQ29sLCBuZXh0Um93KTtcbiAgICAgICAgaWYgKGNlbGwgJiYgY2VsbC5yb3dJbmRleCA8PSB0aGlzLnZpcnR1YWxSb3cgJiYgb2Zmc2V0ID4gMCAmJiBjZWxsLnJvd1NwYW4gPiAxKSB7IC8vIHNwYW5uZWQgY2VsbCBnbyB0byBuZXh0XG4gICAgICAgICAgICBjb25zdCBuZXh0UG9zID0gY2VsbC5yb3dJbmRleCArIGNlbGwucm93U3BhbiAtIDEgKyBvZmZzZXQ7XG4gICAgICAgICAgICBjZWxsID0gdGhpcy5tb2RlbC5maW5kQ2VsbCh0aGlzLnZpcnR1YWxDb2wsIHRoaXMubW9kZWwuZmluZFJvdyhuZXh0UG9zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjZWxsICYmIHRoaXMubWV0YWRhdGEudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlKHRoaXMudmlydHVhbFJvdyArIG9mZnNldCwgdGhpcy52aXJ0dWFsQ29sKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpcnR1YWxSb3cgPSBjZWxsLnJvd0luZGV4O1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZSh0aGlzLnZpcnR1YWxSb3csIGNlbGwuY29sSW5kZXgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEl0ZW1NYXAge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHt9O1xuICAgIH1cbiAgICBnZXQgZmlyc3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvdW50ID4gMCkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVtO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsYXN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb3VudCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2tleXNba2V5cy5sZW5ndGggLSAxXV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNba2V5XSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIHRoaXMuY291bnQtLTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRJdGVtKGtleSwgaXRlbSkge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNba2V5XSkge1xuICAgICAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbXNba2V5XSA9IGl0ZW07XG4gICAgfVxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2tleV07XG4gICAgfVxuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgY2FsbGJhY2sodGhpcy5pdGVtc1trZXldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluZChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIENvbnRhaW5zIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHJvd3MgYW5kIGNlbGxzLlxuICovXG5jbGFzcyBOYXZpZ2F0aW9uTW9kZWwge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJvd3MgPSBuZXcgSXRlbU1hcCgpO1xuICAgIH1cbiAgICBnZXQgZmlyc3RSb3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3MuZmlyc3Q7XG4gICAgfVxuICAgIGdldCBsYXN0Um93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzLmxhc3Q7XG4gICAgfVxuICAgIHJlZ2lzdGVyQ2VsbChjZWxsKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93cy5nZXRJdGVtKGNlbGwubG9naWNhbFJvd0luZGV4KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNlbGwubG9naWNhbENvbEluZGV4O1xuICAgICAgICBjb25zdCBtb2RlbENlbGwgPSB7XG4gICAgICAgICAgICB1aWQ6IGNlbGwudWlkLFxuICAgICAgICAgICAgY29sSW5kZXgsXG4gICAgICAgICAgICByb3dJbmRleDogcm93LmluZGV4LFxuICAgICAgICAgICAgY29sU3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgICAgICAgcm93U3BhbjogY2VsbC5yb3dTcGFuLFxuICAgICAgICAgICAgZGV0YWlsRXhwYW5kQ2VsbDogY2VsbC5kZXRhaWxFeHBhbmRDZWxsLFxuICAgICAgICAgICAgZGF0YUl0ZW06IHJvdy5kYXRhSXRlbSxcbiAgICAgICAgICAgIGRhdGFSb3dJbmRleDogcm93LmRhdGFSb3dJbmRleCxcbiAgICAgICAgICAgIGZvY3VzR3JvdXA6IGNlbGwuZm9jdXNHcm91cFxuICAgICAgICB9O1xuICAgICAgICByb3cuY2VsbHMuc2V0SXRlbShjb2xJbmRleCwgbW9kZWxDZWxsKTtcbiAgICAgICAgaWYgKGNlbGwuZ3JvdXBJdGVtKSB7XG4gICAgICAgICAgICByb3cuZ3JvdXBJdGVtID0gY2VsbC5ncm91cEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGVsQ2VsbDtcbiAgICB9XG4gICAgdW5yZWdpc3RlckNlbGwoaW5kZXgsIHJvd0luZGV4LCBjZWxsKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucm93cy5nZXRJdGVtKHJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSByb3cuY2VsbHMuZ2V0SXRlbShpbmRleCk7XG4gICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2gudWlkID09PSBjZWxsLnVpZCkge1xuICAgICAgICAgICAgICAgIHJvdy5jZWxscy5yZW1vdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdpc3RlclJvdyhyb3cpIHtcbiAgICAgICAgY29uc3QgbW9kZWxSb3cgPSB7XG4gICAgICAgICAgICB1aWQ6IHJvdy51aWQsXG4gICAgICAgICAgICBpbmRleDogcm93LmxvZ2ljYWxSb3dJbmRleCxcbiAgICAgICAgICAgIGRhdGFJdGVtOiByb3cuZGF0YUl0ZW0sXG4gICAgICAgICAgICBkYXRhUm93SW5kZXg6IHJvdy5kYXRhUm93SW5kZXgsXG4gICAgICAgICAgICBjZWxsczogbmV3IEl0ZW1NYXAoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvd3Muc2V0SXRlbShyb3cubG9naWNhbFJvd0luZGV4LCBtb2RlbFJvdyk7XG4gICAgfVxuICAgIHVwZGF0ZVJvdyhyb3cpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMucm93cy5nZXRJdGVtKHJvdy5sb2dpY2FsUm93SW5kZXgpO1xuICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjdXJyZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YUl0ZW06IHJvdy5kYXRhSXRlbSxcbiAgICAgICAgICAgICAgICBkYXRhUm93SW5kZXg6IHJvdy5kYXRhUm93SW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVucmVnaXN0ZXJSb3coaW5kZXgsIHJvdykge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMucm93cy5nZXRJdGVtKGluZGV4KTtcbiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLnVpZCA9PT0gcm93LnVpZCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzLnJlbW92ZUl0ZW0oaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNlbGxSYW5nZShjZWxsKSB7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGNlbGwuY29sSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBjZWxsLmNvbEluZGV4ICsgKGNlbGwuY29sU3BhbiB8fCAxKSAtIDE7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJvd1JhbmdlKGNlbGwpIHtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gY2VsbC5yb3dJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGNlbGwucm93SW5kZXggKyAoY2VsbC5yb3dTcGFuIHx8IDEpIC0gMTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgbmV4dFJvdyhyb3dJbmRleCwgb2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd3MudG9BcnJheSgpO1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3MuZ2V0SXRlbShyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIGNvbnN0IG5leHQgPSByb3dzW3Bvc2l0aW9uICsgb2Zmc2V0XTtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuICAgIGZpbmRSb3coaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93cy5nZXRJdGVtKGluZGV4KTtcbiAgICB9XG4gICAgZmluZENlbGwoaW5kZXgsIHJvdykge1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmluZGV4O1xuICAgICAgICBsZXQgY2VsbCA9IHJvdy5jZWxscy5nZXRJdGVtKGluZGV4KTtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHJvd0luZGV4O1xuICAgICAgICB3aGlsZSAoIWNlbGwgJiYgcm93KSB7XG4gICAgICAgICAgICByb3cgPSB0aGlzLnJvd3MuZ2V0SXRlbShjdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgY2VsbCA9IHRoaXMucm93Q2VsbChpbmRleCwgcm93KTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsICYmIHJvd0luZGV4IDw9IHJvdy5pbmRleCArIChjZWxsLnJvd1NwYW4gfHwgMSkgLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByb3dDZWxsKGluZGV4LCByb3cpIHtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXJvdy5jZWxscy5jb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0Q2VsbCA9IHJvdy5jZWxscy5maXJzdDtcbiAgICAgICAgbGV0IGNlbGwsIGN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICB3aGlsZSAoIWNlbGwgJiYgY3VycmVudEluZGV4ID49IGZpcnN0Q2VsbC5jb2xJbmRleCkge1xuICAgICAgICAgICAgY2VsbCA9IHJvdy5jZWxscy5nZXRJdGVtKGN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbCAmJiBpbmRleCA8PSBjZWxsLmNvbEluZGV4ICsgKGNlbGwuY29sU3BhbiB8fCAxKSAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUHJldmVudGFibGVFdmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYSBzcGVjaWZpZWQgZXZlbnQuXG4gICAgICogSW4gdGhpcyB3YXksIHRoZSBzb3VyY2UgY29tcG9uZW50IHN1cHByZXNzZXNcbiAgICAgKiB0aGUgYnVpbHQtaW4gYmVoYXZpb3IgdGhhdCBmb2xsb3dzIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXZlbnQgd2FzIHByZXZlbnRlZFxuICAgICAqIGJ5IGFueSBvZiBpdHMgc3Vic2NyaWJlcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlZmF1bHQgYWN0aW9uIHdhcyBwcmV2ZW50ZWQuXG4gICAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICovXG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBjZWxsQ2xvc2VgIGV2ZW50LlxuICovXG5jbGFzcyBDZWxsQ2xvc2VFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aW9uID0gJ2NlbGxDbG9zZSc7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNFcXVhbCA9IChpbmRleCkgPT4gKGl0ZW0pID0+IGl0ZW0uaW5kZXggPT09IGluZGV4O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzTm90RXF1YWwgPSAoaW5kZXgpID0+IChpdGVtKSA9PiBpdGVtLmluZGV4ICE9PSBpbmRleDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc05ld1JvdyA9IChpbmRleCkgPT4gaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB1bmRlZmluZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRWRpdFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKG5nWm9uZSkge1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmVkaXRlZEluZGljZXMgPSBbXTtcbiAgICAgICAgdGhpcy5rZWVwRWRpdENlbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbG9zaW5nQ2VsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoYW5nZWRTb3VyY2UgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0aGlzLmNoYW5nZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKSkpO1xuICAgIH1cbiAgICBlZGl0Um93KGluZGV4LCBncm91cCA9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVkaXRlZEluZGljZXMucHVzaCh7IGluZGV4LCBncm91cCB9KTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgICB9XG4gICAgYWRkUm93KGdyb3VwKSB7XG4gICAgICAgIHRoaXMubmV3SXRlbUdyb3VwID0geyBncm91cCB9O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBlZGl0Q2VsbChyb3dJbmRleCwgY29sdW1uLCBncm91cCkge1xuICAgICAgICBpZiAoaXNOZXdSb3cocm93SW5kZXgpIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIShjb2x1bW4uZWRpdFRlbXBsYXRlIHx8IGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZlbnRDZWxsQ2xvc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlQ2VsbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRSb3cocm93SW5kZXgsIGdyb3VwKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0VkaXRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRlZEluZGljZXMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgaXNFZGl0aW5nQ2VsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0aW5nKCkgJiYgdGhpcy5jb2x1bW4gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGhhc05ld0l0ZW0oKSB7XG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQodGhpcy5uZXdJdGVtR3JvdXApO1xuICAgIH1cbiAgICBnZXQgbmV3RGF0YUl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc05ld0l0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0l0ZW1Hcm91cC5ncm91cC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNsb3NlKGluZGV4KSB7XG4gICAgICAgIGlmIChpc05ld1JvdyhpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMubmV3SXRlbUdyb3VwID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdGVkSW5kaWNlcyA9IHRoaXMuZWRpdGVkSW5kaWNlcy5maWx0ZXIoaXNOb3RFcXVhbChpbmRleCkpO1xuICAgICAgICBkZWxldGUgdGhpcy5jb2x1bW47XG4gICAgICAgIHRoaXMub25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIGNsb3NlQ2VsbChvcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbiAmJiAhdGhpcy5jbG9zaW5nQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbmRleCwgZ3JvdXAgfSA9IHRoaXMuZWRpdGVkSW5kaWNlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gbmV3IENlbGxDbG9zZUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBncm91cCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogb3JpZ2luYWxFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zaW5nQ2VsbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zaW5nQ2VsbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbENlbGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYW5jZWxDZWxsKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGVkSW5kaWNlcyA9IFtdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29sdW1uO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRDbG9zZUNlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbiAmJiAhdGhpcy5rZWVwRWRpdENlbGw7XG4gICAgfVxuICAgIHByZXZlbnRDZWxsQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5rZWVwQ2VsbFRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5rZWVwRWRpdENlbGwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5rZWVwQ2VsbFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwRWRpdENlbGwgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDApOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb250ZXh0KGluZGV4KSB7XG4gICAgICAgIGlmIChpc05ld1JvdyhpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5ld0l0ZW1Hcm91cDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5maW5kQnlJbmRleChpbmRleCk7XG4gICAgfVxuICAgIGNvbHVtbkNvbnRleHQoaW5kZXgsIGNvbHVtbikge1xuICAgICAgICBpZiAoaXNOZXdSb3coaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXdJdGVtR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbiB8fCBjb2x1bW4gPT09IHRoaXMuY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kQnlJbmRleChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNFZGl0ZWQoaW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTmV3Um93KGluZGV4KSAmJiBpc1ByZXNlbnQodGhpcy5uZXdJdGVtR3JvdXApKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXRoaXMuY29sdW1uICYmIGlzUHJlc2VudCh0aGlzLmZpbmRCeUluZGV4KGluZGV4KSk7XG4gICAgfVxuICAgIGhhc0VkaXRlZChpbmRleCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuY29udGV4dChpbmRleCkpO1xuICAgIH1cbiAgICBpc0VkaXRlZENvbHVtbihpbmRleCwgY29sdW1uKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuZmluZEJ5SW5kZXgoaW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGJlZ2luRWRpdChyb3dJbmRleCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7IGFjdGlvbjogJ2VkaXQnLCByb3dJbmRleCB9KTtcbiAgICB9XG4gICAgYmVnaW5BZGQoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHsgYWN0aW9uOiAnYWRkJyB9KTtcbiAgICB9XG4gICAgZW5kRWRpdChyb3dJbmRleCkge1xuICAgICAgICBjb25zdCB7IGdyb3VwOiBmb3JtR3JvdXAgfSA9IHRoaXMuY29udGV4dChyb3dJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHsgYWN0aW9uOiAnY2FuY2VsJywgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXc6IGlzTmV3Um93KHJvd0luZGV4KSB9KTtcbiAgICB9XG4gICAgc2F2ZShyb3dJbmRleCkge1xuICAgICAgICBjb25zdCB7IGdyb3VwOiBmb3JtR3JvdXAgfSA9IHRoaXMuY29udGV4dChyb3dJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHsgYWN0aW9uOiAnc2F2ZScsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3OiBpc05ld1Jvdyhyb3dJbmRleCkgfSk7XG4gICAgfVxuICAgIHJlbW92ZShyb3dJbmRleCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7IGFjdGlvbjogJ3JlbW92ZScsIHJvd0luZGV4IH0pO1xuICAgIH1cbiAgICBmaW5kQnlJbmRleChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0ZWRJbmRpY2VzLmZpbmQoaXNFcXVhbChpbmRleCkpO1xuICAgIH1cbiAgICBvbkNoYW5nZWQoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFNvdXJjZS5uZXh0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkVkaXRTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FZGl0U2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRXhwYW5kU3RhdGVTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihpc0luaXRpYWxseUNvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLmlzSW5pdGlhbGx5Q29sbGFwc2VkID0gaXNJbml0aWFsbHlDb2xsYXBzZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucm93U3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHRvZ2dsZVJvdyhpbmRleCwgZGF0YUl0ZW0pIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnJvd1N0YXRlLmhhcyhpbmRleCk7XG4gICAgICAgIGNvbnN0IGV4cGFuZCA9ICF0aGlzLmlzSW5pdGlhbGx5Q29sbGFwc2VkID8gZm91bmQgOiAhZm91bmQ7XG4gICAgICAgIGNvbnN0IHByZXZlbnRlZCA9IHRoaXMuZW1pdEV2ZW50KHsgZGF0YUl0ZW0sIGV4cGFuZCwgaW5kZXggfSk7XG4gICAgICAgIGlmIChwcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMucm93U3RhdGUuZGVsZXRlKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93U3RhdGUuYWRkKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0V4cGFuZGVkKGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yb3dTdGF0ZS5oYXMoaW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxseUNvbGxhcHNlZCA/IGZvdW5kIDogIWZvdW5kO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5yb3dTdGF0ZS5jbGVhcigpO1xuICAgIH1cbiAgICBlbWl0RXZlbnQoYXJncykge1xuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dChhcmdzKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuY29uc3QgcmVtb3ZlTGFzdCA9IGdyb3VwSW5kZXggPT4gZ3JvdXBJbmRleC5sYXN0SW5kZXhPZihcIl9cIikgPiAtMVxuICAgID8gZ3JvdXBJbmRleC5zbGljZSgwLCBncm91cEluZGV4Lmxhc3RJbmRleE9mKFwiX1wiKSlcbiAgICA6IFwiXCI7XG5jb25zdCBpc0NoaWxkSW5kZXggPSAodGFyZ2V0SW5kZXgsIHBhcmVudEluZGV4KSA9PiBwYXJlbnRJbmRleCAhPT0gdGFyZ2V0SW5kZXggJiYgdGFyZ2V0SW5kZXguc3RhcnRzV2l0aChwYXJlbnRJbmRleCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBzU2VydmljZSBleHRlbmRzIEV4cGFuZFN0YXRlU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaXNDb2xsYXBzZWQgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihpc0NvbGxhcHNlZCk7XG4gICAgfVxuICAgIGlzSW5FeHBhbmRlZEdyb3VwKGdyb3VwSW5kZXgsIHNraXBTZWxmID0gdHJ1ZSkge1xuICAgICAgICBpZiAoc2tpcFNlbGYpIHtcbiAgICAgICAgICAgIGdyb3VwSW5kZXggPSByZW1vdmVMYXN0KGdyb3VwSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBleHBhbmRlZCA9IHRydWU7XG4gICAgICAgIHdoaWxlIChncm91cEluZGV4ICYmIGV4cGFuZGVkKSB7XG4gICAgICAgICAgICBleHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZChncm91cEluZGV4KTtcbiAgICAgICAgICAgIGdyb3VwSW5kZXggPSByZW1vdmVMYXN0KGdyb3VwSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHBhbmRlZDtcbiAgICB9XG4gICAgZXhwYW5kQ2hpbGRyZW4ocGFyZW50SW5kZXgpIHtcbiAgICAgICAgdGhpcy5yb3dTdGF0ZS5mb3JFYWNoKGluZGV4ID0+IGlzQ2hpbGRJbmRleChpbmRleCwgcGFyZW50SW5kZXgpICYmIHRoaXMucm93U3RhdGUuZGVsZXRlKGluZGV4KSk7XG4gICAgfVxufVxuR3JvdXBzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBzU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbU2tpcCxdIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQYWdlckNvbnRleHRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwIC8gdGhpcy5wYWdlU2l6ZTtcbiAgICB9XG4gICAgbm90aWZ5Q2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMudG90YWwgPSBjaGFuZ2VzLnRvdGFsO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY2hhbmdlcy5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5za2lwID0gY2hhbmdlcy5za2lwO1xuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dChjaGFuZ2VzKTtcbiAgICB9XG4gICAgY2hhbmdlUGFnZShwYWdlKSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5uZXh0KHsgc2tpcDogcGFnZSAqIHRoaXMucGFnZVNpemUsIHRha2U6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgfVxuICAgIGNoYW5nZVBhZ2VTaXplKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5uZXh0KHsgc2tpcDogMCwgdGFrZTogdmFsdWUgfSk7XG4gICAgfVxuICAgIG5leHRQYWdlKCkge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UgKyAxO1xuICAgICAgICBpZiAobmV4dFBhZ2UgKiB0aGlzLnBhZ2VTaXplIDwgdGhpcy50b3RhbCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKG5leHRQYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmV2UGFnZSgpIHtcbiAgICAgICAgY29uc3QgcHJldlBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlIC0gMTtcbiAgICAgICAgaWYgKHByZXZQYWdlICogdGhpcy5wYWdlU2l6ZSA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UocHJldlBhZ2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBkZXRhaWxDb2xsYXBzZWAgZXZlbnQuXG4gKi9cbmNsYXNzIERldGFpbENvbGxhcHNlRXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgYXJncyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBkZXRhaWxFeHBhbmRgIGV2ZW50LlxuICovXG5jbGFzcyBEZXRhaWxFeHBhbmRFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEZXRhaWxzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucm93U3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJvd1N0YXRlLmNsZWFyKCk7XG4gICAgfVxuICAgIGlzRXhwYW5kZWQoaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlckNhbGxiYWNrKHsgaW5kZXgsIGRhdGFJdGVtIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1N0YXRlLmhhcyhpbmRleCk7XG4gICAgfVxuICAgIHRvZ2dsZVJvdyhpbmRleCwgZGF0YUl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZChpbmRleCwgZGF0YUl0ZW0pKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlUm93KGluZGV4LCBkYXRhSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFJvdyhpbmRleCwgZGF0YUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4cGFuZFJvdyhpbmRleCwgZGF0YUl0ZW0pIHtcbiAgICAgICAgY29uc3QgcHJldmVudGVkID0gdGhpcy5lbWl0RXZlbnQoeyBkYXRhSXRlbSwgaW5kZXgsIGV4cGFuZDogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKCFwcmV2ZW50ZWQgJiYgIXRoaXMudXNlckNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1N0YXRlLmFkZChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sbGFwc2VSb3coaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIGNvbnN0IHByZXZlbnRlZCA9IHRoaXMuZW1pdEV2ZW50KHsgZGF0YUl0ZW0sIGluZGV4LCBleHBhbmQ6IGZhbHNlIH0pO1xuICAgICAgICBpZiAoIXByZXZlbnRlZCAmJiAhdGhpcy51c2VyQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMucm93U3RhdGUuZGVsZXRlKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0RXZlbnQoYXJncykge1xuICAgICAgICBjb25zdCBldmVudEFyZyA9IG5ldyAoYXJncy5leHBhbmQgPyBEZXRhaWxFeHBhbmRFdmVudCA6IERldGFpbENvbGxhcHNlRXZlbnQpKGFyZ3MpO1xuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dChldmVudEFyZyk7XG4gICAgICAgIHJldHVybiBldmVudEFyZy5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG59XG5EZXRhaWxzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNjcm9sbFJlcXVlc3RTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuICAgIHNjcm9sbFRvKHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5uZXh0KHJlcXVlc3QpO1xuICAgIH1cbn1cblNjcm9sbFJlcXVlc3RTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCBpc0luU2FtZUdyaWQgPSAoZWxlbWVudCwgZ3JpZEVsZW1lbnQpID0+IGNsb3Nlc3QoZWxlbWVudCwgbWF0Y2hlc05vZGVOYW1lKCdrZW5kby1ncmlkJykpID09PSBncmlkRWxlbWVudDtcbmNvbnN0IG1hdGNoSGVhZGVyQ2VsbCA9IG1hdGNoZXNOb2RlTmFtZSgndGgnKTtcbmNvbnN0IG1hdGNoRGF0YUNlbGwgPSBtYXRjaGVzTm9kZU5hbWUoJ3RkJyk7XG5jb25zdCBtYXRjaEZvb3RlckNlbGwgPSBtYXRjaGVzTm9kZU5hbWUoJy5rLWdyaWQtZm9vdGVyIHRkJyk7XG5jb25zdCBtYXRjaENlbGwgPSAoZWxlbWVudCkgPT4gbWF0Y2hEYXRhQ2VsbChlbGVtZW50KSB8fCBtYXRjaEhlYWRlckNlbGwoZWxlbWVudCkgfHwgbWF0Y2hGb290ZXJDZWxsKGVsZW1lbnQpO1xuY29uc3QgZ3JpZENlbGwgPSAoZWxlbWVudCwgZ3JpZEVsZW1lbnQpID0+IHtcbiAgICBsZXQgdGFyZ2V0ID0gY2xvc2VzdChlbGVtZW50LCBtYXRjaENlbGwpO1xuICAgIHdoaWxlICh0YXJnZXQgJiYgIWlzSW5TYW1lR3JpZCh0YXJnZXQsIGdyaWRFbGVtZW50KSkge1xuICAgICAgICB0YXJnZXQgPSBjbG9zZXN0KHRhcmdldC5wYXJlbnRFbGVtZW50LCBtYXRjaENlbGwpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufTtcbmNvbnN0IHRhcmdldENlbGwgPSAodGFyZ2V0LCBncmlkRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGNlbGwgPSBncmlkQ2VsbCh0YXJnZXQsIGdyaWRFbGVtZW50KTtcbiAgICBjb25zdCByb3cgPSBjbG9zZXN0KGNlbGwsIG1hdGNoZXNOb2RlTmFtZSgndHInKSk7XG4gICAgaWYgKGNlbGwgJiYgcm93KSB7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHJvdy5nZXRBdHRyaWJ1dGUoJ2FyaWEtcm93aW5kZXgnKTtcbiAgICAgICAgcm93SW5kZXggPSByb3dJbmRleCA/IHBhcnNlSW50KHJvd0luZGV4LCAxMCkgLSAxIDogbnVsbDtcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29saW5kZXgnKTtcbiAgICAgICAgY29sSW5kZXggPSBjb2xJbmRleCA/IHBhcnNlSW50KGNvbEluZGV4LCAxMCkgLSAxIDogbnVsbDtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSBudWxsICYmIGNvbEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjb2xJbmRleCwgcm93SW5kZXgsIGVsZW1lbnQ6IGNlbGwgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBpc0Fycm93S2V5ID0ga2V5Q29kZSA9PiBrZXlDb2RlID09PSBLZXlzLkFycm93TGVmdCB8fCBrZXlDb2RlID09PSBLZXlzLkFycm93UmlnaHQgfHxcbiAgICBrZXlDb2RlID09PSBLZXlzLkFycm93VXAgfHwga2V5Q29kZSA9PT0gS2V5cy5BcnJvd0Rvd247XG5jb25zdCBpc05hdmlnYXRpb25LZXkgPSBrZXlDb2RlID0+IGlzQXJyb3dLZXkoa2V5Q29kZSkgfHxcbiAgICBrZXlDb2RlID09PSBLZXlzLlBhZ2VVcCB8fCBrZXlDb2RlID09PSBLZXlzLlBhZ2VEb3duIHx8XG4gICAga2V5Q29kZSA9PT0gS2V5cy5Ib21lIHx8IGtleUNvZGUgPT09IEtleXMuRW5kO1xuY29uc3QgaXNJbnB1dCA9IG1hdGNoZXNOb2RlTmFtZSgnaW5wdXQnKTtcbmNvbnN0IGlzVGV4dElucHV0ID0gZWxlbWVudCA9PiBlbGVtZW50ICYmIGlzSW5wdXQoZWxlbWVudCkgJiYgZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICd0ZXh0JztcbmNvbnN0IGlzUHJpbnRhYmxlQ2hhcmFjdGVyID0gKHN0cikgPT4gc3RyLmxlbmd0aCA9PT0gMSAmJiBzdHIubWF0Y2goL1xcUy8pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25WaWV3cG9ydCB7XG4gICAgY29uc3RydWN0b3IoZmlyc3RJdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgpIHtcbiAgICAgICAgdGhpcy5maXJzdEl0ZW1JbmRleCA9IGZpcnN0SXRlbUluZGV4O1xuICAgICAgICB0aGlzLmxhc3RJdGVtSW5kZXggPSBsYXN0SXRlbUluZGV4O1xuICAgIH1cbiAgICBjb250YWluc1JvdyhkYXRhUm93SW5kZXgpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyUm93ID0gZGF0YVJvd0luZGV4IDwgMDtcbiAgICAgICAgcmV0dXJuIGhlYWRlclJvdyB8fCAoZGF0YVJvd0luZGV4ID49IHRoaXMuZmlyc3RJdGVtSW5kZXggJiYgZGF0YVJvd0luZGV4IDw9IHRoaXMubGFzdEl0ZW1JbmRleCk7XG4gICAgfVxuICAgIGludGVyc2VjdHMoc3RhcnQsIGVuZCkge1xuICAgICAgICByZXR1cm4gKHN0YXJ0IDw9IHRoaXMuZmlyc3RJdGVtSW5kZXggJiYgdGhpcy5sYXN0SXRlbUluZGV4IDw9IGVuZCkgfHxcbiAgICAgICAgICAgICh0aGlzLmZpcnN0SXRlbUluZGV4IDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IHRoaXMubGFzdEl0ZW1JbmRleCkgfHxcbiAgICAgICAgICAgICh0aGlzLmZpcnN0SXRlbUluZGV4IDw9IGVuZCAmJiBlbmQgPD0gdGhpcy5sYXN0SXRlbUluZGV4KTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHpvbmUsIGRvbUV2ZW50cywgcGFnZXJDb250ZXh0U2VydmljZSwgc2Nyb2xsUmVxdWVzdFNlcnZpY2UsIGdyb3Vwc1NlcnZpY2UsIGRldGFpbHNTZXJ2aWNlLCBmb2N1c1Jvb3QsIGVkaXRTZXJ2aWNlLCBjZCwgbG9jYWxpemF0aW9uLCBmb2N1c2FibGVQYXJlbnQpIHtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBkb21FdmVudHM7XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0U2VydmljZSA9IHBhZ2VyQ29udGV4dFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2Nyb2xsUmVxdWVzdFNlcnZpY2UgPSBzY3JvbGxSZXF1ZXN0U2VydmljZTtcbiAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlID0gZ3JvdXBzU2VydmljZTtcbiAgICAgICAgdGhpcy5kZXRhaWxzU2VydmljZSA9IGRldGFpbHNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmZvY3VzUm9vdCA9IGZvY3VzUm9vdDtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmZvY3VzYWJsZVBhcmVudCA9IGZvY3VzYWJsZVBhcmVudDtcbiAgICAgICAgdGhpcy5jZWxsS2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1vZGUgPSAwIC8qIFN0YW5kYnkgKi87XG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgTmF2aWdhdGlvbk1vZGVsKCk7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gbmV3IE5hdmlnYXRpb25DdXJzb3IodGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IHRoaXMuY3Vyc29yLmNoYW5nZXM7XG4gICAgfVxuICAgIHNldCBtZXRhZGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLm1ldGEgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jdXJzb3IubWV0YWRhdGEgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhO1xuICAgIH1cbiAgICBnZXQgZW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxpdmU7XG4gICAgfVxuICAgIGdldCBhY3RpdmVDZWxsKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSAwIC8qIFN0YW5kYnkgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnNvci5jZWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhY3RpdmVSb3coKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgIT09IDAgLyogU3RhbmRieSAqLykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY3Vyc29yLnJvdywge1xuICAgICAgICAgICAgICAgIGNlbGxzOiB0aGlzLmN1cnNvci5yb3cuY2VsbHMudG9BcnJheSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWN0aXZlRGF0YVJvdygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuYWN0aXZlUm93SW5kZXggLSB0aGlzLm1ldGEuaGVhZGVyUm93cyk7XG4gICAgfVxuICAgIGluaXQobWV0YSkge1xuICAgICAgICB0aGlzLmFsaXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c1Jvb3QuYWxpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbWV0YTtcbiAgICAgICAgY29uc3Qgb25TdGFibGVTdWJzY3JpYmVyID0gKC4uLm9wZXJhdG9ycykgPT4gKGFyZ3MpID0+IHRoaXMuem9uZS5pc1N0YWJsZSA/XG4gICAgICAgICAgICBmcm9tKFt0cnVlXSkucGlwZShtYXAoKCkgPT4gYXJncykpIDpcbiAgICAgICAgICAgIHRoaXMuem9uZS5vblN0YWJsZS5waXBlKHRha2UoMSksIG1hcCgoKSA9PiBhcmdzKSwgLi4ub3BlcmF0b3JzKTtcbiAgICAgICAgY29uc3Qgb25TdGFibGUgPSBvblN0YWJsZVN1YnNjcmliZXIoKTtcbiAgICAgICAgdGhpcy5zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuY3Vyc29yLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB0aGlzLm9uQ3Vyc29yQ2hhbmdlcyhhcmdzKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuZG9tRXZlbnRzLmZvY3VzLnBpcGUoc3dpdGNoTWFwKG9uU3RhYmxlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGFyZ3MpID0+IHRoaXMubmF2aWdhdGVUbyhhcmdzLnRhcmdldCkpKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmRvbUV2ZW50cy5mb2N1c091dC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLm1vZGUgIT09IDAgLyogU3RhbmRieSAqLyksIHN3aXRjaE1hcChvblN0YWJsZVN1YnNjcmliZXIodGFrZVVudGlsKHRoaXMuZG9tRXZlbnRzLmZvY3VzKSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhcmdzID0+IHRoaXMub25Gb2N1c091dChhcmdzKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuZG9tRXZlbnRzLndpbmRvd0JsdXIucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5tb2RlICE9PSAwIC8qIFN0YW5kYnkgKi8pKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93Qmx1cigpKSk7XG4gICAgICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICAgIC8vIENsb3NpbmcgdGhlIGVkaXRvciB3aWxsIG5vdCBhbHdheXMgdHJpZ2dlciBmb2N1c291dCBpbiBGaXJlZm94LlxuICAgICAgICAvLyBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIGVuc3VyZSB0aGF0IHRoZSBjZWxsIGlzIGNsb3NlZCBhZnRlciBlZGl0aW5nLlxuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmNoYW5nZXMucGlwZShmaWx0ZXIoZSA9PiBlLmFjdGlvbiAhPT0gJ2VkaXQnICYmIHRoaXMubW9kZSA9PT0gMiAvKiBDb250ZW50ICovKSwgZmlsdGVyKChlKSA9PiBlLmFjdGlvbiA9PT0gJ2NlbGxDbG9zZScgJiYgIWUucHJldmVudGVkKSwgc3dpdGNoTWFwKG9uU3RhYmxlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sZWF2ZUNlbGwoKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMucGFnZXJDb250ZXh0U2VydmljZS5wYWdlQ2hhbmdlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY3Vyc29yLnJlc2V0KDAsIDApKSk7XG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5kb21FdmVudHMua2V5ZG93blxuICAgICAgICAgICAgLnN1YnNjcmliZShhcmdzID0+IHRoaXMub25LZXlkb3duKGFyZ3MpKSk7XG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5kb21FdmVudHMua2V5ZG93bi5waXBlKGZpbHRlcihhcmdzID0+IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5UYWIgJiYgdGhpcy5tb2RlID09PSAyIC8qIENvbnRlbnQgKi8pLCBzd2l0Y2hNYXBUbyh0aGlzLmRvbUV2ZW50cy5mb2N1c091dC5waXBlKHRha2VVbnRpbChcbiAgICAgICAgLy8gVGltZW91dCBpZiBmb2N1c091dCBkb2Vzbid0IGZpcmUgdmVyeSBzb29uXG4gICAgICAgIGludGVydmFsKDApLnBpcGUodGFrZSgxKSkpKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub25UYWJvdXQoKSkpO1xuICAgICAgICBpZiAodGhpcy5mb2N1c2FibGVQYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgR3JpZEZvY3VzYWJsZUVsZW1lbnQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzYWJsZVBhcmVudC5yZWdpc3RlckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlRWxlbWVudHMoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmVnaXN0ZXJDZWxsKGNlbGwpIHtcbiAgICAgICAgaWYgKGNlbGwubG9naWNhbFJvd0luZGV4ICE9PSB0aGlzLnBlbmRpbmdSb3dJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbW9kZWxDZWxsID0gdGhpcy5tb2RlbC5yZWdpc3RlckNlbGwoY2VsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ2VsbCAmJiB0aGlzLmN1cnNvci5hY3RpdmF0ZVZpcnR1YWxDZWxsKG1vZGVsQ2VsbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxDZWxsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVnaXN0ZXJDZWxsT25DdXJyZW50Um93KGNlbGwpIHtcbiAgICAgICAgaWYgKGNlbGwubG9naWNhbFJvd0luZGV4ID09PSB0aGlzLnBlbmRpbmdSb3dJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZWdpc3RlckNlbGwoY2VsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5yZWdpc3RlckNlbGwoaW5kZXgsIHJvd0luZGV4LCBjZWxsKSB7XG4gICAgICAgIHRoaXMubW9kZWwudW5yZWdpc3RlckNlbGwoaW5kZXgsIHJvd0luZGV4LCBjZWxsKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJSb3cocm93KSB7XG4gICAgICAgIHRoaXMubW9kZWwucmVnaXN0ZXJSb3cocm93KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nUm93SW5kZXggPSByb3cubG9naWNhbFJvd0luZGV4O1xuICAgIH1cbiAgICB1cGRhdGVSb3cocm93KSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlUm93KHJvdyk7XG4gICAgfVxuICAgIHVucmVnaXN0ZXJSb3coaW5kZXgsIHJvdykge1xuICAgICAgICB0aGlzLm1vZGVsLnVucmVnaXN0ZXJSb3coaW5kZXgsIHJvdyk7XG4gICAgfVxuICAgIGlzQ2VsbEZvY3VzYWJsZShjZWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsaXZlICYmXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSAmJlxuICAgICAgICAgICAgdGhpcy5tb2RlICE9PSAyIC8qIENvbnRlbnQgKi8gJiZcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yLmlzQWN0aXZlKGNlbGwubG9naWNhbFJvd0luZGV4LCBjZWxsLmxvZ2ljYWxDb2xJbmRleCk7XG4gICAgfVxuICAgIGlzQ2VsbEZvY3VzZWQoY2VsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAxIC8qIEN1cnNvciAqLyAmJiB0aGlzLmlzQ2VsbEZvY3VzYWJsZShjZWxsKTtcbiAgICB9XG4gICAgbmF2aWdhdGVUbyhlbCkge1xuICAgICAgICBpZiAoIXRoaXMuYWxpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsID0gdGFyZ2V0Q2VsbChlbCwgdGhpcy5tZXRhLmdyaWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRNb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBjb25zdCBmb2N1c0luQ2VsbCA9IGNvbnRhaW5zKGNlbGwuZWxlbWVudCwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZvY3VzSW5BY3RpdmVSb3dDb250ZW50ID0gdGhpcy5tb2RlID09PSAyIC8qIENvbnRlbnQgKi8gJiZcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXggPT09IGNlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIGVsICE9PSBjZWxsLmVsZW1lbnQ7XG4gICAgICAgIGlmIChmb2N1c0luQ2VsbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gMiAvKiBDb250ZW50ICovO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWZvY3VzSW5BY3RpdmVSb3dDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSAxIC8qIEN1cnNvciAqLztcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBhbHJlYWR5QWN0aXZlID0gdGhpcy5jdXJzb3IuaXNBY3RpdmUoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBpc0N1cnNvciA9IG9sZE1vZGUgPT09IDEgLyogQ3Vyc29yICovICYmIGFscmVhZHlBY3RpdmU7XG4gICAgICAgICAgICBpZiAoIWlzQ3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5Rm9jdXMoZWwpIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGZpbmRGb2N1c2FibGVDaGlsZChlbCk7XG4gICAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0YXJnZXRDZWxsKGZvY3VzYWJsZSwgdGhpcy5tZXRhLmdyaWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChjZWxsLnJvd0luZGV4LCBjZWxsLmNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50ZXJDZWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhZm9jdXNhYmxlO1xuICAgIH1cbiAgICBuZWVkc1ZpZXdwb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhICYmIHRoaXMubWV0YS5pc1ZpcnR1YWw7XG4gICAgfVxuICAgIHNldFZpZXdwb3J0KGZpcnN0SXRlbUluZGV4LCBsYXN0SXRlbUluZGV4KSB7XG4gICAgICAgIHRoaXMudmlld3BvcnQgPSBuZXcgTmF2aWdhdGlvblZpZXdwb3J0KGZpcnN0SXRlbUluZGV4LCBsYXN0SXRlbUluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMubWV0YSAmJiB0aGlzLm1ldGEuaXNWaXJ0dWFsICYmIHRoaXMuYWN0aXZlRGF0YVJvdyA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUm93SW5kZXggPSB0aGlzLmFjdGl2ZURhdGFSb3c7XG4gICAgICAgICAgICBjb25zdCBhaGVhZCA9IGZpcnN0SXRlbUluZGV4IC0gZGF0YVJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3QgYmVoaW5kID0gZGF0YVJvd0luZGV4IC0gbGFzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIGlmIChhaGVhZCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChmaXJzdEl0ZW1JbmRleCArIHRoaXMubWV0YS5oZWFkZXJSb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJlaGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChsYXN0SXRlbUluZGV4IC0gdGhpcy5tZXRhLmhlYWRlclJvd3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNldENvbHVtblZpZXdwb3J0KGZpcnN0SXRlbUluZGV4LCBsYXN0SXRlbUluZGV4KSB7XG4gICAgICAgIHRoaXMuY29sdW1uVmlld3BvcnQgPSBuZXcgTmF2aWdhdGlvblZpZXdwb3J0KGZpcnN0SXRlbUluZGV4LCBsYXN0SXRlbUluZGV4KTtcbiAgICB9XG4gICAgZm9jdXNDZWxsKHJvd0luZGV4ID0gdW5kZWZpbmVkLCBjb2xJbmRleCA9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAxIC8qIEN1cnNvciAqLztcbiAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbDtcbiAgICB9XG4gICAgZm9jdXNDZWxsQnlFbGVtZW50KGVsKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0YXJnZXRDZWxsKGVsLCB0aGlzLm1ldGEuZ3JpZEVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb2N1c0NlbGwoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNOZXh0Q2VsbCh3cmFwID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c0FkamFjZW50Q2VsbCh0cnVlLCB3cmFwKTtcbiAgICB9XG4gICAgZm9jdXNQcmV2Q2VsbCh3cmFwID0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c0FkamFjZW50Q2VsbChmYWxzZSwgd3JhcCk7XG4gICAgfVxuICAgIHRvZ2dsZShhY3RpdmUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgfVxuICAgIGhhc0ZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAxIC8qIEN1cnNvciAqLyB8fCB0aGlzLm1vZGUgPT09IDIgLyogQ29udGVudCAqLztcbiAgICB9XG4gICAgYXV0b0ZvY3VzQ2VsbChzdGFydCwgZW5kKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tZXRhLnZpcnR1YWxDb2x1bW5zIHx8IGVuZCA8IHRoaXMubWV0YS5jb2x1bW5zLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCB8fCB0aGlzLmNvbHVtblZpZXdwb3J0LmludGVyc2VjdHMoc3RhcnQsIGVuZCk7XG4gICAgfVxuICAgIGZvY3VzQWRqYWNlbnRDZWxsKGZ3ZCwgd3JhcCkge1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbCgpO1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZ3ZCA/IHRoaXMubW92ZUN1cnNvckZ3ZCgpIDogdGhpcy5tb3ZlQ3Vyc29yQndkKCk7XG4gICAgICAgIGlmICh3cmFwICYmICFzdWNjZXNzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gZndkID8gdGhpcy5jdXJzb3IubW92ZURvd24oMSkgOiB0aGlzLmN1cnNvci5tb3ZlVXAoMSk7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY3Vyc29yLnJvdztcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xJZHggPSBmd2QgPyAwIDogdGhpcy5jdXJzb3IubGFzdENlbGxJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KHJvdy5pbmRleCwgY29sSWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZSA9IDAgLyogU3RhbmRieSAqLztcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVudGVyQ2VsbCgpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuY3Vyc29yLmNlbGw7XG4gICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2VsbC5mb2N1c0dyb3VwO1xuICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBncm91cCAmJiBncm91cC5jYW5Gb2N1cygpO1xuICAgICAgICB0aGlzLm1vZGUgPSBmb2N1c2FibGUgPyAyIC8qIENvbnRlbnQgKi8gOiAxIC8qIEN1cnNvciAqLztcbiAgICAgICAgdGhpcy5jdXJzb3IuYW5ub3VuY2UoKTtcbiAgICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdygpO1xuICAgICAgICAgICAgZ3JvdXAuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZWF2ZUNlbGwoKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmN1cnNvci5jZWxsO1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cCA9IGNlbGwuZm9jdXNHcm91cDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZ3JvdXAgJiYgZ3JvdXAuY2FuRm9jdXMoKTtcbiAgICAgICAgaWYgKCFmb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlID0gMSAvKiBDdXJzb3IgKi87XG4gICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgfVxuICAgIGFjdGl2YXRlRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNSb290LmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIGRlYWN0aXZhdGVFbGVtZW50cygpIHtcbiAgICAgICAgdGhpcy5mb2N1c1Jvb3QuZGVhY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVJvdygpIHtcbiAgICAgICAgdGhpcy5jdXJzb3Iucm93LmNlbGxzXG4gICAgICAgICAgICAuZm9yRWFjaChjZWxsID0+IGNlbGwuZm9jdXNHcm91cCAmJiBjZWxsLmZvY3VzR3JvdXAuYWN0aXZhdGUoKSk7XG4gICAgfVxuICAgIG1vdmVDdXJzb3JGd2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyB0aGlzLmN1cnNvci5tb3ZlTGVmdCgpIDogdGhpcy5jdXJzb3IubW92ZVJpZ2h0KCk7XG4gICAgfVxuICAgIG1vdmVDdXJzb3JCd2QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyB0aGlzLmN1cnNvci5tb3ZlUmlnaHQoKSA6IHRoaXMuY3Vyc29yLm1vdmVMZWZ0KCk7XG4gICAgfVxuICAgIG9uQ3Vyc29yS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGxldCBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IGFyZ3MuY3RybEtleSB8fCBhcmdzLm1ldGFLZXk7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtb2RpZmllciA/IDUgOiAxO1xuICAgICAgICBpZiAoIXRoaXMub25DZWxsS2V5ZG93bihhcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY3Vyc29yLnJvdztcbiAgICAgICAgc3dpdGNoIChhcmdzLmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd0Rvd246XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLmN1cnNvci5tb3ZlRG93bihzdGVwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd1VwOlxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdGhpcy5jdXJzb3IubW92ZVVwKHN0ZXApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkFycm93UmlnaHQ6XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLm1vdmVDdXJzb3JGd2QoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd0xlZnQ6XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLm1vdmVDdXJzb3JCd2QoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5QYWdlRG93bjpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5pc1ZpcnR1YWwgJiYgdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEl0ZW1JbmRleCA9IHRoaXMubWV0YS5oZWFkZXJSb3dzICsgdGhpcy52aWV3cG9ydC5sYXN0SXRlbUluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEuaGFzRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJdGVtSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0SXRlbUluZGV4ID0gTWF0aC5taW4odGhpcy5tZXRhLm1heExvZ2ljYWxSb3dJbmRleCwgbmV4dEl0ZW1JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KG5leHRJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWV0YWRhdGEuaGFzUGFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnBhZ2VyQ29udGV4dFNlcnZpY2UubmV4dFBhZ2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuUGFnZVVwOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLmlzVmlydHVhbCAmJiB0aGlzLnZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2aWV3cG9ydFNpemUgPSB0aGlzLnZpZXdwb3J0Lmxhc3RJdGVtSW5kZXggLSB0aGlzLnZpZXdwb3J0LmZpcnN0SXRlbUluZGV4O1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RJdGVtSW5kZXggPSB0aGlzLnZpZXdwb3J0LmZpcnN0SXRlbUluZGV4O1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEl0ZW1JbmRleCA9IE1hdGgubWF4KHRoaXMubWV0YS5oZWFkZXJSb3dzLCBmaXJzdEl0ZW1JbmRleCAtIHZpZXdwb3J0U2l6ZSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChuZXh0SXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1ldGFkYXRhLmhhc1BhZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5wYWdlckNvbnRleHRTZXJ2aWNlLnByZXZQYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkhvbWU6XG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGEuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldCh0aGlzLm1ldGEuaGVhZGVyUm93cywgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQodGhpcy5tb2RlbC5maXJzdFJvdy5pbmRleCwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChyb3cuaW5kZXgsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkVuZDpcbiAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0YS5pc1ZpcnR1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0Um93SW5kZXggPSB0aGlzLm1ldGEubWF4TG9naWNhbFJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0YS5oYXNEZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSb3dJbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQobGFzdFJvd0luZGV4LCB0aGlzLmN1cnNvci5sYXN0Q2VsbEluZGV4KCksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KHRoaXMubW9kZWwubGFzdFJvdy5pbmRleCwgdGhpcy5jdXJzb3IubGFzdENlbGxJbmRleCh0aGlzLm1vZGVsLmxhc3RSb3cpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuY3Vyc29yLmxhc3RDZWxsSW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMubW9kZWwuZmluZENlbGwobGFzdEluZGV4LCByb3cpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChyb3cuaW5kZXgsIGxhc3RJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkVudGVyOlxuICAgICAgICAgICAgY2FzZSBLZXlzLkYyOlxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbSA9IHJvdy5ncm91cEl0ZW07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuZ3JvdXBzU2VydmljZS50b2dnbGVSb3coZ3JvdXBJdGVtLmluZGV4LCBncm91cEl0ZW0uZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnNvci5jZWxsLmRldGFpbEV4cGFuZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmRldGFpbHNTZXJ2aWNlLnRvZ2dsZVJvdyhyb3cuZGF0YVJvd0luZGV4LCByb3cuZGF0YUl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50ZXJDZWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJzb3IuY2VsbC5mb2N1c0dyb3VwLmlzTmF2aWdhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFhcmdzLmN0cmxLZXkgJiYgIWFyZ3MuYWx0S2V5ICYmIGlzUHJpbnRhYmxlQ2hhcmFjdGVyKGFyZ3Mua2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGVyQ2VsbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbnRlbnRLZXlkb3duKGFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9uQ2VsbEtleWRvd24oYXJncykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maXJtID0gIWFyZ3MuZGVmYXVsdFByZXZlbnRlZCAmJiBhcmdzLmtleUNvZGUgPT09IEtleXMuRW50ZXIgJiYgaXNUZXh0SW5wdXQoYXJncy5zcmNFbGVtZW50KTtcbiAgICAgICAgaWYgKGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUgfHwgYXJncy5rZXlDb2RlID09PSBLZXlzLkYyIHx8IGNvbmZpcm0pIHtcbiAgICAgICAgICAgIHRoaXMubGVhdmVDZWxsKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldCgpO1xuICAgICAgICAgICAgYXJncy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc05hdmlnYXRpb25LZXkoYXJncy5rZXlDb2RlKSAmJiB0aGlzLmN1cnNvci5jZWxsLmZvY3VzR3JvdXAuaXNOYXZpZ2FibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvcktleWRvd24oYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWF2ZUNlbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNlbGxLZXlkb3duKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nQ2VsbCgpKSB7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtID0gYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gYXJncy5rZXlDb2RlID09PSBLZXlzLkVzY2FwZTtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRlID0gaXNOYXZpZ2F0aW9uS2V5KGFyZ3Mua2V5Q29kZSk7XG4gICAgICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY2xvc2VDZWxsKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5jYW5jZWxDZWxsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNlbGxLZXlkb3duLmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBvbkN1cnNvckNoYW5nZXMoYXJncykge1xuICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4ID0gYXJncy5yb3dJbmRleDtcbiAgICAgICAgY29uc3QgZGF0YVJvd0luZGV4ID0gdGhpcy5hY3RpdmVEYXRhUm93O1xuICAgICAgICBpZiAodGhpcy5tZXRhICYmICh0aGlzLm1ldGEuaXNWaXJ0dWFsICYmIHRoaXMudmlld3BvcnQgJiZcbiAgICAgICAgICAgICF0aGlzLnZpZXdwb3J0LmNvbnRhaW5zUm93KGRhdGFSb3dJbmRleCkgJiYgZGF0YVJvd0luZGV4ID4gLTEpKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFJlcXVlc3RTZXJ2aWNlLnNjcm9sbFRvKHsgcm93OiBkYXRhUm93SW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWV0YS52aXJ0dWFsQ29sdW1ucyAmJiBhcmdzLmNvbEluZGV4ID49IHRoaXMubWV0YS5jb2x1bW5zLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuYWN0aXZlQ2VsbDtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5tb2RlbC5jZWxsUmFuZ2UoY2VsbCk7XG4gICAgICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxDZWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIWNlbGwgJiYgdGhpcy5tb2RlICE9PSAwIC8qIFN0YW5kYnkgKi8pIHx8IChjZWxsICYmICF0aGlzLmNvbHVtblZpZXdwb3J0LmludGVyc2VjdHMoc3RhcnQsIGVuZCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxSZXF1ZXN0U2VydmljZS5zY3JvbGxUbyh7IGNvbHVtbjogYXJncy5jb2xJbmRleCAtICh0aGlzLm1ldGFkYXRhLmhhc0RldGFpbFRlbXBsYXRlID8gMSA6IDApIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG9uRm9jdXNPdXQoYXJncykge1xuICAgICAgICBpZiAoaXNWaXNpYmxlKGFyZ3MudGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gMCAvKiBTdGFuZGJ5ICovO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRm9jdXNlZCB0YXJnZXQgaXMgbm8gbG9uZ2VyIHZpc2libGUsXG4gICAgICAgICAgICAvLyByZXNldCB0byBjdXJzb3IgbW9kZSBhbmQgcmVjYXB0dXJlIGZvY3VzLlxuICAgICAgICAgICAgdGhpcy5tb2RlID0gMSAvKiBDdXJzb3IgKi87XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5jdXJzb3IuYW5ub3VuY2UoKTtcbiAgICB9XG4gICAgb25XaW5kb3dCbHVyKCkge1xuICAgICAgICB0aGlzLm1vZGUgPSAwIC8qIFN0YW5kYnkgKi87XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgfVxuICAgIG9uS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IDEgLyogQ3Vyc29yICovKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ3Vyc29yS2V5ZG93bihhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1vZGUgPT09IDIgLyogQ29udGVudCAqLykge1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRlbnRLZXlkb3duKGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uVGFib3V0KCkge1xuICAgICAgICAvLyBUYWJiZWQgb3V0IG9mIHRoZSBsYXN0IGZvY3VzYWJsZSBjb250ZW50IGVsZW1lbnRcbiAgICAgICAgLy8gcmVzZXQgdG8gY3Vyc29yIG1vZGUgYW5kIHJlY2FwdHVyZSBmb2N1cy5cbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yLmNlbGwuZm9jdXNHcm91cC5pc05hdmlnYWJsZSgpKSB7XG4gICAgICAgICAgICAvLyBVbmxlc3MgdGhlIGNlbGwgaGFzIGEgc2luZ2xlIGZvY3VzYWJsZSBlbGVtZW50LFxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2QgcmV0dXJuIHRvIENvbnRlbnQgbW9kZSBhbmQgZW50ZXIgYW4gZW5kbGVzcyBsb29wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWF2ZUNlbGwoKTtcbiAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoKTtcbiAgICB9XG59XG5OYXZpZ2F0aW9uU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTmF2aWdhdGlvblNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IERvbUV2ZW50c1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNjcm9sbFJlcXVlc3RTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBHcm91cHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEZXRhaWxzU2VydmljZSB9LFxuICAgIHsgdHlwZTogRm9jdXNSb290IH0sXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEZvY3VzYWJsZURpcmVjdGl2ZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGRvbUV2ZW50cywgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gZG9tRXZlbnRzO1xuICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlID0gbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25TdGFydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cbiAgICBnZXQgZW5hYmxlTWFycXVlZSgpIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hPbmx5ID0gdGhpcy5zZXR0aW5ncyAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncyA9PT0gJ29iamVjdCcgJiYgdGhpcy5zZXR0aW5ncy5jaGVja2JveE9ubHk7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncyB8fCBjaGVja2JveE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RhYmxlU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLnNlbGVjdGFibGU7XG4gICAgICAgIGNvbnN0IGRyYWdBbmRNdWx0aXBsZSA9IHR5cGVvZiAoc2VsZWN0YWJsZVNldHRpbmdzKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGlzUHJlc2VudChzZWxlY3RhYmxlU2V0dGluZ3MpICYmXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2V0dGluZ3MubW9kZSA9PT0gJ211bHRpcGxlJyAmJlxuICAgICAgICAgICAgc2VsZWN0YWJsZVNldHRpbmdzLmVuYWJsZWQgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAhc2VsZWN0YWJsZVNldHRpbmdzLmNoZWNrYm94T25seSAmJlxuICAgICAgICAgICAgc2VsZWN0YWJsZVNldHRpbmdzLmRyYWc7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZSAmJiBkcmFnQW5kTXVsdGlwbGU7XG4gICAgfVxuICAgIGluaXQoc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgaWYgKHNldHRpbmdzLnNlbGVjdGFibGUgJiYgc2V0dGluZ3Muc2VsZWN0YWJsZS5lbmFibGVkICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RBbGxTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgICAgIHdoaWxlICghaXRlbS5kb25lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW06IGl0ZW0udmFsdWUuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLnZhbHVlLmluZGV4XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5yb3dTZWxlY3RlZChyb3dBcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uW2l0ZW0udmFsdWUuaW5kZXhdID0gcm93QXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbFN0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEFsbFN0YXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNTZWxlY3RlZChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncyAmJiB0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmFibGVkICYmIGlzUHJlc2VudCh0aGlzLmN1cnJlbnRTZWxlY3Rpb25baW5kZXhdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDbGljayhpdGVtLCBldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBldjtcbiAgICAgICAgY29uc3QgY3RybEtleSA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSBcInNpbmdsZVwiICYmIGN0cmxLZXkgJiYgdGhpcy5pc1NlbGVjdGVkKGl0ZW0uaW5kZXgpKSB7XG4gICAgICAgICAgICBldiA9IHRoaXMudG9nZ2xlKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgIGlmIChjdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ID0gdGhpcy50b2dnbGUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ID0gdGhpcy5hZGRBbGxUbyhpdGVtLCBjdHJsS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUHJlc2VudChldikpIHtcbiAgICAgICAgICAgIGV2ID0gdGhpcy5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb25baXRlbS5pbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgZGF0YUl0ZW06IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2LnNlbGVjdGVkUm93cy5sZW5ndGggJiYgIWV2LmRlc2VsZWN0ZWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2LmN0cmxLZXkgPSBjdHJsS2V5O1xuICAgICAgICBldi5zaGlmdEtleSA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChldik7XG4gICAgfVxuICAgIHRvZ2dsZShpdGVtKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgbGV0IGRlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvblN0YXJ0SW5kZXggPSBpdGVtLmluZGV4O1xuICAgICAgICBjb25zdCByb3dBcmdzID0geyBkYXRhSXRlbTogaXRlbS5kYXRhLCBpbmRleDogaXRlbS5pbmRleCB9O1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGl0ZW0uaW5kZXgpKSB7XG4gICAgICAgICAgICBkZXNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRSb3dzOiBkZXNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogc2VsZWN0ZWRSb3dzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRvZ2dsZUJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrZWQgJiYgdGhpcy5pc1NlbGVjdGVkKGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghaXRlbS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiICYmIGl0ZW0udmFsdWUuaW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVRvVG9nZ2xlID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLnZhbHVlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLnZhbHVlLmluZGV4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGluZGV4KSB8fCB0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZShpdGVtVG9Ub2dnbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0KGl0ZW1Ub1RvZ2dsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbSA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZWxlY3QoaXRlbSkge1xuICAgICAgICBsZXQgZGVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25TdGFydEluZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoaXRlbS5pbmRleCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHsgZGF0YUl0ZW06IGl0ZW0uZGF0YSwgaW5kZXg6IGl0ZW0uaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdy5pbmRleCAhPT0gaXRlbS5pbmRleCkge1xuICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWRSb3dzLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNlbGVjdGVkUm93czogZGVzZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3M6IHNlbGVjdGVkUm93c1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvL1VzZWQgdG8gbWFudWFsbHkgZGVzZWxlY3QgcmVtb3ZlZCBpdGVtc1xuICAgIGRlc2VsZWN0KHJlbW92ZWRJdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgaXRlbSA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFpdGVtLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUudHlwZSA9PT0gXCJkYXRhXCIgJiYgaXRlbS52YWx1ZS5kYXRhID09PSByZW1vdmVkSXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLnZhbHVlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLnZhbHVlLmluZGV4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKHJvd0FyZ3MuaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxLZXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3M6IFtyb3dBcmdzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93czogW11cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoZXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkQWxsVG8oaXRlbSwgY3RybEtleSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGxldCBkZXNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKHRoaXMubGFzdFNlbGVjdGlvblN0YXJ0SW5kZXgsIGl0ZW0uaW5kZXgpO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heCh0aGlzLmxhc3RTZWxlY3Rpb25TdGFydEluZGV4LCBpdGVtLmluZGV4KTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKG5leHQudmFsdWUgJiYgbmV4dC52YWx1ZS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5leHQudmFsdWUuaW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHsgZGF0YUl0ZW06IG5leHQudmFsdWUuZGF0YSwgaW5kZXg6IGlkeCB9O1xuICAgICAgICAgICAgICAgIGlmICgoaWR4IDwgc3RhcnQgfHwgaWR4ID4gZW5kKSAmJiB0aGlzLmlzU2VsZWN0ZWQoaWR4KSAmJiAhY3RybEtleSkge1xuICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGlkeCA+PSBzdGFydCAmJiBpZHggPD0gZW5kKSAmJiAhdGhpcy5pc1NlbGVjdGVkKGlkeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93QXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3M6IGRlc2VsZWN0ZWRSb3dzLFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZFJvd3NcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdXBkYXRlQWxsKHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID0gc2VsZWN0QWxsQ2hlY2tlZDtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICBsZXQgZGVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKG5leHQudmFsdWUgJiYgbmV4dC52YWx1ZS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5leHQudmFsdWUuaW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHsgZGF0YUl0ZW06IG5leHQudmFsdWUuZGF0YSwgaW5kZXg6IGlkeCB9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoaWR4KSAmJiAhc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChpZHgpICYmIHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93QXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGVjdGVkUm93cy5sZW5ndGggJiYgIWRlc2VsZWN0ZWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIGN0cmxLZXk6IHRydWUsXG4gICAgICAgICAgICBkZXNlbGVjdGVkUm93czogZGVzZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3M6IHNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGV2KTtcbiAgICB9XG4gICAgc2VsZWN0UmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICBsZXQgZGVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBuZXh0ID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIW5leHQuZG9uZSkge1xuICAgICAgICAgICAgaWYgKG5leHQudmFsdWUgJiYgbmV4dC52YWx1ZS50eXBlID09PSBcImRhdGFcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5leHQudmFsdWUuaW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHsgZGF0YUl0ZW06IG5leHQudmFsdWUuZGF0YSwgaW5kZXg6IGlkeCB9O1xuICAgICAgICAgICAgICAgIGlmICgoaWR4IDwgc3RhcnQgfHwgaWR4ID4gZW5kKSAmJiB0aGlzLmlzU2VsZWN0ZWQoaWR4KSkge1xuICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKGlkeCA+PSBzdGFydCAmJiBpZHggPD0gZW5kKSAmJiAhdGhpcy5pc1NlbGVjdGVkKGlkeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2gocm93QXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3M6IGRlc2VsZWN0ZWRSb3dzLFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZFJvd3NcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdEFsbFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsU3RhdGU7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbi5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmluZGV4O1xuICAgICAgICB9KS5maWx0ZXIoKG4pID0+IHR5cGVvZiBuID09PSBcIm51bWJlclwiKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBtb2RlOiBcIm11bHRpcGxlXCJcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5zZXR0aW5ncykpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3Muc2VsZWN0YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNoZWNrYm94T25seTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgIG1vZGU6IFwibXVsdGlwbGVcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLnNldHRpbmdzLnNlbGVjdGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG4gICAgdGFyZ2V0QXJncygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLm1vdXNlRG93bkV2ZW50QXJncy5yb3dJbmRleCxcbiAgICAgICAgICAgIGRhdGFJdGVtOiB0aGlzLm1vdXNlRG93bkV2ZW50QXJncy5kYXRhSXRlbVxuICAgICAgICB9O1xuICAgIH1cbiAgICBhZGRTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMuZG9tRXZlbnRzLmNlbGxDbGljay5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgJiYgIXRoaXMub3B0aW9ucy5jaGVja2JveE9ubHkgJiYgYXJncy50eXBlICE9PSAnY29udGV4dG1lbnUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayh7IGluZGV4OiBhcmdzLnJvd0luZGV4LCBkYXRhOiBhcmdzLmRhdGFJdGVtIH0sIGFyZ3Mub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbiA9IHRoaXMuZG9tRXZlbnRzLmNlbGxNb3VzZWRvd24uc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZURvd25FdmVudEFyZ3MgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGlmICgodGhpcy5vcHRpb25zLmVuYWJsZWQgJiYgKCF0aGlzLm9wdGlvbnMubW9kZSB8fCB0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5vcHRpb25zLmNoZWNrYm94T25seSAmJiBhcmdzLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzQ2VsbEJ5RWxlbWVudChhcmdzLm9yaWdpbmFsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlICYmICF0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KGFyZ3MuYWN0aW9uKSAmJiBhcmdzLmFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3QoYXJncy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEl0ZXJhdG9yKCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IHRoaXMuc2V0dGluZ3Mudmlldy5hY2Nlc3NvcigpO1xuICAgICAgICBpZiAoIWFjY2Vzc29yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY2Vzc29yW2l0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICByZW1vdmVTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblNlbGVjdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNlbGVjdGlvblNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEb21FdmVudHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENlbGxTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihkb21FdmVudHMsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IGRvbUV2ZW50cztcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5tb3VzZVVwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZHJhZ1NlbGVjdERlc2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0gPSB7IGl0ZW1LZXk6IDAsIGNvbHVtbktleTogMCB9O1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtUm93SW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtQ29sSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmFkZFN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZU1hcnF1ZWUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94T25seSA9IHRoaXMuc2V0dGluZ3MgJiYgdHlwZW9mIHRoaXMuc2V0dGluZ3MgPT09ICdvYmplY3QnICYmIHRoaXMuc2V0dGluZ3MuY2hlY2tib3hPbmx5O1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MgfHwgY2hlY2tib3hPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlO1xuICAgICAgICBjb25zdCBkcmFnQW5kTXVsdGlwbGUgPSB0eXBlb2YgKHNlbGVjdGFibGVTZXR0aW5ncykgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBpc1ByZXNlbnQoc2VsZWN0YWJsZVNldHRpbmdzKSAmJlxuICAgICAgICAgICAgc2VsZWN0YWJsZVNldHRpbmdzLm1vZGUgPT09ICdtdWx0aXBsZScgJiZcbiAgICAgICAgICAgIHNlbGVjdGFibGVTZXR0aW5ncy5jZWxsICYmXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2V0dGluZ3MuZW5hYmxlZCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHNlbGVjdGFibGVTZXR0aW5ncy5kcmFnO1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmUgJiYgZHJhZ0FuZE11bHRpcGxlO1xuICAgIH1cbiAgICBpbml0KHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gW107XG4gICAgICAgIGlmIChzZXR0aW5ncy5zZWxlY3RhYmxlICYmIHNldHRpbmdzLnNlbGVjdGFibGUuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIWl0ZW0uZG9uZSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLnZhbHVlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS52YWx1ZS5pbmRleFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbEFyZ3MgPSBzZXR0aW5ncy5jZWxsU2VsZWN0ZWQocm93QXJncywgY29sLCBjb2wubGVhZkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENlbGxBcmdzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRDZWxsQXJncy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNDZWxsU2VsZWN0ZWQoaXRlbSwgY29sKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzICYmIHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxBcmdzID0gdGhpcy5zZXR0aW5ncy5jZWxsU2VsZWN0ZWQoeyBkYXRhSXRlbTogaXRlbS5kYXRhLCBpbmRleDogaXRlbS5pbmRleCB9LCBjb2wsIGNvbC5sZWFmSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5lbmFibGVkICYmIHNlbGVjdGVkQ2VsbEFyZ3Muc2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVDbGljayhpdGVtLCBldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBldjtcbiAgICAgICAgY29uc3QgY3RybEtleSA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSBcInNpbmdsZVwiICYmIGN0cmxLZXkgJiYgdGhpcy5pc0NlbGxTZWxlY3RlZChpdGVtLCBpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgIGV2ID0gdGhpcy50b2dnbGUoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgaWYgKGN0cmxLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgZXYgPSB0aGlzLnRvZ2dsZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSb3dJbmRleCA9IE1hdGgubWluKHRoaXMubGFzdFNlbGVjdGlvbkl0ZW1Sb3dJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IE1hdGgubWluKHRoaXMubGFzdFNlbGVjdGlvbkl0ZW1Db2xJbmRleCwgaXRlbS5jb2x1bW4ubGVhZkluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRSb3dJbmRleCA9IE1hdGgubWF4KHRoaXMubGFzdFNlbGVjdGlvbkl0ZW1Sb3dJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kQ29sSW5kZXggPSBNYXRoLm1heCh0aGlzLmxhc3RTZWxlY3Rpb25JdGVtQ29sSW5kZXgsIGl0ZW0uY29sdW1uLmxlYWZJbmRleCk7XG4gICAgICAgICAgICAgICAgZXYgPSB0aGlzLnNlbGVjdFJhbmdlKHN0YXJ0Um93SW5kZXgsIHN0YXJ0Q29sSW5kZXgsIGVuZFJvd0luZGV4LCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoZXYpKSB7XG4gICAgICAgICAgICBldiA9IHRoaXMuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gW3RoaXMubGFzdFNlbGVjdGlvbkl0ZW1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXYuc2VsZWN0ZWRDZWxscy5sZW5ndGggJiYgIWV2LmRlc2VsZWN0ZWRDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldi5jdHJsS2V5ID0gY3RybEtleTtcbiAgICAgICAgZXYuc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoZXYpO1xuICAgIH1cbiAgICB0b2dnbGUoaXRlbSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgICAgICBsZXQgZGVzZWxlY3RlZENlbGxzID0gW107XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0gPVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jZWxsU2VsZWN0ZWQoeyBkYXRhSXRlbTogaXRlbS5kYXRhLCBpbmRleDogaXRlbS5pbmRleCB9LCBpdGVtLmNvbHVtbiwgaXRlbS5jb2x1bW4ubGVhZkluZGV4KS5pdGVtO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtUm93SW5kZXggPSBpdGVtLmluZGV4O1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtQ29sSW5kZXggPSBpdGVtLmNvbHVtbi5sZWFmSW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmlzQ2VsbFNlbGVjdGVkKGl0ZW0sIGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgZGVzZWxlY3RlZENlbGxzLnB1c2godGhpcy5sYXN0U2VsZWN0aW9uSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzLnB1c2godGhpcy5sYXN0U2VsZWN0aW9uSXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRDZWxscyxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHNcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2VsZWN0KGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBkZXNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uSXRlbSA9XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNlbGxTZWxlY3RlZCh7IGRhdGFJdGVtOiBpdGVtLmRhdGEsIGluZGV4OiBpdGVtLmluZGV4IH0sIGl0ZW0uY29sdW1uLCBpdGVtLmNvbHVtbi5sZWFmSW5kZXgpLml0ZW07XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbkl0ZW1Sb3dJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbkl0ZW1Db2xJbmRleCA9IGl0ZW0uY29sdW1uLmxlYWZJbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2VsbFNlbGVjdGVkKGl0ZW0sIGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRDZWxscy5wdXNoKHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbi5mb3JFYWNoKChzZWxlY3RlZEl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0uaXRlbUtleSAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uSXRlbS5pdGVtS2V5IHx8IHNlbGVjdGVkSXRlbS5jb2x1bW5LZXkgIT09IHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0uY29sdW1uS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVzZWxlY3RlZENlbGxzLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNlbGVjdGVkQ2VsbHMsXG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vVXNlZCB0byBtYW51YWxseSBkZXNlbGVjdCByZW1vdmVkIGl0ZW1zXG4gICAgZGVzZWxlY3QocmVtb3ZlZEl0ZW0pIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmdldEl0ZXJhdG9yKCk7XG4gICAgICAgIGxldCBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICBsZXQgcm93QXJncztcbiAgICAgICAgd2hpbGUgKCFpdGVtLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUudHlwZSA9PT0gXCJkYXRhXCIgJiYgaXRlbS52YWx1ZS5kYXRhID09PSByZW1vdmVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLnZhbHVlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLnZhbHVlLmluZGV4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0FyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzVG9SZW1vdmUgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb24uZmlsdGVyKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVuZGVyID0gdGhpcy5zZXR0aW5ncy5jZWxsU2VsZWN0ZWQocm93QXJncywgbnVsbCwgbnVsbCkuaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtLml0ZW1LZXkgPT09IGNvbnRlbmRlci5pdGVtS2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2VsbHNUb1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICAgICAgICAgIGN0cmxLZXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdGVkQ2VsbHM6IGNlbGxzVG9SZW1vdmUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHM6IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZWN0UmFuZ2Uoc3RhcnRSb3dJbmRleCwgc3RhcnRDb2xJbmRleCwgZW5kUm93SW5kZXgsIGVuZENvbEluZGV4KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICAgICAgY29uc3QgZGVzZWxlY3RlZENlbGxzID0gW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0Um93ID0gTWF0aC5taW4oc3RhcnRSb3dJbmRleCwgZW5kUm93SW5kZXgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydENvbCA9IE1hdGgubWluKHN0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kUm93ID0gTWF0aC5tYXgoc3RhcnRSb3dJbmRleCwgZW5kUm93SW5kZXgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25FbmRDb2wgPSBNYXRoLm1heChzdGFydENvbEluZGV4LCBlbmRDb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlICYmIG5leHQudmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBuZXh0LnZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXh0LnZhbHVlLmRhdGE7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpZHhcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaXRlbSB9ID0gdGhpcy5zZXR0aW5ncy5jZWxsU2VsZWN0ZWQocm93QXJncywgY29sLCBjb2wubGVhZkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmlzQ2VsbFNlbGVjdGVkKG5leHQudmFsdWUsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5Sb3dSYW5nZSA9IHNlbGVjdGlvblN0YXJ0Um93IDw9IGlkeCAmJiBpZHggPD0gc2VsZWN0aW9uRW5kUm93O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0luQ29sUmFuZ2UgPSBzZWxlY3Rpb25TdGFydENvbCA8PSBjb2wubGVhZkluZGV4ICYmIGNvbC5sZWFmSW5kZXggPD0gc2VsZWN0aW9uRW5kQ29sO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0luU2VsZWN0aW9uUmVjdCA9IGlzSW5Sb3dSYW5nZSAmJiBpc0luQ29sUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNJblNlbGVjdGlvblJlY3QgJiYgc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWRDZWxscy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0luU2VsZWN0aW9uUmVjdCAmJiAhc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzZWxlY3RlZENlbGxzLFxuICAgICAgICAgICAgc2VsZWN0ZWRDZWxsc1xuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1vZGU6IFwibXVsdGlwbGVcIlxuICAgICAgICB9O1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLnNldHRpbmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0aGlzLnNldHRpbmdzLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgbW9kZTogXCJtdWx0aXBsZVwiXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIHRoaXMuc2V0dGluZ3Muc2VsZWN0YWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cbiAgICBhZGRTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMuZG9tRXZlbnRzLmNlbGxDbGljay5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgJiYgIXRoaXMub3B0aW9ucy5jaGVja2JveE9ubHkgJiYgYXJncy50eXBlICE9PSAnY29udGV4dG1lbnUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayh7IGluZGV4OiBhcmdzLnJvd0luZGV4LCBkYXRhOiBhcmdzLmRhdGFJdGVtLCBjb2x1bW46IGFyZ3MuY29sdW1uIH0sIGFyZ3Mub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbiA9IHRoaXMuZG9tRXZlbnRzLmNlbGxNb3VzZWRvd24uc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZURvd25FdmVudEFyZ3MgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlZCAmJiAoIXRoaXMub3B0aW9ucy5tb2RlIHx8IHRoaXMub3B0aW9ucy5tb2RlID09PSBcIm11bHRpcGxlXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLm9wdGlvbnMuY2hlY2tib3hPbmx5ICYmIGFyZ3Mub3JpZ2luYWxFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb2N1c0NlbGxCeUVsZW1lbnQoYXJncy5vcmlnaW5hbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSAmJiAhdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChhcmdzLmFjdGlvbikgJiYgYXJncy5hY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KGFyZ3MuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRJdGVyYXRvcigpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSB0aGlzLnNldHRpbmdzLnZpZXcuYWNjZXNzb3IoKTtcbiAgICAgICAgaWYgKCFhY2Nlc3Nvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2Nlc3NvcltpdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgcmVtb3ZlU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5DZWxsU2VsZWN0aW9uU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2VsbFNlbGVjdGlvblNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEb21FdmVudHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfVxuXTtcblxuY29uc3QgY3JlYXRlRWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBtYXJxdWVlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBtYXJxdWVlLmNsYXNzTmFtZSA9IFwiay1tYXJxdWVlXCI7XG4gICAgY29uc3QgbWFycXVlZUNvbG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBtYXJxdWVlQ29sb3IuY2xhc3NOYW1lID0gXCJrLW1hcnF1ZWUtY29sb3JcIjtcbiAgICBtYXJxdWVlLmFwcGVuZENoaWxkKG1hcnF1ZWVDb2xvcik7XG4gICAgcmV0dXJuIG1hcnF1ZWU7XG59O1xuY29uc3QgUE9JTlRFUl9PRkZTRVQgPSAyO1xuY29uc3QgTUlOSU1BTF9EUkFHX0RJU1RBTkNFID0gNTtcbmNvbnN0IG9mZnNldHMgPSB7XG4gICAgdG9wTGVmdDogeyB4OiBQT0lOVEVSX09GRlNFVCwgeTogUE9JTlRFUl9PRkZTRVQgfSxcbiAgICB0b3BSaWdodDogeyB4OiAtUE9JTlRFUl9PRkZTRVQsIHk6IFBPSU5URVJfT0ZGU0VUIH0sXG4gICAgYm90dG9tTGVmdDogeyB4OiBQT0lOVEVSX09GRlNFVCwgeTogLVBPSU5URVJfT0ZGU0VUIH0sXG4gICAgYm90dG9tUmlnaHQ6IHsgeDogLVBPSU5URVJfT0ZGU0VULCB5OiAtUE9JTlRFUl9PRkZTRVQgfVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBHcmlkTWFycXVlZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZHJhZ2dhYmxlLCBzZWxlY3Rpb24sIGNlbGxTZWxlY3Rpb24sIGRvbUV2ZW50cykge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbiA9IGNlbGxTZWxlY3Rpb247XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gZG9tRXZlbnRzO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHVzZXJTZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5jZWxsU2VsZWN0aW9uLmVuYWJsZU1hcnF1ZWUgfHwgdGhpcy5zZWxlY3Rpb24uZW5hYmxlTWFycXVlZSkgPyAnbm9uZScgOiBudWxsO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gKHRoaXMuZHJhZ2dhYmxlLmtlbmRvUHJlc3Muc3Vic2NyaWJlKHRoaXMuc3RhcnQuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZHJhZ2dhYmxlLmtlbmRvRHJhZy5zdWJzY3JpYmUodGhpcy5tb3ZlTWFycXVlZS5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jbGVhbigpO1xuICAgIH1cbiAgICBzdGFydChhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLm9yaWdpbmFsRXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnay1jaGVja2JveCcpKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzQXJncyA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVzc0FyZ3MgPSBhcmdzO1xuICAgICAgICB0aGlzLnByZXNzVGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gICAgbW92ZU1hcnF1ZWUoYXJncykge1xuICAgICAgICBpZiAoIXRoaXMucHJlc3NUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMucHJlc3NUYXJnZXQgPSB0aGlzLmNlbGxTZWxlY3Rpb24uYWN0aXZlID8gdGhpcy5jZWxsU2VsZWN0aW9uLm1vdXNlRG93bkV2ZW50QXJncyA6IHRoaXMuc2VsZWN0aW9uLm1vdXNlRG93bkV2ZW50QXJncztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVzcyA9IHRoaXMucHJlc3NBcmdzO1xuICAgICAgICBpZiAoIXByZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KChhcmdzLnBhZ2VYIC0gcHJlc3MucGFnZVgpLCAyKSArIE1hdGgucG93KChhcmdzLnBhZ2VZIC0gcHJlc3MucGFnZVkpLCAyKSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBNSU5JTUFMX0RSQUdfRElTVEFOQ0UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0VuZFN1YnNjcmlwdGlvbiA9IG1lcmdlKHRoaXMuZG9tRXZlbnRzLmNlbGxNb3VzZXVwLnBpcGUodGFrZSgxKSksIHRoaXMuZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZS5waXBlKGRlbGF5KDEpLCB0YWtlKDEpKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmVuZFNlbGVjdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRNYXJxdWVlKCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm1hcnF1ZWVFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXJxdWVlUXVhZHJhbnQgPSB0aGlzLmdldE1hcnF1ZWVRdWFkcmFudChhcmdzLnBhZ2VYLCBhcmdzLnBhZ2VZLCBwcmVzcy5wYWdlWCwgcHJlc3MucGFnZVkpO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGgubWluKGFyZ3MucGFnZVgsIHByZXNzLnBhZ2VYKTtcbiAgICAgICAgbGV0IHRvcCA9IE1hdGgubWluKGFyZ3MucGFnZVksIHByZXNzLnBhZ2VZKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmFicyhhcmdzLnBhZ2VYIC0gcHJlc3MucGFnZVgpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmFicyhhcmdzLnBhZ2VZIC0gcHJlc3MucGFnZVkpO1xuICAgICAgICBpZiAobWFycXVlZVF1YWRyYW50KSB7XG4gICAgICAgICAgICBsZWZ0ICs9IG9mZnNldHNbbWFycXVlZVF1YWRyYW50XS54O1xuICAgICAgICAgICAgdG9wICs9IG9mZnNldHNbbWFycXVlZVF1YWRyYW50XS55O1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG4gICAgZW5kU2VsZWN0aW9uKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gJ21vdXNldXAnIHx8IGFyZ3MudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbi5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb24uZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbi5jaGFuZ2VzLmVtaXQodGhpcy5jZWxsU2VsZWN0aW9uLnNlbGVjdFJhbmdlKHRoaXMucHJlc3NUYXJnZXQucm93SW5kZXgsIHRoaXMucHJlc3NUYXJnZXQuY29sdW1uLmxlYWZJbmRleCwgYXJncy5yb3dJbmRleCwgYXJncy5jb2x1bW4ubGVhZkluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbi5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2hhbmdlcy5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdFJhbmdlKHRoaXMucHJlc3NUYXJnZXQucm93SW5kZXgsIGFyZ3Mucm93SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFuKCk7XG4gICAgfVxuICAgIGNsZWFuKCkge1xuICAgICAgICBpZiAodGhpcy5tYXJxdWVlRWxlbWVudCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLm1hcnF1ZWVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubWFycXVlZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRyYWdFbmRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0VuZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZHJhZ0VuZFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucHJlc3NUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNzQXJncyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb24uYWN0aXZlID8gdGhpcy5jZWxsU2VsZWN0aW9uLmRyYWdnaW5nID0gZmFsc2UgOiB0aGlzLnNlbGVjdGlvbi5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpbml0TWFycXVlZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcnF1ZWVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm1hcnF1ZWVFbGVtZW50ID0gY3JlYXRlRWxlbWVudCgpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1hcnF1ZWVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRNYXJxdWVlUXVhZHJhbnQocG9pbnRlclgsIHBvaW50ZXJZLCBzdGFydFgsIHN0YXJ0WSkge1xuICAgICAgICBjb25zdCBsZWZ0SGFsZiA9IHBvaW50ZXJYIDwgc3RhcnRYO1xuICAgICAgICBjb25zdCByaWdodEhhbGYgPSBwb2ludGVyWCA+IHN0YXJ0WDtcbiAgICAgICAgY29uc3QgdG9wSGFsZiA9IHBvaW50ZXJZIDwgc3RhcnRZO1xuICAgICAgICBjb25zdCBib3R0b21IYWxmID0gcG9pbnRlclkgPiBzdGFydFk7XG4gICAgICAgIGlmIChsZWZ0SGFsZiAmJiB0b3BIYWxmKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvcExlZnQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0SGFsZiAmJiBib3R0b21IYWxmKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JvdHRvbUxlZnQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyaWdodEhhbGYgJiYgdG9wSGFsZikge1xuICAgICAgICAgICAgcmV0dXJuICd0b3BSaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJpZ2h0SGFsZiAmJiBib3R0b21IYWxmKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JvdHRvbVJpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5HcmlkTWFycXVlZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFNlbGVjdGlvbk1hcnF1ZWVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5HcmlkTWFycXVlZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYWdnYWJsZURpcmVjdGl2ZSB9LFxuICAgIHsgdHlwZTogU2VsZWN0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2VsbFNlbGVjdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERvbUV2ZW50c1NlcnZpY2UgfVxuXTtcbkdyaWRNYXJxdWVlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHVzZXJTZWxlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLnVzZXItc2VsZWN0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuLXdlYmtpdC11c2VyLXNlbGVjdCcsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFpvbmVBd2FyZUV2ZW50RW1pdHRlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3RydWN0b3Iobmdab25lLCBpc0FzeW5jID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoaXNBc3luYyk7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgIH1cbiAgICBzdWJzY3JpYmUoZ2VuZXJhdG9yT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgbGV0IHNjaGVkdWxlckZuO1xuICAgICAgICBsZXQgZXJyb3JGbiA9IChfKSA9PiBudWxsO1xuICAgICAgICBsZXQgY29tcGxldGVGbiA9ICgpID0+IG51bGw7XG4gICAgICAgIGlmIChnZW5lcmF0b3JPck5leHQgJiYgdHlwZW9mIGdlbmVyYXRvck9yTmV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlckZuID0gKHZhbHVlKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBnZW5lcmF0b3JPck5leHQubmV4dCh2YWx1ZSkpOyB9O1xuICAgICAgICAgICAgaWYgKGdlbmVyYXRvck9yTmV4dC5lcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yRm4gPSAoZXJyKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBnZW5lcmF0b3JPck5leHQuZXJyb3IoZXJyKSk7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2VuZXJhdG9yT3JOZXh0LmNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVGbiA9ICgpID0+IHsgdGhpcy5uZ1pvbmUucnVuKCgpID0+IGdlbmVyYXRvck9yTmV4dC5jb21wbGV0ZSgpKTsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNjaGVkdWxlckZuID0gKHZhbHVlKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBnZW5lcmF0b3JPck5leHQodmFsdWUpKTsgfTtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yRm4gPSAoZXJyKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBlcnJvcihlcnIpKTsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlRm4gPSAoKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBjb21wbGV0ZSgpKTsgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuc3Vic2NyaWJlKHNjaGVkdWxlckZuLCBlcnJvckZuLCBjb21wbGV0ZUZuKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEdyaWQgKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIHRlbXBsYXRlc19jb2x1bW5zX2dyaWQgJX0jdG9jLWNlbGwtdGVtcGxhdGUpKS5cbiAqIEhlbHBzIHRvIGN1c3RvbWl6ZSB0aGUgY29udGVudCBvZiB0aGUgY2VsbHMuIFRvIGRlZmluZSB0aGUgY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9HcmlkQ2VsbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGEgYDxrZW5kby1ncmlkLWNvbHVtbj5gIHRhZy5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0YSBpdGVtIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAtIGBjb2x1bW5JbmRleGAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluZGV4LiBVc2UgaXQgYXMgYW4gYWxpYXMgZm9yIGEgdGVtcGxhdGUgdmFyaWFibGUgYnkgdXRpbGl6aW5nIHRoZSBgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcImAgc3ludGF4LlxuICogLSBgcm93SW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgcm93IGluZGV4LiBVc2UgaXQgYXMgYW4gYWxpYXMgZm9yIGEgdGVtcGxhdGUgdmFyaWFibGUgYnkgdXRpbGl6aW5nIHRoZSBgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcImAgc3ludGF4LlxuICogLSBgZGF0YUl0ZW1gJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgaXRlbS4gUmVwcmVzZW50cyB0aGUgZGVmYXVsdCBjb250ZXh0IHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBhbnkgdGVtcGxhdGUgdmFyaWFibGUgd2hpY2ggdXRpbGl6ZXMgdGhlIGBsZXQteGAgc3ludGF4Jm1kYXNoO2ZvciBleGFtcGxlLCBgbGV0LWRhdGFJdGVtYC5cbiAqIC0gYGNvbHVtbmAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluc3RhbmNlLiBVc2UgaXQgYXMgYW4gYWxpYXMgZm9yIGEgdGVtcGxhdGUgdmFyaWFibGUgYnkgdXRpbGl6aW5nIHRoZSBgbGV0LWNvbHVtbj1cImNvbHVtblwiYCBzeW50YXguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCI+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gKiAgICAgICAgICAgICAgICAgICAgIERhdGEgUm93ICM6IHt7cm93SW5kZXh9fSAvXG4gKiAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tkYXRhSXRlbS5Qcm9kdWN0TmFtZX19PC9zdHJvbmc+XG4gKiAgICAgICAgICAgICAgICAgICAgICh7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/IFwiZGlzY29udGludWVkXCIgOiBcImFjdGl2ZVwifX0pXG4gKiAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDZWxsVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5DZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRDZWxsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBncm91cC1oZWFkZXIgY2VsbCB0ZW1wbGF0ZSBvZiB0aGUgR3JpZCB3aGljaCBoZWxwcyB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwIGhlYWRlciBpdGVtLlxuICogVG8gZGVmaW5lIHRoZSBncm91cCBoZWFkZXIgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9HcmlkR3JvdXBIZWFkZXJUZW1wbGF0ZWBcbiAqIGRpcmVjdGl2ZSBpbnNpZGUgYDxrZW5kby1ncmlkLWNvbHVtbj5gLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBkYXRhIGl0ZW0gYW5kIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmaWVsZHMgYXJlIHBhc3NlZDpcbiAqIC0gYGdyb3VwYCZtZGFzaDtUaGUgY3VycmVudCBncm91cCBpdGVtLlxuICogLSBgZmllbGRgJm1kYXNoO1RoZSBuYW1lIG9mIHRoZSBmaWVsZCBieSB3aGljaCBkYXRhIGlzIGdyb3VwZWQuXG4gKiAtIGB2YWx1ZWAmbWRhc2g7VGhlIGN1cnJlbnQgZ3JvdXAgdmFsdWUuXG4gKiAtIGBhZ2dyZWdhdGVzYCZtZGFzaDtBbGwgYWdncmVnYXRlIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAuXG4gKiAtIGBpbmRleGAmbWRhc2g7VGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGdyb3VwLlxuICogLSBgZXhwYW5kZWRgJm1kYXNoO0EgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBncm91cCBpcyBjdXJyZW50bHkgZXhwYW5kZWQuXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdyb3VwYWJsZV9ncmlkX3dpdGhfYWdncmVnYXRlcyAlfSkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW2dyb3VwXT1cImdyb3Vwc1wiPlxuICogICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkR3JvdXBIZWFkZXJUZW1wbGF0ZSBsZXQtZ3JvdXAgbGV0LWZpZWxkPVwiZmllbGRcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tmaWVsZH19PC9zdHJvbmc+OiB7e3ZhbHVlfX1cbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZ3JvdXBzID0gW3sgZmllbGQ6IFwiUHJvZHVjdE5hbWVcIiB9XTtcbiAqXG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gcHJvY2Vzcyhbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF0sIHtcbiAqICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXBzXG4gKiAgICAgfSk7XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Hcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkR3JvdXBIZWFkZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBncm91cC1oZWFkZXIgY29sdW1uIHRlbXBsYXRlIG9mIHRoZSBHcmlkIHdoaWNoIGhlbHBzIHRvIGN1c3RvbWl6ZSB0aGUgY29udGVudCBvZiB0aGUgZ3JvdXAgaGVhZGVycy5cbiAqIFRvIGRlZmluZSB0aGUgZ3JvdXAgaGVhZGVyIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVgXG4gKiBkaXJlY3RpdmUgaW5zaWRlIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YC4gKFtTZWUgZXhhbXBsZV0oeyUgc2x1ZyBncm91cGFibGVfZ3JpZF93aXRoX2FnZ3JlZ2F0ZXMgJX0pKS5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0YSBpdGVtIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAtIGBncm91cGAmbWRhc2g7VGhlIGN1cnJlbnQgZ3JvdXAgaXRlbS5cbiAqIC0gYGZpZWxkYCZtZGFzaDtUaGUgbmFtZSBvZiB0aGUgZmllbGQgYnkgd2hpY2ggZGF0YSBpcyBncm91cGVkLlxuICogLSBgdmFsdWVgJm1kYXNoO1RoZSBjdXJyZW50IGdyb3VwIHZhbHVlLlxuICogLSBgYWdncmVnYXRlc2AmbWRhc2g7QWxsIGFnZ3JlZ2F0ZSB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlIGxldC1ncm91cD1cImdyb3VwXCIgbGV0LWFnZ3JlZ2F0ZXM9XCJhZ2dyZWdhdGVzXCI+XG4gKiAgICAgICAgIDxzcGFuIHRpdGxlPVwiR3JvdXAgSGVhZGVyIENvbHVtbiBUZW1wbGF0ZSBmb3IgUHJvZHVjdE5hbWVcIj5cbiAqICAgICAgICAgICAgIENvdW50OiB7eyBhZ2dyZWdhdGVzLkRpc2NvbnRpbnVlZC5jb3VudCB9fVxuICogICAgICAgICA8L3NwYW4+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiBgYGBcbiAqL1xuY2xhc3MgR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbiBlZGl0LWNlbGwgdGVtcGxhdGUgb2YgdGhlIEdyaWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0pKS5cbiAqIEhlbHBzIHRvIGN1c3RvbWl6ZSB0aGUgY29udGVudCBvZiB0aGUgZWRpdGVkIGNlbGxzLiBUbyBkZWZpbmUgdGhlIGNlbGwgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gXG4gKiB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZEVkaXRUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSBhIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YCB0YWcuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAtIGBmb3JtR3JvdXBgJm1kYXNoO1RoZSBjdXJyZW50IFtgRm9ybUdyb3VwYF0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnZm9ybWdyb3VwYXBpJ10gfX0pLlxuICogSWYgeW91IHVzZSB0aGUgR3JpZCBpbnNpZGUgW1RlbXBsYXRlLURyaXZlbiBGb3Jtc10oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnZm9ybXMnXSB9fSksIGl0IHdpbGwgYmUgYHVuZGVmaW5lZGAuXG4gKiAtIGByb3dJbmRleGAmbWRhc2g7VGhlIGN1cnJlbnQgZGF0YSByb3cgaW5kZXguIElmIGluc2lkZSBhIG5ldyBpdGVtIHJvdywgYHJvd0luZGV4YCBpcyBgLTFgLlxuICogLSBgZGF0YUl0ZW1gJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgaXRlbS5cbiAqIC0gYGNvbHVtbmAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluc3RhbmNlLlxuICogLSBgaXNOZXdgJm1kYXNoO1RoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpdGVtLlxuICovXG5jbGFzcyBFZGl0VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5FZGl0VGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRFZGl0VGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FZGl0VGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb2x1bW4gZ3JvdXAgZm9vdGVyIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEdyaWQgd2hpY2ggaGVscHMgdG8gY3VzdG9taXplIHRoZSBncm91cCBmb290ZXIgY2VsbCBmb3IgdGhlIGNvbHVtbi5cbiAqIFRvIGRlZmluZSB0aGUgZ3JvdXAgZm9vdGVyIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZEdyb3VwRm9vdGVyVGVtcGxhdGVgIGRpcmVjdGl2ZVxuICogaW5zaWRlIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YC5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgYWdncmVnYXRlcyBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZpZWxkcyBhcmUgcGFzc2VkOlxuICogLSBgY29sdW1uYCZtZGFzaDtEZWZpbmVzIGFuIGluc3RhbmNlIG9mIHRoZSBgQ29sdW1uQ29tcG9uZW50YCBvcHRpb24uXG4gKiAtIGBmaWVsZGAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGZpZWxkIG5hbWUuXG4gKiAtIGBncm91cGAmbWRhc2g7VGhlIGN1cnJlbnQgZ3JvdXAgZGF0YSBpdGVtLlxuICogLSBgYWdncmVnYXRlc2AmbWRhc2g7QWxsIGFnZ3JlZ2F0ZSB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKiBpbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBzXCI+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRHcm91cEZvb3RlclRlbXBsYXRlIGxldC1hZ2dyZWdhdGVzIGxldC1maWVsZD1cImZpZWxkXCI+XG4gKiAgICAgICAgICAgICAgICAgICAgQ291bnQ6IHt7YWdncmVnYXRlc1tmaWVsZF0uY291bnR9fVxuICogICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBncm91cHMgPSBbeyBmaWVsZDogXCJQcm9kdWN0TmFtZVwiLCBhZ2dyZWdhdGVzOiBbeyBmaWVsZDogXCJQcm9kdWN0TmFtZVwiLCBhZ2dyZWdhdGU6IFwiY291bnRcIiB9XSB9XTtcbiAqXG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gcHJvY2Vzcyhbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF0sIHtcbiAqICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXBzXG4gKiAgICAgfSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRHcm91cEZvb3RlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbiBoZWFkZXIgY2VsbCB0ZW1wbGF0ZSBvZiB0aGUgR3JpZFxuICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIHRlbXBsYXRlc19jb2x1bW5zX2dyaWQgJX0jdG9jLWhlYWRlci10ZW1wbGF0ZSkpLlxuICogSGVscHMgdG8gY3VzdG9taXplIHRoZSB0YWJsZSBoZWFkZXIgY2VsbCBmb3IgdGhlIGNvbHVtbi5cbiAqIFRvIGRlZmluZSBhIGhlYWRlciB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlXG4gKiBbYGtlbmRvR3JpZEhlYWRlclRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9oZWFkZXJ0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlIGluc2lkZSB0aGUgYDxrZW5kby1ncmlkLWNvbHVtbj5gIHRhZy5cbiAqXG4gKiAgVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAqIGBjb2x1bW5gJm1kYXNoO0RlZmluZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFtgQ29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5jb21wb25lbnQgJX0pIG9wdGlvbi5cbiAqICogYGNvbHVtbkluZGV4YCZtZGFzaDtEZWZpbmVzIHRoZSBjdXJyZW50IGNvbHVtbiBpbmRleC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIj5cbiAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+XG4gKiAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEhlYWRlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cbiAqICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLmZpZWxkfX0oe3tjb2x1bW5JbmRleH19KVxuICogICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCI+XG4gKiAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5maWVsZH19KHt7Y29sdW1uSW5kZXh9fSlcbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZ3JpZERhdGEgPSBbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGZvb3RlciBjZWxsIHRlbXBsYXRlIG9mIHRoZSBHcmlkXG4gKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgdGVtcGxhdGVzX2NvbHVtbnNfZ3JpZCAlfSN0b2MtZm9vdGVyLXRlbXBsYXRlKSkuXG4gKiBIZWxwcyB0byBjdXN0b21pemUgdGhlIHRhYmxlIGZvb3RlciBjZWxsIGZvciB0aGUgY29sdW1uLlxuICogVG8gZGVmaW5lIGEgZm9vdGVyIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGVcbiAqIFtga2VuZG9HcmlkRm9vdGVyVGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2Zvb3RlcnRlbXBsYXRlZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUgaW5zaWRlIHRoZSBgPGtlbmRvLWdyaWQtY29sdW1uPmAgdGFnLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmaWVsZHMgYXJlIHBhc3NlZDpcbiAqICogYGNvbHVtbmAmbWRhc2g7RGVmaW5lcyBhbiBpbnN0YW5jZSBvZiB0aGUgW2BDb2x1bW5Db21wb25lbnRgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbmNvbXBvbmVudCAlfSkgb3B0aW9uLlxuICogKiBgY29sdW1uSW5kZXhgJm1kYXNoO0RlZmluZXMgdGhlIGN1cnJlbnQgY29sdW1uIGluZGV4LlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkaXNwbGF5IGFnZ3JlZ2F0ZXMgaW4gdGhlIGZvb3RlciBvZiB0aGUgR3JpZCxcbiAqIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFthZ2dyZWdhdGVzXSh7JSBzbHVnIGdyb3VwYWJsZV9ncmlkX3dpdGhfYWdncmVnYXRlcyAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgc2Nyb2xsYWJsZT1cIm5vbmVcIj5cbiAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+XG4gKiAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIj5cbiAqICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLmZpZWxkfX0oe3tjb2x1bW5JbmRleH19KVxuICogICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCI+XG4gKiAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5maWVsZH19KHt7Y29sdW1uSW5kZXh9fSlcbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZ3JpZERhdGEgPSBbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRGb290ZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbHVtbiBtZW51IGluIHRoZSBHcmlkLiBQcm92aWRlcyBhbiBvcHRpb24gZm9yXG4gKiBjdXN0b21pemluZyB0aGUgY29udGVudCBvZiB0aGUgY29sdW1uIG1lbnUgZm9yIGFsbCBvciBmb3Igc3BlY2lmaWMgY29sdW1ucy5cbiAqIFRvIGRlZmluZSB0aGUgY29udGVudCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlXG4gKiBga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBga2VuZG8tZ3JpZGAgb3IgdGhlIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YCBjb21wb25lbnQuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgcGFzc2VzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAtIGBzZXJ2aWNlYCZtZGFzaDtSZXByZXNlbnRzIHRoZSBbQ29sdW1uTWVudVNlcnZpY2VdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXNlcnZpY2UgJX0pLlxuICogLSBgY29sdW1uYCZtZGFzaDtSZXByZXNlbnRzIHRoZSBHcmlkIGNvbHVtbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtrZW5kb0dyaWRCaW5kaW5nXT1cImRhdGFcIiBbc29ydGFibGVdPVwidHJ1ZVwiIFtjb2x1bW5NZW51XT1cInRydWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51VGVtcGxhdGUgbGV0LXNlcnZpY2U9XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0IFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0PlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMVwiIFt3aWR0aF09XCIxMDBcIj5cbiAqICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2sgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrPlxuICogICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0PlxuICogICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQyXCIgW3dpZHRoXT1cIjEwMFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH0sIHsgRmllbGQxOiAnRm9vMScsIEZpZWxkMjogJ0JhcjEnIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5NZW51VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Db2x1bW5NZW51VGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRDb2x1bW5NZW51VGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5NZW51VGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzU3BhbkNvbHVtbiA9IGNvbHVtbiA9PiBjb2x1bW4uaXNTcGFuQ29sdW1uO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzQ2hlY2tib3hDb2x1bW4gPSBjb2x1bW4gPT4gY29sdW1uLmlzQ2hlY2tib3hDb2x1bW47XG5jb25zdCBpc0NvbHVtbkNvbnRhaW5lciA9IGNvbHVtbiA9PiBjb2x1bW4uaXNDb2x1bW5Hcm91cCB8fCBpc1NwYW5Db2x1bW4oY29sdW1uKTtcbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIHRoZSBjb2x1bW4gY29tcG9uZW50cyBvZiB0aGUgR3JpZC5cbiAqL1xuY2xhc3MgQ29sdW1uQmFzZSQxIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hdGNoZXNNZWRpYSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY29sdW1uIGluZGV4IGFmdGVyIHJlb3JkZXJpbmcuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gYG9yZGVySW5kZXhgIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5LiBTZXR0aW5nIHRoaXMgZmllbGQgZG9lcyBub3QgYWZmZWN0IGNvbHVtbiBvcmRlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3JkZXJJbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzQ29sdW1uR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNTcGFuQ29sdW1uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29sdW1uIGlzIHJlc2l6YWJsZS5cbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZXNpemFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyByZW9yZGVyYWJsZS5cbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZW9yZGVyYWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgd2lkdGggKGluIHBpeGVscykgYmVsb3cgd2hpY2ggdGhlIHVzZXIgaXMgbm90IGFibGUgdG8gcmVzaXplIHRoZSBjb2x1bW4gYnkgdXNpbmcgdGhlIFVJLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5taW5SZXNpemFibGVXaWR0aCA9IDEwO1xuICAgICAgICAvKipcbiAgICAgICAgICogVG9nZ2xlcyB0aGUgbG9ja2VkIChmcm96ZW4pIHN0YXRlIG9mIHRoZSBjb2x1bW5zIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBsb2NrZWRfY29sdW1uc19ncmlkICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCIgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4XCI+XG4gICAgICAgICAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTIwXCIgW2xvY2tlZF09XCJ0cnVlXCI+XG4gICAgICAgICAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICAgICAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIiB3aWR0aD1cIjIwMFwiPlxuICAgICAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlVuaXQgUHJpY2VcIiB3aWR0aD1cIjIzMFwiPlxuICAgICAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICAgICAgICAgKiAgICBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqXG4gICAgICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W107XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgKiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2R1Y3RzO1xuICAgICAgICAgKiAgICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICAgICAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICAgICAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICAgICAqICB9LCB7XG4gICAgICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gICAgICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICAgICAgICAgKiAgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKlxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiBjYW4gYmUgbG9ja2VkIG9yIHVubG9ja2VkIGZyb20gdGhlIGNvbHVtbiBtZW51IG9yIGJ5IHJlb3JkZXJpbmcgdGhlIGNvbHVtbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvY2thYmxlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgY29sdW1uIG1lbnUgd2lsbCBiZSBzaG93biBmb3IgdGhlIGNvbHVtbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1uTWVudSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBjb2x1bW4tY2hvb3NlciBsaXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNsdWRlSW5DaG9vc2VyID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGVzID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5NZW51VGVtcGxhdGVzID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICBpZiAocGFyZW50ICYmICFpc0NvbHVtbkNvbnRhaW5lcihwYXJlbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbnMgY2FuIGJlIG5lc3RlZCBvbmx5IGluc2lkZSBDb2x1bW5Hcm91cENvbXBvbmVudCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIChpbiBwaXhlbHMpLlxuICAgICAqL1xuICAgIHNldCB3aWR0aCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpIHsgcmV0dXJuIHRoaXMuX3dpZHRoOyB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBsZXZlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIGlzU3BhbkNvbHVtbih0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5sZXZlbCArIDEgOiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlzTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5pc0xvY2tlZCA6IHRoaXMubG9ja2VkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNvbHNwYW4oKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcm93c3Bhbih0b3RhbENvbHVtbkxldmVscykge1xuICAgICAgICByZXR1cm4gdGhpcy5sZXZlbCA8IHRvdGFsQ29sdW1uTGV2ZWxzID8gKHRvdGFsQ29sdW1uTGV2ZWxzIC0gdGhpcy5sZXZlbCkgKyAxIDogMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBoZWFkZXJUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlcy5maXJzdDtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlID8gdGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZm9vdGVyVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvb3RlclRlbXBsYXRlID8gdGhpcy5mb290ZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2x1bW5NZW51VGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jb2x1bW5NZW51VGVtcGxhdGVzLmZpcnN0O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGUgPyB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGlzcGxheVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc1Zpc2libGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oaWRkZW4gJiYgdGhpcy5tYXRjaGVzTWVkaWE7XG4gICAgfVxufVxuQ29sdW1uQmFzZSQxLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHJlc2l6YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVvcmRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pblJlc2l6YWJsZVdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF1dG9TaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhpZGRlbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWVkaWE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvY2thYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5NZW51OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNsdWRlSW5DaG9vc2VyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdHlsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyU3R5bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvb3RlclN0eWxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjc3NDbGFzczogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2xhc3MnLF0gfV0sXG4gICAgaGVhZGVyQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvb3RlckNsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJUZW1wbGF0ZXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0hlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9LF0gfV0sXG4gICAgZm9vdGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgY29sdW1uTWVudVRlbXBsYXRlczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZmlsdGVyLWNlbGwgdGVtcGxhdGUgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2MtY3VzdG9taXppbmctZmlsdGVyLXJvd3MpKS5cbiAqL1xuY2xhc3MgRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZmlsdGVyLW1lbnUgdGVtcGxhdGVcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLWN1c3RvbWl6aW5nLWZpbHRlci1tZW51cykpLlxuICovXG5jbGFzcyBGaWx0ZXJNZW51VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5GaWx0ZXJNZW51VGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRGaWx0ZXJNZW51VGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJNZW51VGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzQ29sdW1uQ29tcG9uZW50KGNvbHVtbikge1xuICAgIHJldHVybiBpc1ByZXNlbnQoY29sdW1uLmZpZWxkKTtcbn1cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1ucyBvZiB0aGUgW0FuZ3VsYXIgRGF0YSBHcmlkXSh7JSBzbHVnIG92ZXJ2aWV3X2dyaWQgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCIgdGl0bGU9XCJQcm9kdWN0IElEXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgdGl0bGU9XCJVbml0IFByaWNlXCIgd2lkdGg9XCIyMzBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJEaXNjb250aW51ZWRcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiZGF0YUl0ZW0uRGlzY29udGludWVkXCIgZGlzYWJsZWQvPlxuICogICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W107XG4gKlxuICogICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2R1Y3RzO1xuICogICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAqICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICB9LCB7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICB9XG4gKiBdO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5Db21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlJDEge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgICAgICBzdXBlcihwYXJlbnQpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIHRoZSBjb2x1bW4gaGVhZGVycyB0byBiZSBjbGlja2VkIGFuZCB0aGUgYHNvcnRDaGFuZ2VgIGV2ZW50IGVtaXR0ZWQuXG4gICAgICAgICAqIFlvdSBoYXZlIHRvIGhhbmRsZSB0aGUgYHNvcnRDaGFuZ2VgIGV2ZW50IHlvdXJzZWxmIGFuZCBzb3J0IHRoZSBkYXRhLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBjb2x1bW4gY2FuIGJlIGRyYWdnZWQgdG8gdGhlIGdyb3VwIHBhbmVsLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICAgICAqIElmIHNldCB0byBgZmFsc2VgLCB5b3UgY2FuIGdyb3VwIHRoZSBjb2x1bW5zIGJ5IHRoZSBjb2x1bW4gZmllbGQgYnkgdXNpbmcgdGhlIEFQSSBvZiB0aGUgR3JpZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ3JvdXBhYmxlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGVkaXRvciB0eXBlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19yZWFjdGl2ZV9mb3Jtc19ncmlkICV9I3RvYy1zZXR1cCkpLlxuICAgICAgICAgKiBVc2VkIHdoZW4gdGhlIGNvbHVtbiBlbnRlcnMgdGhlIGVkaXQgbW9kZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRleHRgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGBodG1sLW5vLXJ1blxuICAgICAgICAgKiA8a2VuZG8tZ3JpZD5cbiAgICAgICAgICogICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgZWRpdG9yPVwibnVtZXJpY1wiPlxuICAgICAgICAgKiAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiA8L2tlbmRvLWdyaWQ+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lZGl0b3IgPSAndGV4dCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBmaWx0ZXIgdHlwZSB0aGF0IGlzIGRpc3BsYXllZCBpbnNpZGUgdGhlIGZpbHRlciByb3cuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0ZXh0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgaHRtbC1uby1ydW5cbiAgICAgICAgICogPGtlbmRvLWdyaWQ+XG4gICAgICAgICAqICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIGZpbHRlcj1cIm51bWVyaWNcIj5cbiAgICAgICAgICogICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgICAgICogPC9rZW5kby1ncmlkPlxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyID0gJ3RleHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyBpZiBhIGZpbHRlciBVSSB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBjb2x1bW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgaHRtbC1uby1ydW5cbiAgICAgICAgICogPGtlbmRvLWdyaWQ+XG4gICAgICAgICAqICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIFtmaWx0ZXJhYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAqICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICAgICAqIDwva2VuZG8tZ3JpZD5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlcmFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgZWRpdGFibGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgaHRtbC1uby1ydW5cbiAgICAgICAgICogPGtlbmRvLWdyaWQ+XG4gICAgICAgICAqICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIFtlZGl0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgKiAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiA8L2tlbmRvLWdyaWQ+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lZGl0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLnRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgZ3JvdXBIZWFkZXJUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZSA/IHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUgPyB0aGlzLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBncm91cEZvb3RlclRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEZvb3RlclRlbXBsYXRlID8gdGhpcy5ncm91cEZvb3RlclRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgZWRpdFRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0VGVtcGxhdGUgPyB0aGlzLmVkaXRUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGZpbHRlckNlbGxUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2VsbFRlbXBsYXRlID8gdGhpcy5maWx0ZXJDZWxsVGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBmaWx0ZXJNZW51VGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlck1lbnVUZW1wbGF0ZSA/IHRoaXMuZmlsdGVyTWVudVRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgZGlzcGxheVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5maWVsZCA6IHRoaXMudGl0bGU7XG4gICAgfVxufVxuQ29sdW1uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbHVtbkJhc2UkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IENvbHVtbkJhc2UkMSwgZGVjb3JhdG9yczogW3sgdHlwZTogU2tpcFNlbGYgfSwgeyB0eXBlOiBIb3N0IH0sIHsgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcbkNvbHVtbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWVsZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBlZGl0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZWRpdGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBncm91cEhlYWRlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGdyb3VwRm9vdGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0dyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBlZGl0VGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0VkaXRUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGZpbHRlckNlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZmlsdGVyTWVudVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtGaWx0ZXJNZW51VGVtcGxhdGVEaXJlY3RpdmUsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzU3BhbkNvbHVtbkNvbXBvbmVudChjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmlzU3BhbkNvbHVtbjtcbn1cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbHVtbiB3aGljaCBjYW4gYmUgc3Bhbm5lZCBvdmVyIG11bHRpcGxlIGRhdGEgY2VsbHMgd2hpbGUgdGhlIGluZGl2aWR1YWxcbiAqIGhlYWRlciBhbmQgZm9vdGVyIGNlbGxzIGFyZSByZXRhaW5lZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNwYW5uZWRfY29sdW1uc19ncmlkICV9KSkuXG4gKiBFbmFibGVzIHlvdSB0byBhY2hpZXZlIG1vcmUgZmxleGlibGUgbGF5b3V0IHdoaWxlIGtlZXBpbmcgdGhlIGJ1aWx0LWluIFVJIGVsZW1lbnQgZm9yXG4gKiBbc29ydGluZ10oeyUgc2x1ZyBzb3J0aW5nX2dyaWQgJX0pLCBbZmlsdGVyaW5nXSh7JSBzbHVnIGZpbHRlcmluZ19ncmlkICV9KSwgYW5kXG4gKiBbZ3JvdXBpbmddKHslIHNsdWcgZ3JvdXBpbmdiYXNpY3NfZ3JpZCAlfSkuIFdyYXAgdGhlIGNvbHVtbnMgdGhhdCB3aWxsIGJlXG4gKiBtZXJnZWQgaW5zaWRlIHRoZSBgPGtlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+YCB0YWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1ncmlkXG4gKiAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInRydWVcIlxuICogICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxuICogICAgICAgICAgICAgIFtrZW5kb0dyaWRCaW5kaW5nXT1cInByb2R1Y3RzXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLXNwYW4tY29sdW1uPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiVW5pdCBQcmljZVwiIGZpbHRlcj1cIm51bWVyaWNcIiB3aWR0aD1cIjE4MFwiIGZvcm1hdD1cInswOmN9XCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1zcGFuLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkRpc2NvbnRpbnVlZFwiIHdpZHRoPVwiMTIwXCIgZmlsdGVyPVwiYm9vbGVhblwiPlxuICogICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiZGF0YUl0ZW0uRGlzY29udGludWVkXCIgZGlzYWJsZWQvPlxuICogICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIHByb2R1Y3RzID0gW3tcbiAqICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgfSwge1xuICogICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgIH1cbiAqICAgXTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKiBCeSBkZWZhdWx0LCB0aGUgZGF0YSBjZWxsIGRpc3BsYXlzIHRoZSBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkcy4gVG8gZnVydGhlciBjdXN0b21pemVcbiAqIHRoZSBzcGFuLWNvbHVtbiBmdW5jdGlvbmFsaXR5LCB1c2UgYSBbY2VsbCB0ZW1wbGF0ZV0oeyUgc2x1ZyBhcGlfZ3JpZF9jZWxsdGVtcGxhdGVkaXJlY3RpdmUgJX0pLlxuICpcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZC1zcGFuLWNvbHVtbj5cbiAqICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJmaWVsZDFcIiB0aXRsZT1cIkZpZWxkIDFcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cImZpZWxkMlwiIHRpdGxlPVwiRmllbGQgMlwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgICA8aDU+e3sgZGF0YUl0ZW0uZmllbGQxIH19PC9oNT5cbiAqICAgICAgICA8cD57eyBkYXRhSXRlbS5maWVsZDIgfX08L3A+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tZ3JpZC1zcGFuLWNvbHVtbj5cbiAqIGBgYFxuICovXG5jbGFzcyBTcGFuQ29sdW1uQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uQmFzZSQxIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgLypcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1NwYW5Db2x1bW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmVkaXRUZW1wbGF0ZSA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2hpbGRDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNsdWRlSW5DaG9vc2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmlzU3BhbkNvbHVtbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGFuQ29sdW1uIGNhbm5vdCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgU3BhbkNvbHVtbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgZWRpdCB0ZW1wbGF0ZSBvZiB0aGUgY29sdW1uIHdpbGwgYmUgcmVuZGVyZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiA+IFRvIGVuYWJsZSB0aGUgZWRpdGluZyBmdW5jdGlvbmFsaXR5IGZvciBhIHNwYW5uZWQgY29sdW1uLCBzZXQgYW4gZWRpdCB0ZW1wbGF0ZSBmb3IgaXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWwtbm8tcnVuXG4gICAgICogPGtlbmRvLWdyaWQ+XG4gICAgICogICAgPGtlbmRvLWdyaWQtc3Bhbi1jb2x1bW4gW2VkaXRhYmxlXT1cImZhbHNlXCI+XG4gICAgICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj5cbiAgICAgKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICAgICAqICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRFZGl0VGVtcGxhdGU+XG4gICAgICogICAgICAgICAuLi4uLlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICA8L2tlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+XG4gICAgICogPC9rZW5kby1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNldCBlZGl0YWJsZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9lZGl0YWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZWRpdGFibGUoKSB7XG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQodGhpcy5lZGl0VGVtcGxhdGVSZWYpICYmIHRoaXMuX2VkaXRhYmxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYWRkZWQgZm9yIGJhY2t3YXJkcyBjb21waXRhYmlsaXR5XG4gICAgICovXG4gICAgc2V0IHdpZHRoKF92YWx1ZSkge1xuICAgIH1cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkQ29sdW1ucy5yZWR1Y2UoKHRvdGFsLCBjb2x1bW4pID0+IHRvdGFsICsgY29sdW1uLndpZHRoLCAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBsZWFmSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkQ29sdW1ucy5maXJzdC5sZWFmSW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZS5maXJzdDtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlID8gdGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZWRpdFRlbXBsYXRlUmVmKCkge1xuICAgICAgICBjb25zdCBlZGl0VGVtcGxhdGUgPSB0aGlzLmVkaXRUZW1wbGF0ZS5maXJzdDtcbiAgICAgICAgcmV0dXJuIGVkaXRUZW1wbGF0ZSA/IGVkaXRUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2xzcGFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbHVtbnMuZmlsdGVyKGMgPT4gYy5pc1Zpc2libGUpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgbG9ja2VkIChmcm96ZW4pIHN0YXRlIG9mIHRoZSBjb2x1bW5zLiBMb2NrZWQgY29sdW1ucyBhcmUgdmlzaWJsZVxuICAgICAqIGF0IGFsbCB0aW1lcyBkdXJpbmcgdGhlIGhvcml6b250YWwgc2Nyb2xsaW5nIG9mIHRoZSBHcmlkLlxuICAgICAqXG4gICAgICogRm9yIHRoZSBvcHRpb24gdG8gd29yayBwcm9wZXJseSwgbWFrZSBzdXJlIHRoYXQ6XG4gICAgICogLSBTY3JvbGxpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiAtIFRoZSBgaGVpZ2h0YCBvcHRpb24gb2YgdGhlIEdyaWQgaXMgc2V0LlxuICAgICAqIC0gVGhlIHdpZHRocyBvZiBhbGwgR3JpZCBjb2x1bW5zIGFyZSBleHBsaWNpdGx5IHNldCBpbiBwaXhlbHMuIEluIHRoaXMgd2F5LFxuICAgICAqIHRoZSBHcmlkIGFkanVzdHMgdGhlIGxheW91dCBvZiB0aGUgbG9ja2VkIGFuZCB1bmxvY2tlZCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgIHRlbXBsYXRlOiBgXG4gICAgICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiIHN0eWxlPVwiaGVpZ2h0OiAyMDBweFwiPlxuICAgICAqICAgICAgICAgIDxrZW5kby1ncmlkLXNwYW4tY29sdW1uIFtsb2NrZWRdPVwidHJ1ZVwiPlxuICAgICAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTIwXCI+XG4gICAgICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCIgd2lkdGg9XCIyMDBcIj5cbiAgICAgKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1zcGFuLWNvbHVtbj5cbiAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlVuaXQgUHJpY2VcIiB3aWR0aD1cIjIzMFwiPlxuICAgICAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgKiAgICBgXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXTtcbiAgICAgKlxuICAgICAqICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAqICAgICAgICB0aGlzLmdyaWREYXRhID0gcHJvZHVjdHM7XG4gICAgICogICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICogIH0sIHtcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgKiAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXQgbG9ja2VkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9ja2VkIHx8IHRoaXMuY2hpbGRDb2x1bW5zLnNvbWUoYyA9PiBjLmxvY2tlZCk7XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbkFycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbHVtbnMudG9BcnJheSgpO1xuICAgIH1cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH1cbn1cblNwYW5Db2x1bW5Db21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29sdW1uQmFzZSQxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3BhbkNvbHVtbkNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLXNwYW4tY29sdW1uJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3BhbkNvbHVtbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IENvbHVtbkJhc2UkMSwgZGVjb3JhdG9yczogW3sgdHlwZTogU2tpcFNlbGYgfSwgeyB0eXBlOiBIb3N0IH0sIHsgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblNwYW5Db2x1bW5Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSxdIH1dLFxuICAgIGVkaXRUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbRWRpdFRlbXBsYXRlRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9LF0gfV0sXG4gICAgY2hpbGRDb2x1bW5zOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDb2x1bW5Db21wb25lbnQsXSB9XSxcbiAgICBlZGl0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9ja2VkOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGV4cGFuZENvbHVtbnMgPSAoY29sdW1ucykgPT4gKGNvbHVtbnMucmVkdWNlKChhY2MsIGNvbHVtbikgPT4gYWNjLmNvbmNhdChpc1NwYW5Db2x1bW5Db21wb25lbnQoY29sdW1uKSA/IGNvbHVtbi5jaGlsZHJlbkFycmF5IDogW2NvbHVtbl0pLCBbXSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBleHBhbmRDb2x1bW5zV2l0aFNwYW4gPSAoY29sdW1ucykgPT4gKGNvbHVtbnMucmVkdWNlKChhY2MsIGNvbHVtbikgPT4gYWNjLmNvbmNhdChpc1NwYW5Db2x1bW5Db21wb25lbnQoY29sdW1uKSA/XG4gICAgW2NvbHVtbl0uY29uY2F0KGNvbHVtbi5jaGlsZHJlbkFycmF5KSA6XG4gICAgW2NvbHVtbl0pLCBbXSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb2x1bW5zVG9SZW5kZXIgPSAoY29sdW1ucykgPT4gKGV4cGFuZENvbHVtbnMoY29sdW1ucykuZmlsdGVyKHggPT4geC5pc1Zpc2libGUpKTtcbmNvbnN0IHN1bVByb3AgPSAocHJvcCkgPT4gKGFycmF5KSA9PiAoYXJyYXkgfHwgW10pLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIChjdXJyW3Byb3BdIHx8IDApLCAwKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzdW1Db2x1bW5XaWR0aHMgPSBzdW1Qcm9wKCd3aWR0aCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNvbHVtbnNTcGFuID0gc3VtUHJvcCgnY29sc3BhbicpO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgdmFsaWRGaWVsZCA9IG5ldyBSZWdFeHAoYF5bJEEtWlxcX2Etel1bJEEtWlxcX2EtejAtOVxcXFwuXSokYCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNWYWxpZEZpZWxkTmFtZSA9IChmaWVsZE5hbWUpID0+ICFpc051bGxPckVtcHR5U3RyaW5nKGZpZWxkTmFtZSkgJiYgdmFsaWRGaWVsZC50ZXN0KGZpZWxkTmFtZSkgJiZcbiAgICBmaWVsZE5hbWVbMF0gIT09IFwiLlwiICYmIGZpZWxkTmFtZVtmaWVsZE5hbWUubGVuZ3RoIC0gMV0gIT09IFwiLlwiO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNoaWxkcmVuID0gY29sdW1uID0+IGNvbHVtbi5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gY2hpbGQgIT09IGNvbHVtbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbGVhZkNvbHVtbnMgPSBjb2x1bW5zID0+IHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uaXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdChsZWFmQ29sdW1ucyhjaGlsZHJlbihjb2x1bW4pKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sdW1uLmlzU3BhbkNvbHVtbikge1xuICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdChjb2x1bW4uY2hpbGRyZW5BcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhY2MucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmZpbHRlcih4ID0+IHguaXNWaXNpYmxlKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzb21lTGVhZkNvbHVtbiA9IChjYWxsYmFjaywgLi4uY29sdW1ucykgPT4gbGVhZkNvbHVtbnMoY29sdW1ucykuc29tZShjYWxsYmFjayk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcmVzaXphYmxlQ29sdW1ucyA9IGNvbHVtbnMgPT4gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGlzVHJ1dGh5KGNvbHVtbi5yZXNpemFibGUpICYmIGNvbHVtbi5pc1Zpc2libGUpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNvcnRDb2x1bW5zID0gKGNvbHVtbnMpID0+IG9yZGVyQnkoY29sdW1ucywgW3sgZmllbGQ6ICdvcmRlckluZGV4JywgZGlyOiAnYXNjJyB9XSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNJblNwYW5Db2x1bW4gPSAoY29sdW1uKSA9PiBpc1RydXRoeShjb2x1bW4ucGFyZW50KSAmJiBpc1NwYW5Db2x1bW5Db21wb25lbnQoY29sdW1uLnBhcmVudCk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBpc0NvbHVtbkdyb3VwQ29tcG9uZW50KGNvbHVtbikge1xuICAgIHJldHVybiBjb2x1bW4uaXNDb2x1bW5Hcm91cDtcbn1cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGdyb3VwIGhlYWRlciBvZiB0aGUgR3JpZFxuICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlc10oeyUgc2x1ZyBtdWx0aWNvbHVtbmhlYWRlcnNfY29sdW1uc19ncmlkICV9KSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCI+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4tZ3JvdXAgdGl0bGU9XCJQcm9kdWN0IEluZm9cIj5cbiAqICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEhlYWRlclRlbXBsYXRlIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICogICAgICAgICAgICAgICBDb2x1bW4gaW5kZXg6IHt7Y29sdW1uSW5kZXh9fSAvIGNvbHVtbiB0aXRsZToge3tjb2x1bW4udGl0bGV9fVxuICogICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uLWdyb3VwPlxuICogICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgdGl0bGU9XCJVbml0IFByaWNlXCIgd2lkdGg9XCIyMzBcIj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJEaXNjb250aW51ZWRcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiZGF0YUl0ZW0uRGlzY29udGludWVkXCIgZGlzYWJsZWQvPlxuICogICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W107XG4gKlxuICogICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2R1Y3RzO1xuICogICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAqICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICB9LCB7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICB9XG4gKiBdO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5Hcm91cENvbXBvbmVudCBleHRlbmRzIENvbHVtbkJhc2UkMSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNsdWRlSW5DaG9vc2VyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzQ29sdW1uR3JvdXAgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5taW5SZXNpemFibGVXaWR0aCA9IDEwO1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1uR3JvdXBDb21wb25lbnQgY2Fubm90IGJlIG5lc3RlZCBpbnNpZGUgU3BhbkNvbHVtbkNvbXBvbmVudCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByb3dzcGFuKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2xzcGFuKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hpbGRyZW4gfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW5zU3Bhbih0aGlzLmNoaWxkcmVuXG4gICAgICAgICAgICAuZmlsdGVyKGNoaWxkID0+IGNoaWxkICE9PSB0aGlzICYmIGNoaWxkLmlzVmlzaWJsZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGxlYWZJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4gPyAodGhpcy5maXJzdENoaWxkIHx8IHt9KS5sZWFmSW5kZXggOiAtMTtcbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlcihjID0+IGMgIT09IHRoaXMpO1xuICAgIH1cbiAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIGdldCBmaXJzdENoaWxkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGNvbHVtbiA9PiBjb2x1bW4gIT09IHRoaXMpO1xuICAgIH1cbn1cbkNvbHVtbkdyb3VwQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbHVtbkJhc2UkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkdyb3VwQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1uLWdyb3VwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uR3JvdXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlJDEsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Db2x1bW5Hcm91cENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjaGlsZHJlbjogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uQmFzZSQxLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGV0YWlsIHRlbXBsYXRlIG9mIHRoZSBHcmlkIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXNdKHslIHNsdWcgZGV0YWlscm93dGVtcGxhdGVfZ3JpZCAlfSkpLlxuICogVG8gZGVmaW5lIHRoZSBkZXRhaWwgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9HcmlkRGV0YWlsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgYSBgPGtlbmRvLWdyaWQ+YCB0YWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkXG4gKiAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICogICAgICAgICBzZWxlY3RhYmxlPVwidHJ1ZVwiXG4gKiAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxNjBweFwiXG4gKiAgICAgICAgID5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRGV0YWlsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhSXRlbS5DYXRlZ29yeVwiPlxuICogICAgICAgICAgICAgPGhlYWRlcj57e2RhdGFJdGVtLkNhdGVnb3J5Py5DYXRlZ29yeU5hbWV9fTwvaGVhZGVyPlxuICogICAgICAgICAgICAgPHNwYW4+e3tkYXRhSXRlbS5DYXRlZ29yeT8uRGVzY3JpcHRpb259fTwvc3Bhbj5cbiAqICAgICAgICAgICA8L2Rpdj5cbiAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBkYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2UsXG4gKiAgICAgICAgIFwiQ2F0ZWdvcnlcIjoge1xuICogICAgICAgICAgICAgXCJDYXRlZ29yeUlEXCI6IDEsXG4gKiAgICAgICAgICAgICBcIkNhdGVnb3J5TmFtZVwiOiBcIkJldmVyYWdlc1wiLFxuICogICAgICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiBcIlNvZnQgZHJpbmtzLCBjb2ZmZWVzLCB0ZWFzLCBiZWVycywgYW5kIGFsZXNcIlxuICogICAgICAgICB9XG4gKiAgICAgICB9LCB7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZSxcbiAqICAgICAgICAgXCJDYXRlZ29yeVwiOiB7XG4gKiAgICAgICAgICAgICBcIkNhdGVnb3J5SURcIjogMSxcbiAqICAgICAgICAgICAgIFwiQ2F0ZWdvcnlOYW1lXCI6IFwiQmV2ZXJhZ2VzXCIsXG4gKiAgICAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IFwiU29mdCBkcmlua3MsIGNvZmZlZXMsIHRlYXMsIGJlZXJzLCBhbmQgYWxlc1wiXG4gKiAgICAgICAgIH1cbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMyxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkFuaXNlZWQgU3lydXBcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTAuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2UsXG4gKiAgICAgICAgIFwiQ2F0ZWdvcnlcIjoge1xuICogICAgICAgICAgICAgXCJDYXRlZ29yeUlEXCI6IDIsXG4gKiAgICAgICAgICAgICBcIkNhdGVnb3J5TmFtZVwiOiBcIkNvbmRpbWVudHNcIixcbiAqICAgICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjogXCJTd2VldCBhbmQgc2F2b3J5IHNhdWNlcywgcmVsaXNoZXMsIHNwcmVhZHMsIGFuZCBzZWFzb25pbmdzXCJcbiAqICAgICAgICAgfVxuICogICAgIH1dO1xuICpcbiAqIH1cbiAqXG4gKiBgYGBcbiAqXG4gKi9cbmNsYXNzIERldGFpbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbiA9ICgpID0+IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGZ1bmN0aW9uIHRoYXQgaW5kaWNhdGVzIGlmIGEgZ2l2ZW4gZGV0YWlsIHJvdyBhbmQgdGhlIGFzc29jaWF0ZWQgKipFeHBhbmQqKiBvciAqKkNvbGxhcHNlKiogYnV0dG9uIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIHNldCBzaG93SWYoZm4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzaG93SWYgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbiA9IGZuO1xuICAgIH1cbiAgICBnZXQgc2hvd0lmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZGl0aW9uO1xuICAgIH1cbn1cbkRldGFpbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRGV0YWlsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuRGV0YWlsVGVtcGxhdGVEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2hvd0lmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogW1wia2VuZG9HcmlkRGV0YWlsVGVtcGxhdGVTaG93SWZcIixdIH1dXG59O1xuXG5jb25zdCBjYW5DcmVhdGVFbGVtZW50ID0gKCkgPT4gaXNEb2N1bWVudEF2YWlsYWJsZSgpICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ7XG5sZXQgY2FjaGVkU2Nyb2xsYmFyV2lkdGggPSBudWxsO1xubGV0IGNhY2hlZFBpeGVsUmF0aW87XG5sZXQgY2FjaGVkUnRsU2Nyb2xsTGVmdCA9IG51bGw7XG5mdW5jdGlvbiBzY3JvbGxiYXJXaWR0aCgpIHtcbiAgICBpZiAoY2FjaGVkU2Nyb2xsYmFyV2lkdGggPT09IG51bGwgJiYgY2FuQ3JlYXRlRWxlbWVudCgpKSB7XG4gICAgICAgIGNhY2hlZFBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IFwib3ZlcmZsb3c6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVuO3pvb206MTtjbGVhcjpib3RoO2Rpc3BsYXk6YmxvY2tcIjtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IFwiJm5ic3A7XCI7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgY2FjaGVkU2Nyb2xsYmFyV2lkdGggPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuc2Nyb2xsV2lkdGg7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZFNjcm9sbGJhcldpZHRoO1xufVxuZnVuY3Rpb24gcnRsU2Nyb2xsTGVmdCgpIHtcbiAgICBpZiAoY2FjaGVkUnRsU2Nyb2xsTGVmdCA9PT0gbnVsbCAmJiBjYW5DcmVhdGVFbGVtZW50KCkpIHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSBcIm92ZXJmbG93OnNjcm9sbDt6b29tOjE7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMHB4O3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMDAwcHg7ZGlyZWN0aW9uOnJ0bDtcIjtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IFwiPGRpdiBzdHlsZT0nd2lkdGg6MjAwcHg7aGVpZ2h0OjFweDsnPC9kaXY+XCI7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IGRpdi5zY3JvbGxMZWZ0O1xuICAgICAgICBkaXYuc2Nyb2xsTGVmdCA9IC0xO1xuICAgICAgICBjYWNoZWRSdGxTY3JvbGxMZWZ0ID0gZGl2LnNjcm9sbExlZnQgPCAwID8gZGl2LnNjcm9sbExlZnQgOiBpbml0aWFsO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRSdGxTY3JvbGxMZWZ0O1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKiBtb3ZlIHRvIGtlbmRvLWNvbW1vblxuICovXG5jbGFzcyBCcm93c2VyU3VwcG9ydFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHpvbmUsIGNoYW5nZURldGVjdG9yKSB7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoYXVkaXRUaW1lKDEwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlZFBpeGVsUmF0aW8gIT09IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZFNjcm9sbGJhcldpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNjcm9sbGJhcldpZHRoKCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGgoKTtcbiAgICB9XG4gICAgZ2V0IHJ0bFNjcm9sbExlZnQoKSB7XG4gICAgICAgIHJldHVybiBydGxTY3JvbGxMZWZ0KCk7XG4gICAgfVxufVxuQnJvd3NlclN1cHBvcnRTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Ccm93c2VyU3VwcG9ydFNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOnVzZS1saWZlLWN5Y2xlLWludGVyZmFjZSAqL1xuY29uc3QgaXNHcm91cEl0ZW0gPSAoc291cmNlKSA9PiB7XG4gICAgcmV0dXJuIHNvdXJjZS5pdGVtcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHNvdXJjZS5maWVsZCAhPT0gdW5kZWZpbmVkO1xufTtcbmNvbnN0IGlzVmlydHVhbEdyb3VwSXRlbSA9IChzb3VyY2UpID0+IHtcbiAgICByZXR1cm4gc291cmNlLm9mZnNldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHNvdXJjZS5za2lwSGVhZGVyICE9PSB1bmRlZmluZWQ7XG59O1xuY29uc3QgZmxhdHRlbkdyb3VwcyA9IChncm91cHMpID0+IChncm91cHMucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICBpZiAoaXNHcm91cEl0ZW0oY3VycikpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoZmxhdHRlbkdyb3VwcyhjdXJyLml0ZW1zKSk7XG4gICAgfVxuICAgIHJldHVybiBhY2MuY29uY2F0KFtjdXJyXSk7XG59LCBbXSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpdGVtQXQgPSAoZGF0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBmaXJzdCA9IGRhdGFbMF07XG4gICAgaWYgKGlzUHJlc2VudChmaXJzdCkgJiYgaXNHcm91cEl0ZW0oZmlyc3QpKSB7XG4gICAgICAgIHJldHVybiBmbGF0dGVuR3JvdXBzKGRhdGEpW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbaW5kZXhdO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZXRJdGVyYXRvciQxID0gKGRhdGEsIHsgZm9vdGVycywgbGV2ZWwsIGRhdGFJbmRleCwgcGFyZW50R3JvdXBJbmRleCwgZ3JvdXBJbmRleCB9KSA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSBkYXRhWzBdO1xuICAgIGlmIChpc1ByZXNlbnQoZmlyc3QpICYmIGlzR3JvdXBJdGVtKGZpcnN0KSkge1xuICAgICAgICBpZiAoaXNWaXJ0dWFsR3JvdXBJdGVtKGZpcnN0KSkge1xuICAgICAgICAgICAgZ3JvdXBJbmRleCA9IGlzUHJlc2VudChmaXJzdC5vZmZzZXQpID8gZmlyc3Qub2Zmc2V0IDogZ3JvdXBJbmRleDtcbiAgICAgICAgfVxuICAgICAgICAvL3RzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgICAgICAgcmV0dXJuIG5ldyBHcm91cEl0ZXJhdG9yKGRhdGEsIGZvb3RlcnMsIGxldmVsLCBkYXRhSW5kZXgsIHBhcmVudEdyb3VwSW5kZXgsIGdyb3VwSW5kZXgpO1xuICAgIH1cbiAgICAvL3RzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgICByZXR1cm4gbmV3IEl0ZW1JdGVyYXRvcihkYXRhLCBkYXRhSW5kZXgsIHBhcmVudEdyb3VwSW5kZXgpO1xufTtcbmNsYXNzIEFycmF5SXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyciwgaWR4ID0gMCkge1xuICAgICAgICB0aGlzLmFyciA9IGFycjtcbiAgICAgICAgdGhpcy5pZHggPSBpZHg7XG4gICAgICAgIHRoaXMuYXJyID0gYXJyIHx8IFtdO1xuICAgIH1cbiAgICBbaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWR4IDwgdGhpcy5hcnIubGVuZ3RoID8ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5hcnJbdGhpcy5pZHgrK11cbiAgICAgICAgfSA6IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IoYXJyLCBkYXRhSW5kZXggPSAwLCByZXN1bHRNYXAgPSAoeCkgPT4geCkge1xuICAgICAgICB0aGlzLmRhdGFJbmRleCA9IGRhdGFJbmRleDtcbiAgICAgICAgdGhpcy5yZXN1bHRNYXAgPSByZXN1bHRNYXA7XG4gICAgICAgIGNvbnN0IGl0ZXIgPSBhcnJbaXRlcmF0b3JdO1xuICAgICAgICB0aGlzLl9pbm5lckl0ZXJhdG9yID0gaXRlciA/IGFycltpdGVyYXRvcl0oKSA6IG5ldyBBcnJheUl0ZXJhdG9yKGFycik7XG4gICAgfVxuICAgIFtpdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBuZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRNYXAodGhpcy5faW5uZXJJdGVyYXRvci5uZXh0KCksIHRoaXMuZGF0YUluZGV4KyspO1xuICAgIH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBJdGVtSXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IoYXJyLCBkYXRhSW5kZXgsIGdyb3VwSW5kZXgpIHtcbiAgICAgICAgc3VwZXIoYXJyLCBkYXRhSW5kZXgsICh4LCBpZHgpID0+ICh7XG4gICAgICAgICAgICBkb25lOiB4LmRvbmUsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIGRhdGE6IHgudmFsdWUsXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleDogaWR4LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRhJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgbmV4dCByZWNvcmQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFJbmRleDtcbiAgICB9XG59XG5jb25zdCBwcmVmaXggPSAocywgbikgPT4ge1xuICAgIGNvbnN0IHAgPSBzID8gcyArIFwiX1wiIDogcztcbiAgICByZXR1cm4gYCR7cH0ke259YDtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3IoYXJyLCBvdXRwdXRGb290ZXJzID0gZmFsc2UsIGxldmVsID0gMCwgZGF0YUluZGV4ID0gMCwgcGFyZW50SW5kZXggPSBcIlwiLCBncm91cEluZGV4ID0gMCkge1xuICAgICAgICB0aGlzLmFyciA9IGFycjtcbiAgICAgICAgdGhpcy5vdXRwdXRGb290ZXJzID0gb3V0cHV0Rm9vdGVycztcbiAgICAgICAgdGhpcy5sZXZlbCA9IGxldmVsO1xuICAgICAgICB0aGlzLmRhdGFJbmRleCA9IGRhdGFJbmRleDtcbiAgICAgICAgdGhpcy5wYXJlbnRJbmRleCA9IHBhcmVudEluZGV4O1xuICAgICAgICB0aGlzLmdyb3VwSW5kZXggPSBncm91cEluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRHcm91cEluZGV4ID0gXCJcIjtcbiAgICAgICAgdGhpcy5hcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHRoaXMuX2l0ZXJhdG9yID0gbmV3IEl0ZXJhdG9yKHRoaXMuYXJyLCB0aGlzLmRhdGFJbmRleCk7XG4gICAgfVxuICAgIFtpdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBuZXh0R3JvdXBJdGVtKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLl9pdGVyYXRvci5uZXh0KCkudmFsdWU7XG4gICAgICAgIHRoaXMuX2lubmVySXRlcmF0b3IgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cEluZGV4ID0gcHJlZml4KHRoaXMucGFyZW50SW5kZXgsIHRoaXMuZ3JvdXBJbmRleCsrKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5jdXJyZW50R3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdncm91cCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb290ZXJJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBncm91cEluZGV4OiB0aGlzLmN1cnJlbnRHcm91cEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogdGhpcy5sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Zvb3RlcidcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbm5lckl0ZXJhdG9yKGdyb3VwKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5uZXJJdGVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5faW5uZXJJdGVyYXRvciA9IGdldEl0ZXJhdG9yJDEoZ3JvdXAuaXRlbXMsIHtcbiAgICAgICAgICAgICAgICBkYXRhSW5kZXg6IHRoaXMuZGF0YUluZGV4LFxuICAgICAgICAgICAgICAgIGZvb3RlcnM6IHRoaXMub3V0cHV0Rm9vdGVycyxcbiAgICAgICAgICAgICAgICBsZXZlbDogdGhpcy5sZXZlbCArIDEsXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBJbmRleDogdGhpcy5jdXJyZW50R3JvdXBJbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVySXRlcmF0b3I7XG4gICAgfVxuICAgIG5leHREYXRhSXRlbShncm91cCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciQkMSA9IHRoaXMuaW5uZXJJdGVyYXRvcihncm91cCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudChyZXN1bHQudmFsdWUpICYmICFyZXN1bHQuZG9uZSAmJiByZXN1bHQudmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUluZGV4ID0gcmVzdWx0LnZhbHVlLmluZGV4ICsgMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXJlc3VsdC5kb25lID8gcmVzdWx0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0R3JvdXBJdGVtKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubmV4dERhdGFJdGVtKHRoaXMuY3VycmVudCk7XG4gICAgICAgIHJldHVybiBpdGVtID8gaXRlbSA6ICh0aGlzLm91dHB1dEZvb3RlcnMgPyB0aGlzLmZvb3Rlckl0ZW0oKSA6IHRoaXMubmV4dEdyb3VwSXRlbSgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBsYXN0IGl0ZXJhdGVkIGRhdGEgcmVjb3JkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhSW5kZXggKyAxO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGFSZXN1bHRJdGVyYXRvciB7XG4gICAgY29uc3RydWN0b3Ioc291cmNlLCBza2lwID0gMCwgZ3JvdXBGb290ZXJzID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuc2tpcCA9IHNraXA7XG4gICAgICAgIHRoaXMuZ3JvdXBGb290ZXJzID0gZ3JvdXBGb290ZXJzO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMuc291cmNlID8gdGhpcy5zb3VyY2UgOiBbXTtcbiAgICAgICAgdGhpcy5pc09iamVjdCA9IHRoaXMuaXNHcmlkRGF0YVJlc3VsdCh0aGlzLnNvdXJjZSk7XG4gICAgfVxuICAgIGlzR3JpZERhdGFSZXN1bHQoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UudG90YWwgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UuZGF0YSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgdG90YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT2JqZWN0ID8gdGhpcy5zb3VyY2UudG90YWwgOiB0aGlzLnNvdXJjZS5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09iamVjdCA/IHRoaXMuc291cmNlLmRhdGEgOiB0aGlzLnNvdXJjZTtcbiAgICB9XG4gICAgbWFwKGZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFwKGZuKTtcbiAgICB9XG4gICAgZmlsdGVyKGZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZuKTtcbiAgICB9XG4gICAgcmVkdWNlKGZuLCBpbml0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucmVkdWNlKGZuLCBpbml0KTtcbiAgICB9XG4gICAgZm9yRWFjaChmbikge1xuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChmbik7XG4gICAgfVxuICAgIHNvbWUoZm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zb21lKGZuKTtcbiAgICB9XG4gICAgW2l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZXJhdG9yJDEodGhpcy5kYXRhLCB7XG4gICAgICAgICAgICBkYXRhSW5kZXg6IHRoaXMuc2tpcCxcbiAgICAgICAgICAgIGZvb3RlcnM6IHRoaXMuZ3JvdXBGb290ZXJzLFxuICAgICAgICAgICAgZ3JvdXBJbmRleDogdGhpcy5za2lwXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHsgcmV0dXJuIHRoaXMuZGF0YS50b1N0cmluZygpOyB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0YUNvbGxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKGFjY2Vzc29yKSB7XG4gICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICB9XG4gICAgZ2V0IHRvdGFsKCkgeyByZXR1cm4gdGhpcy5hY2Nlc3NvcigpLnRvdGFsOyB9XG4gICAgZ2V0IGxlbmd0aCgpIHsgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKS5kYXRhLmxlbmd0aDsgfVxuICAgIGdldCBmaXJzdCgpIHsgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKS5kYXRhWzBdOyB9XG4gICAgZ2V0IGxhc3QoKSB7IHJldHVybiB0aGlzLmFjY2Vzc29yKCkuZGF0YVt0aGlzLmxlbmd0aCAtIDFdOyB9XG4gICAgYXQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1BdCh0aGlzLmFjY2Vzc29yKCkuZGF0YSwgaW5kZXgpO1xuICAgIH1cbiAgICBtYXAoZm4pIHsgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKS5tYXAoZm4pOyB9XG4gICAgZmlsdGVyKGZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yKCkuZmlsdGVyKGZuKTtcbiAgICB9XG4gICAgcmVkdWNlKGZuLCBpbml0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yKCkucmVkdWNlKGZuLCBpbml0KTtcbiAgICB9XG4gICAgZm9yRWFjaChmbikge1xuICAgICAgICB0aGlzLmFjY2Vzc29yKCkuZm9yRWFjaChmbik7XG4gICAgfVxuICAgIHNvbWUoZm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKS5zb21lKGZuKTtcbiAgICB9XG4gICAgW2l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKVtpdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7IHJldHVybiB0aGlzLmFjY2Vzc29yKCkudG9TdHJpbmcoKTsgfVxufVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1pbnB1dC1yZW5hbWUgKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTZWxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGNkKSB7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMuY2QgPSBjZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbGxlY3Rpb24gdGhhdCB3aWxsIHN0b3JlIHRoZSBzZWxlY3RlZCBpdGVtIGtleXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgYHNlbGVjdGVkS2V5c2AgY29sbGVjdGlvbiBoYXMgYmVlbiB1cGRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RlZEtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLmdyaWQucm93U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0ZWQgPSAocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRLZXlzLmluZGV4T2YodGhpcy5nZXRJdGVtS2V5KHJvdykpID49IDA7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMuZ3JpZC5jZWxsU2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2VsbFNlbGVjdGVkID0gKHJvdywgY29sdW1uLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbmRlciA9IHRoaXMuZ2V0U2VsZWN0aW9uSXRlbShyb3csIGNvbHVtbiwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkS2V5cy5zb21lKGl0ZW0gPT4gaXRlbS5jb2x1bW5LZXkgPT09IGNvbnRlbmRlci5jb2x1bW5LZXkgJiYgaXRlbS5pdGVtS2V5ID09PSBjb250ZW5kZXIuaXRlbUtleSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGNvbnRlbmRlclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkXG4gICAgICAgICAgICAuc2VsZWN0aW9uQ2hhbmdlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gW107XG4gICAgfVxuICAgIGdldEl0ZW1LZXkocm93KSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbktleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGVjdGlvbktleSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3cuZGF0YUl0ZW1bdGhpcy5zZWxlY3Rpb25LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGVjdGlvbktleSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uS2V5KHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdy5pbmRleDtcbiAgICB9XG4gICAgZ2V0U2VsZWN0aW9uSXRlbShyb3csIGNvbCwgY29sSW5kZXgpIHtcbiAgICAgICAgY29uc3QgaXRlbUlkZW50aWZpZXJzID0ge307XG4gICAgICAgIGl0ZW1JZGVudGlmaWVycy5pdGVtS2V5ID0gdGhpcy5nZXRJdGVtS2V5KHJvdyk7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGNvbCkgJiYgIWlzUHJlc2VudChjb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtSWRlbnRpZmllcnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uS2V5KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uS2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgaXRlbUlkZW50aWZpZXJzLmNvbHVtbktleSA9IHJvdy5kYXRhSXRlbVt0aGlzLmNvbHVtbktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uS2V5ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtSWRlbnRpZmllcnMuY29sdW1uS2V5ID0gdGhpcy5jb2x1bW5LZXkoY29sLCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IGl0ZW1JZGVudGlmaWVycy5pdGVtS2V5LFxuICAgICAgICAgICAgY29sdW1uS2V5OiBpdGVtSWRlbnRpZmllcnMuY29sdW1uS2V5ID8gaXRlbUlkZW50aWZpZXJzLmNvbHVtbktleSA6IGNvbEluZGV4XG4gICAgICAgIH07XG4gICAgfVxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbikge1xuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGVkUm93cykge1xuICAgICAgICAgICAgc2VsZWN0aW9uLmRlc2VsZWN0ZWRSb3dzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtS2V5ID0gdGhpcy5nZXRJdGVtS2V5KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmluZGV4T2YoaXRlbUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3RhYmxlU2V0dGluZ3MubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiB0aGlzLnNlbGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkUm93cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZ2V0SXRlbUtleShpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEtleXMuaW5kZXhPZihpdGVtS2V5KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMucHVzaChpdGVtS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5kZXNlbGVjdGVkQ2VsbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZ2V0Q2VsbFNlbGVjdGlvbkl0ZW1JbmRleChpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGFibGVTZXR0aW5ncy5tb2RlID09PSBcInNpbmdsZVwiICYmIHRoaXMuc2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0ZWRDZWxscy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5nZXRDZWxsU2VsZWN0aW9uSXRlbUluZGV4KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEtleXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkS2V5cyk7XG4gICAgfVxuICAgIGdldENlbGxTZWxlY3Rpb25JdGVtSW5kZXgoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleXMuZmluZEluZGV4KHNlbGVjdGVkSXRlbSA9PiBzZWxlY3RlZEl0ZW0uaXRlbUtleSA9PT0gaXRlbS5pdGVtS2V5ICYmIHNlbGVjdGVkSXRlbS5jb2x1bW5LZXkgPT09IGl0ZW0uY29sdW1uS2V5KTtcbiAgICB9XG59XG5TZWxlY3Rpb24ucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2VsZWN0ZWRLZXlzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3Rpb25LZXk6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbXCJrZW5kb0dyaWRTZWxlY3RCeVwiLF0gfV0sXG4gICAgY29sdW1uS2V5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZEtleXNDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuY29uc3QgcmVzZXQgPSAoLi4ubGlzdHMpID0+IHtcbiAgICBsZXQgZGlmZiA9IGZhbHNlO1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxpc3RzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgY29uc3QgW2xpc3QsIGNvbHVtbnNdID0gbGlzdHNbaWR4XTtcbiAgICAgICAgZGlmZiA9IGRpZmYgfHwgbGlzdC5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBsaXN0LnJlc2V0KGNvbHVtbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZGlmZjtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uc0NvbnRhaW5lciB7XG4gICAgY29uc3RydWN0b3IoY29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB0aGlzLmFsbENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMubGVhZkNvbHVtbnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5ub25Mb2NrZWRDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmxvY2tlZExlYWZDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLm5vbkxvY2tlZExlYWZDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLnRvdGFsTGV2ZWxzID0gMDtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxlYWZDb2x1bW5zVG9SZW5kZXIgPSBbXTtcbiAgICAgICAgdGhpcy5sb2NrZWRDb2x1bW5zVG9SZW5kZXIgPSBbXTtcbiAgICAgICAgdGhpcy5ub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXIgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNHcm91cEhlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0dyb3VwRm9vdGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzRm9vdGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMudW5sb2NrZWRXaWR0aCA9IDA7XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbHMgPSB0aGlzLnRvdGFsTGV2ZWxzO1xuICAgICAgICBjb25zdCBsZWFmQ29sdW1ucyQkMSA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBsb2NrZWRMZWFmQ29sdW1ucyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBub25Mb2NrZWRMZWFmQ29sdW1ucyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBsb2NrZWRDb2x1bW5zID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGNvbnN0IG5vbkxvY2tlZENvbHVtbnMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBsZWFmQ29sdW1uc1RvUmVuZGVyID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGNvbnN0IGxvY2tlZENvbHVtbnNUb1JlbmRlciA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXIgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgbGV0IGhhc0dyb3VwSGVhZGVyQ29sdW1uID0gZmFsc2U7XG4gICAgICAgIGxldCBoYXNHcm91cEZvb3RlciA9IGZhbHNlO1xuICAgICAgICBsZXQgaGFzRm9vdGVyID0gZmFsc2U7XG4gICAgICAgIGxldCB1bmxvY2tlZFdpZHRoID0gMDtcbiAgICAgICAgbGV0IGxlYWZJbmRleCA9IDA7XG4gICAgICAgIHRoaXMudG90YWxMZXZlbHMgPSAwO1xuICAgICAgICB0aGlzLmNvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJMZWFmQ29sdW1ucyA9IGNvbHVtbi5pc0xvY2tlZCA9PT0gdHJ1ZSA/IGxvY2tlZExlYWZDb2x1bW5zIDogbm9uTG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJDb2x1bW5zID0gY29sdW1uLmlzTG9ja2VkID09PSB0cnVlID8gbG9ja2VkQ29sdW1ucyA6IG5vbkxvY2tlZENvbHVtbnM7XG4gICAgICAgICAgICBjb25zdCB0b1JlbmRlckNvbnRhaW5lciA9IGNvbHVtbi5pc0xvY2tlZCA9PT0gdHJ1ZSA/IGxvY2tlZENvbHVtbnNUb1JlbmRlciA6IG5vbkxvY2tlZENvbHVtbnNUb1JlbmRlcjtcbiAgICAgICAgICAgIGlmICghaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyTGVhZkNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgICAgIGxlYWZDb2x1bW5zJCQxLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICBsZWFmQ29sdW1uc1RvUmVuZGVyLnB1c2guYXBwbHkobGVhZkNvbHVtbnNUb1JlbmRlciwgY29sdW1uc1RvUmVuZGVyKFtjb2x1bW5dKSk7XG4gICAgICAgICAgICAgICAgdG9SZW5kZXJDb250YWluZXIucHVzaC5hcHBseSh0b1JlbmRlckNvbnRhaW5lciwgY29sdW1uc1RvUmVuZGVyKFtjb2x1bW5dKSk7XG4gICAgICAgICAgICAgICAgaGFzR3JvdXBIZWFkZXJDb2x1bW4gPSBoYXNHcm91cEhlYWRlckNvbHVtbiB8fCBzb21lTGVhZkNvbHVtbihsZWFmID0+IEJvb2xlYW4obGVhZi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlUmVmKSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICBoYXNHcm91cEZvb3RlciA9IGhhc0dyb3VwRm9vdGVyIHx8IHNvbWVMZWFmQ29sdW1uKGxlYWYgPT4gQm9vbGVhbihsZWFmLmdyb3VwRm9vdGVyVGVtcGxhdGVSZWYpLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgIGhhc0Zvb3RlciA9IGhhc0Zvb3RlciB8fCBzb21lTGVhZkNvbHVtbihsZWFmID0+IEJvb2xlYW4obGVhZi5mb290ZXJUZW1wbGF0ZVJlZiksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW4uaXNMb2NrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5sb2NrZWRXaWR0aCArPSBjb2x1bW4ud2lkdGggfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNoaWxkQ29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5sZWFmSW5kZXggPSBsZWFmSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ubGVhZkluZGV4ID0gbGVhZkluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGFpbmVyQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICBhbGxDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxMZXZlbHMgPSBjb2x1bW4ubGV2ZWwgPiB0aGlzLnRvdGFsTGV2ZWxzID8gY29sdW1uLmxldmVsIDogdGhpcy50b3RhbExldmVscztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGFzR3JvdXBIZWFkZXJDb2x1bW4gPSBoYXNHcm91cEhlYWRlckNvbHVtbjtcbiAgICAgICAgdGhpcy5oYXNHcm91cEZvb3RlciA9IGhhc0dyb3VwRm9vdGVyO1xuICAgICAgICB0aGlzLmhhc0Zvb3RlciA9IGhhc0Zvb3RlcjtcbiAgICAgICAgdGhpcy5sZWFmQ29sdW1uc1RvUmVuZGVyID0gbGVhZkNvbHVtbnNUb1JlbmRlcjtcbiAgICAgICAgdGhpcy5sb2NrZWRDb2x1bW5zVG9SZW5kZXIgPSBsb2NrZWRDb2x1bW5zVG9SZW5kZXI7XG4gICAgICAgIHRoaXMubm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyID0gbm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyO1xuICAgICAgICB0aGlzLnVubG9ja2VkV2lkdGggPSB1bmxvY2tlZFdpZHRoO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gcmVzZXQoW3RoaXMubGVhZkNvbHVtbnMsIGxlYWZDb2x1bW5zJCQxXSwgW3RoaXMubG9ja2VkTGVhZkNvbHVtbnMsIGxvY2tlZExlYWZDb2x1bW5zXSwgW3RoaXMubm9uTG9ja2VkTGVhZkNvbHVtbnMsIG5vbkxvY2tlZExlYWZDb2x1bW5zXSwgW3RoaXMubG9ja2VkQ29sdW1ucywgbG9ja2VkQ29sdW1uc10sIFt0aGlzLmFsbENvbHVtbnMsIGFsbENvbHVtbnNdLCBbdGhpcy5ub25Mb2NrZWRDb2x1bW5zLCBub25Mb2NrZWRDb2x1bW5zXSkgfHwgY3VycmVudExldmVscyAhPT0gdGhpcy50b3RhbExldmVscztcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxufVxuXG5jb25zdCBmb3JFYWNoQ29sdW1uID0gKGxpc3QsIGNhbGxiYWNrKSA9PiB7XG4gICAgbGlzdC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY2FsbGJhY2soY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwICYmIGNvbHVtbi5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgZm9yRWFjaENvbHVtbihjb2x1bW4uY2hpbGRyZW5BcnJheSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuY29uc3QgZm9yRWFjaExldmVsID0gKGxpc3QsIGNhbGxiYWNrKSA9PiB7XG4gICAgc29ydENvbHVtbnMobGlzdClcbiAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBjYWxsYmFjayhjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uLmlzQ29sdW1uR3JvdXAgJiYgY29sdW1uLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3JFYWNoTGV2ZWwoY29sdW1uLmNoaWxkcmVuQXJyYXksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbmNvbnN0IGZpbHRlckhpZXJhcmNoeSA9IChsaXN0LCBwcmVkaWNhdGUpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBzb3J0Q29sdW1ucyhsaXN0KVxuICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoY29sdW1uKSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4kJDEgPSBmaWx0ZXJIaWVyYXJjaHkoY29sdW1uLmNoaWxkcmVuQXJyYXksIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuJCQxLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb2x1bW4sIC4uLmNoaWxkcmVuJCQxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghY29sdW1uLmlzU3BhbkNvbHVtbiB8fCBmaWx0ZXJIaWVyYXJjaHkoY29sdW1uLmNoaWxkcmVuQXJyYXksIHByZWRpY2F0ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbkxpc3Qge1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgICB9XG4gICAgc3RhdGljIGVtcHR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkxpc3QobmV3IFF1ZXJ5TGlzdCgpKTtcbiAgICB9XG4gICAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgICBmb3JFYWNoQ29sdW1uKHRoaXMuY29sdW1ucywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBmaWx0ZXIoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvckVhY2hDb2x1bW4odGhpcy5jb2x1bW5zLCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmaWx0ZXJIaWVyYXJjaHkocHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJIaWVyYXJjaHkodGhpcy5jb2x1bW5zLnRvQXJyYXkoKSwgcHJlZGljYXRlKTtcbiAgICB9XG4gICAgZmlsdGVyU29ydChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yRWFjaExldmVsKHRoaXMuY29sdW1ucy50b0FycmF5KCksIChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3JFYWNoQ29sdW1uKHRoaXMuY29sdW1ucywgKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJvb3RDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLnRvQXJyYXkoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBHcm91cEluZm9TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uTGlzdCA9IENvbHVtbkxpc3QuZW1wdHk7XG4gICAgfVxuICAgIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kQ29sdW1ucyh0aGlzLl9jb2x1bW5MaXN0KCkudG9BcnJheSgpKS5maWx0ZXIoaXNDb2x1bW5Db21wb25lbnQpO1xuICAgIH1cbiAgICByZWdpc3RlckNvbHVtbnNDb250YWluZXIoY29sdW1ucykge1xuICAgICAgICB0aGlzLl9jb2x1bW5MaXN0ID0gY29sdW1ucztcbiAgICB9XG4gICAgZm9ybWF0Rm9yR3JvdXAoaXRlbSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbkZvckdyb3VwKGl0ZW0pO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gY29sdW1uLmZvcm1hdCA6IFwiXCI7XG4gICAgfVxuICAgIGlzR3JvdXBhYmxlKGdyb3VwRmllbGQpIHtcbiAgICAgICAgY29uc3QgW2NvbHVtbl0gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gZ3JvdXBGaWVsZCk7XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyBjb2x1bW4uZ3JvdXBhYmxlIDogdHJ1ZTtcbiAgICB9XG4gICAgZ3JvdXBUaXRsZShpdGVtKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uRm9yR3JvdXAoaXRlbSk7XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyAoY29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZCkgOiB0aGlzLmdyb3VwRmllbGQoaXRlbSk7XG4gICAgfVxuICAgIGdyb3VwSGVhZGVyVGVtcGxhdGUoaXRlbSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbkZvckdyb3VwKGl0ZW0pO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gY29sdW1uLmdyb3VwSGVhZGVyVGVtcGxhdGVSZWYgfHwgY29sdW1uLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdyb3VwRmllbGQoZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwLmRhdGEgPyBncm91cC5kYXRhLmZpZWxkIDogZ3JvdXAuZmllbGQ7XG4gICAgfVxuICAgIGNvbHVtbkZvckdyb3VwKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5ncm91cEZpZWxkKGdyb3VwKTtcbiAgICAgICAgY29uc3QgW2NvbHVtbl0gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENoYW5nZU5vdGlmaWNhdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKG5nWm9uZSkge1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBub3RpZnkoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdWJzY3JpcHRpb24gfHwgdGhpcy5zdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlcy5lbWl0KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG5vLXJlY29yZHMgdGVtcGxhdGUgb2YgdGhlIEdyaWQuIFByb3ZpZGVzIGFuIG9wdGlvbiB0byBjdXN0b21pemUgdGhlXG4gKiBhcHBlYXJhbmNlIG9mIHRoZSBpdGVtIHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gbm8gZGF0YSBpcyBwcmVzZW50LiBUbyBkZWZpbmUgdGhlIG5vLXJlY29yZHMgdGVtcGxhdGUsXG4gKiBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZE5vUmVjb3Jkc1RlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGA8a2VuZG8tZ3JpZD5gLlxuICpcbiAqID4gV2hlbiB0aGUgbG9ja2VkIGNvbHVtbnMgb2YgdGhlIEdyaWQgYXJlIGluIHVzZSwgdGhlIHRlbXBsYXRlIGlzIGRpc3BsYXllZCBpbiB0aGUgbm9uLWxvY2tlZCBwYXJ0IG9mIHRoZSBjb250ZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCI+XG4gKiAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZE5vUmVjb3Jkc1RlbXBsYXRlPlxuICogICAgICAgICAgICBUaGVyZSBhcmUgbm90IHByb2R1Y3RzLiA8YSBocmVmPVwiI1wiIChjbGljayk9XCJyZWZyZXNoKClcIj5DbGljayBoZXJlIHRvIHJlZnJlc2g8L2E+LlxuICogICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGRhdGEgPSBbXTtcbiAqICAgICBwdWJsaWMgcmVmcmVzaCgpIHtcbiAqICAgICAgIHRoaXMuZGF0YSA9IFt7XG4gKiAgICAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlLFxuICogICAgICAgICAgICBcIkNhdGVnb3J5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwiQ2F0ZWdvcnlJRFwiOiAxLFxuICogICAgICAgICAgICAgICAgXCJDYXRlZ29yeU5hbWVcIjogXCJCZXZlcmFnZXNcIixcbiAqICAgICAgICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjogXCJTb2Z0IGRyaW5rcywgY29mZmVlcywgdGVhcywgYmVlcnMsIGFuZCBhbGVzXCJcbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgfSwge1xuICogICAgICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2UsXG4gKiAgICAgICAgICAgIFwiQ2F0ZWdvcnlcIjoge1xuICogICAgICAgICAgICAgICAgXCJDYXRlZ29yeUlEXCI6IDEsXG4gKiAgICAgICAgICAgICAgICBcIkNhdGVnb3J5TmFtZVwiOiBcIkJldmVyYWdlc1wiLFxuICogICAgICAgICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiBcIlNvZnQgZHJpbmtzLCBjb2ZmZWVzLCB0ZWFzLCBiZWVycywgYW5kIGFsZXNcIlxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgICB9LCB7XG4gKiAgICAgICAgICAgIFwiUHJvZHVjdElEXCI6IDMsXG4gKiAgICAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJBbmlzZWVkIFN5cnVwXCIsXG4gKiAgICAgICAgICAgIFwiVW5pdFByaWNlXCI6IDEwLjAwMDAsXG4gKiAgICAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlLFxuICogICAgICAgICAgICBcIkNhdGVnb3J5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwiQ2F0ZWdvcnlJRFwiOiAyLFxuICogICAgICAgICAgICAgICAgXCJDYXRlZ29yeU5hbWVcIjogXCJDb25kaW1lbnRzXCIsXG4gKiAgICAgICAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IFwiU3dlZXQgYW5kIHNhdm9yeSBzYXVjZXMsIHJlbGlzaGVzLCBzcHJlYWRzLCBhbmQgc2Vhc29uaW5nc1wiXG4gKiAgICAgICAgICAgIH1cbiAqICAgICAgICB9XTtcbiAqXG4gKiAgICAgfVxuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBOb1JlY29yZHNUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbk5vUmVjb3Jkc1RlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkTm9SZWNvcmRzVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Ob1JlY29yZHNUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG5jb25zdCBzZXQgPSB2YWx1ZSA9PiBwYWlyID0+IHBhaXIuZm9yRWFjaCh4ID0+IHguc3R5bGUuaGVpZ2h0ID0gdmFsdWUpO1xuY29uc3QgY2xlYXJIZWlnaHQgPSBwYWlycyA9PiBwYWlyc1xuICAgIC5maWx0ZXIoKFtsZWZ0LCByaWdodF0pID0+IGxlZnQuc3R5bGUuaGVpZ2h0IHx8IHJpZ2h0LnN0eWxlLmhlaWdodClcbiAgICAuZm9yRWFjaChzZXQoXCJcIikpO1xuY29uc3QgemlwJDEgPSAoYXJyMSwgYXJyMikgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGlkeCA9IDAsIGxlbiA9IGFycjEubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgICAgIGlmICghYXJyMltpZHhdKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChbYXJyMVtpZHhdLCBhcnIyW2lkeF1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBzZXRIZWlnaHQgPSBoZWlnaHRzID0+IChyb3csIGlkeCkgPT4gc2V0KGAke2hlaWdodHNbaWR4XSArIDF9cHhgKShyb3cpO1xuY29uc3QgZ2V0SGVpZ2h0cyA9IHJvd3MgPT4gcm93cy5tYXAoKFtsZWZ0LCByaWdodF0pID0+IHtcbiAgICBjb25zdCBoZWlnaHQgPSBsZWZ0Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBvZmZzZXRIZWlnaHQyID0gcmlnaHQub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChoZWlnaHQgPCBvZmZzZXRIZWlnaHQyKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXRIZWlnaHQyO1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0O1xufSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc3luY1Jvd3NIZWlnaHQgPSAodGFibGUxLCB0YWJsZTIpID0+IHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICBjb25zdCByb3dzID0gemlwJDEodGFibGUxLnJvd3MsIHRhYmxlMi5yb3dzKTtcbiAgICBjbGVhckhlaWdodChyb3dzKTtcbiAgICBjb25zdCBoZWlnaHRzID0gZ2V0SGVpZ2h0cyhyb3dzKTtcbiAgICBbdGFibGUxLCB0YWJsZTJdLmZvckVhY2goeCA9PiB4LnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpO1xuICAgIHJvd3MuZm9yRWFjaChzZXRIZWlnaHQoaGVpZ2h0cykpO1xuICAgIFt0YWJsZTEsIHRhYmxlMl0uZm9yRWFjaCh4ID0+IHguc3R5bGUuZGlzcGxheSA9ICcnKTtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gYWN0aXZlRWxlbWVudCAmJlxuICAgICAgICAodGFibGUxLmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpIHx8IHRhYmxlMi5jb250YWlucyhhY3RpdmVFbGVtZW50KSkpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNlcnZpY2UgdG8gc2V0IHRoZSBmaWx0ZXIgZGVzY3JpcHRvclxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZXVzYWJsZWN1c3RvbWZpbHRlcnNfZ3JpZCAlfSkpLlxuICovXG5jbGFzcyBGaWx0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGZpbHRlciBkZXNjcmlwdG9ycyBpcyBzZXQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBmaWx0ZXIgZGVzY3JpcHRvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tcG9zaXRlRmlsdGVyRGVzY3JpcHRvcn0gdmFsdWUgLSBUaGUgZmlsdGVyIGRlc2NyaXB0b3IgdGhhdCB3aWxsIGJlIHNldC5cbiAgICAgKi9cbiAgICBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQodmFsdWUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBwYWdlciB0ZW1wbGF0ZSB3aGljaCBoZWxwcyB0byBjdXN0b21pemUgdGhlIHBhZ2VyIGFwcGVhcmFuY2UgaW4gdGhlIEdyaWQuIFRvIGRlZmluZSBhIHBhZ2VyXG4gKiB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb1BhZ2VyVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgYDxrZW5kby1ncmlkPmAuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6XG4gKiAqIGBjdXJyZW50UGFnZWAmbWRhc2g7VGhlIGluZGV4IG9mIHRoZSBkaXNwbGF5ZWQgcGFnZS5cbiAqICogYHBhZ2VTaXplYCZtZGFzaDtUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYHBhZ2VTaXplYC5cbiAqICogYHNraXBgJm1kYXNoO1RoZSBjdXJyZW50IHNraXAgdmFsdWUuXG4gKiAqIGB0b3RhbGAmbWRhc2g7VGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzLlxuICogKiBgdG90YWxQYWdlc2AmbWRhc2g7VGhlIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgIDxrZW5kby1ncmlkXG4gKiAgICAgICAgW2tlbmRvR3JpZEJpbmRpbmddPVwiZ3JpZERhdGFcIlxuICogICAgICAgIFtwYWdlU2l6ZV09XCIxXCJcbiAqICAgICAgICBbcGFnZWFibGVdPVwidHJ1ZVwiXG4gKiAgICAgID5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiSURcIiB3aWR0aD1cIjQwXCI+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIk5hbWVcIiB3aWR0aD1cIjI1MFwiPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiUHJpY2VcIiB3aWR0aD1cIjgwXCIgZm9ybWF0PVwiezA6Y31cIj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKlxuICogICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvUGFnZXJUZW1wbGF0ZSBsZXQtdG90YWxQYWdlcz1cInRvdGFsUGFnZXNcIiBsZXQtY3VycmVudFBhZ2U9XCJjdXJyZW50UGFnZVwiPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz48L2tlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnMgW2J1dHRvbkNvdW50XT1cIjEwXCI+PC9rZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnM+XG4gKiAgICAgICAgICA8a2VuZG8tcGFnZXItbmV4dC1idXR0b25zPjwva2VuZG8tcGFnZXItbmV4dC1idXR0b25zPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLWluZm8+PC9rZW5kby1wYWdlci1pbmZvPlxuICogICAgICAgICAgQ3VycmVudCBwYWdlOiB7e2N1cnJlbnRQYWdlfX1cbiAqICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZ3JpZERhdGEgPSBbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFBhZ2VyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5QYWdlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9QYWdlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUERGU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2F2ZVBERiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kcmF3UERGID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmV4cG9ydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBzYXZlKGNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh0aGlzLnNhdmVQREYsIGNvbXBvbmVudCk7XG4gICAgfVxuICAgIGRyYXcoY29tcG9uZW50LCBwcm9taXNlKSB7XG4gICAgICAgIHRoaXMuZW1pdEV2ZW50KHRoaXMuZHJhd1BERiwgeyBjb21wb25lbnQsIHByb21pc2UgfSk7XG4gICAgfVxuICAgIGVtaXRFdmVudChlbWl0dGVyLCBhcmdzKSB7XG4gICAgICAgIGlmIChlbWl0dGVyLm9ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ3JlYXRpbmcgUERGIHJlcXVpcmVzIGluY2x1ZGluZyB0aGUgUERGTW9kdWxlIGFuZCBhZGRpbmcgdGhlIDxrZW5kby1ncmlkLXBkZj4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuUERGU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgcGRmRXhwb3J0YCBldmVudC5cbiAqL1xuY2xhc3MgUERGRXhwb3J0RXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFN1c3BlbmRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zY3JvbGwgPSBmYWxzZTtcbiAgICB9XG59XG5TdXNwZW5kU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyogdHNsaW50OmRpc2FibGU6IG9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgYm9vdHN0cmFwVG9NZWRpYSA9IChtZWRpYSkgPT4gKCh7XG4gICAgXCJ4c1wiOiBcIihtYXgtd2lkdGg6IDU3NnB4KVwiLFxuICAgIFwic21cIjogXCIobWluLXdpZHRoOiA1NzZweClcIixcbiAgICBcIm1kXCI6IFwiKG1pbi13aWR0aDogNzY4cHgpXCIsXG4gICAgXCJsZ1wiOiBcIihtaW4td2lkdGg6IDk5MnB4KVwiLFxuICAgIFwieGxcIjogXCIobWluLXdpZHRoOiAxMjAwcHgpXCJcbn0pW21lZGlhXSB8fCBtZWRpYSk7XG4vKiB0c2xpbnQ6ZW5hYmxlOiBvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXMgKi9cbmNvbnN0IGJyb3dzZXJNYXRjaE1lZGlhID0gKG1lZGlhKSA9PiB3aW5kb3cubWF0Y2hNZWRpYShtZWRpYSkubWF0Y2hlcztcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBSZXNwb25zaXZlU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1hdGNoTWVkaWEgPSBicm93c2VyTWF0Y2hNZWRpYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG1hdGNoZXNNZWRpYShtZWRpYSkge1xuICAgICAgICByZXR1cm4gIW1lZGlhIHx8IHRoaXMubWF0Y2hNZWRpYShib290c3RyYXBUb01lZGlhKG1lZGlhKSk7XG4gICAgfVxufVxuUmVzcG9uc2l2ZVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBFeGNlbFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNhdmVUb0V4Y2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmV4cG9ydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBzYXZlKGNvbXBvbmVudCkge1xuICAgICAgICBpZiAodGhpcy5zYXZlVG9FeGNlbC5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhdmluZyBleGNlbCByZXF1aXJlcyBpbmNsdWRpbmcgdGhlIEV4Y2VsTW9kdWxlIGFuZCBhZGRpbmcgdGhlIDxrZW5kby1ncmlkLWV4Y2VsPiBjb21wb25lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVUb0V4Y2VsLmVtaXQoY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkV4Y2VsU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0b29sYmFyIHRlbXBsYXRlIG9mIHRoZSBHcmlkLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkOlxuICogLSBgcG9zaXRpb25gJm1kYXNoO1RoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgdG9vbGJhciB0ZW1wbGF0ZSBpcyByZW5kZXJlZC4gVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgXCJ0b3BcIiBhbmQgXCJib3R0b21cIi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxkaXYgY2xhc3M9XCJleGFtcGxlLWNvbmZpZ1wiPlxuICogICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJ0b3BcIiBuYW1lPVwicG9zaXRpb25cIiBjbGFzcz1cImstcmFkaW9cIiB2YWx1ZT1cInRvcFwiIGNoZWNrZWQgKGNsaWNrKT1cInBvc2l0aW9uQ2hhbmdlKCRldmVudClcIi8+XG4gKiAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJ0b3BcIj5Ub3A8L2xhYmVsPjxici8+XG4gKiAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cImJvdHRvbVwiIG5hbWU9XCJwb3NpdGlvblwiIGNsYXNzPVwiay1yYWRpb1wiIHZhbHVlPVwiYm90dG9tXCIgKGNsaWNrKT1cInBvc2l0aW9uQ2hhbmdlKCRldmVudClcIi8+XG4gKiAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJib3R0b21cIj5Cb3R0b208L2xhYmVsPjxici8+XG4gKiAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cImJvdGhcIiBuYW1lPVwicG9zaXRpb25cIiB2YWx1ZT1cImJvdGhcIiBjbGFzcz1cImstcmFkaW9cIiAoY2xpY2spPVwicG9zaXRpb25DaGFuZ2UoJGV2ZW50KVwiLz5cbiAqICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImJvdGhcIj5Cb3RoPC9sYWJlbD48YnIvPlxuICogICAgICAgPC9kaXY+XG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIHN0eWxlPVwiaGVpZ2h0OiAyMDBweFwiPlxuICogICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlIFtwb3NpdGlvbl09XCJwb3NpdGlvblwiIGxldC1wb3NpdGlvbj1cInBvc2l0aW9uXCI+XG4gKiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkNsaWNrKClcIiBjbGFzcz1cImstYnV0dG9uXCI+Q3VzdG9tIGFjdGlvbjwvYnV0dG9uPlxuICogICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj5cbiAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBwb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyB8ICdib3RoJyA9ICd0b3AnO1xuICpcbiAqICAgICBwdWJsaWMgZ3JpZERhdGEgPSBbe1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogICAgICAgfVxuICogICAgIF07XG4gKlxuICogICAgIHB1YmxpYyBvbkNsaWNrKCk6IHZvaWQge1xuICogICAgICAgICBjb25zb2xlLmxvZyhcImJ1dHRvbiB3YXMgY2xpY2tlZFwiKTtcbiAqICAgICB9XG4gKlxuICogICAgIHB1YmxpYyBwb3NpdGlvbkNoYW5nZSh7IHRhcmdldCB9KTogdm9pZCB7XG4gKiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHRhcmdldC52YWx1ZTtcbiAqICAgICB9XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFRvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IFwidG9wXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbGJhciAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHRvb2xiYXJ0ZW1wbGF0ZV9ncmlkICV9KSkuXG4gICAgICpcbiAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgKiAtIGB0b3BgJm1kYXNoO1Bvc2l0aW9ucyB0aGUgdG9vbGJhciBhYm92ZSB0aGUgZ3JvdXAgcGFuZWwgb3IgaGVhZGVyLlxuICAgICAqIC0gYGJvdHRvbWAmbWRhc2g7UG9zaXRpb25zIHRoZSB0b29sYmFyIGJlbG93IHRoZSBwYWdlci5cbiAgICAgKiAtIGBib3RoYCZtZGFzaDtEaXNwbGF5cyB0d28gdG9vbGJhciBpbnN0YW5jZXMuIFBvc2l0aW9ucyB0aGUgZmlyc3Qgb25lIGFib3ZlXG4gICAgICogdGhlIGdyb3VwIHBhbmVsIG9yIGhlYWRlciBhbmQgdGhlIHNlY29uZCBvbmUgYmVsb3cgdGhlIHBhZ2VyLlxuICAgICAqL1xuICAgIHNldCBwb3NpdGlvbihwb3NpdGlvbikge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIH1cbiAgICBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG59XG5Ub29sYmFyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Ub29sYmFyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblRvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBwb3NpdGlvbjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFtcInBvc2l0aW9uXCIsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNjcm9sbFN5bmNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmhlYWRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5ib2R5U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuY2hhbmdlcy5zdWJzY3JpYmUoYXJncyA9PiB0aGlzLnNjcm9sbExlZnQoYXJncykpKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJFbWl0dGVyKGVsLCBzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMudW5yZWdpc3Rlcihzb3VyY2VUeXBlKTtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKHsgZWxlbWVudDogZWwsIHNvdXJjZVR5cGUgfSk7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSBcImJvZHlcIiB8fCBzb3VyY2VUeXBlID09PSBcImhlYWRlclwiKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzID0gZnJvbUV2ZW50KGVsLCBcInNjcm9sbFwiKS5waXBlKG1hcCgoeyB0YXJnZXQ6IHsgc2Nyb2xsTGVmdCB9IH0pID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVR5cGVcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG9icy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh4LCB5KSA9PiAoeC5zY3JvbGxMZWZ0ID09PSB5LnNjcm9sbExlZnQpKSwgZmlsdGVyKHggPT4gIXRoaXMuc291cmNlIHx8IHRoaXMuc291cmNlID09PSB4LnNvdXJjZVR5cGUpLCB0YXAoeCA9PiB0aGlzLnNvdXJjZSA9IHguc291cmNlVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHRoaXMuY2hhbmdlcy5uZXh0KHgpKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24uYWRkKG9icy5waXBlKGZpbHRlcih4ID0+IHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlICE9PSB4LnNvdXJjZVR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc291cmNlID0gdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09IFwiYm9keVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9keVN1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyU3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGRlc3Ryb3lcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5ib2R5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHNjcm9sbExlZnQoeyBzY3JvbGxMZWZ0LCBzb3VyY2VUeXBlIH0pIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50c1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiBzb3VyY2VUeXBlICE9PSB4LnNvdXJjZVR5cGUpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgZWxlbWVudCB9KSA9PiBlbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVucmVnaXN0ZXIoc291cmNlVHlwZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudHMuZmluZEluZGV4KHggPT4geC5zb3VyY2VUeXBlID09PSBzb3VyY2VUeXBlKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSBcImhlYWRlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09IFwiYm9keVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuU2Nyb2xsU3luY1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNjcm9sbFN5bmNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBSZXNpemVTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHsgfSk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptZW1iZXItb3JkZXJpbmdcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gdGhpcy5kaXNwYXRjaGVyLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGhyb3R0bGVUaW1lKDEwMCkpO1xuICAgIH1cbiAgICBjb25uZWN0KHJlc2l6ZXMpIHtcbiAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24uYWRkKHJlc2l6ZXMuc3Vic2NyaWJlKHRoaXMuZGlzcGF0Y2hlcikpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZXNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5SZXNpemVTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNMb2NrZWQgPSBjb2x1bW4gPT4gY29sdW1uLnBhcmVudCA/IGlzTG9ja2VkKGNvbHVtbi5wYXJlbnQpIDogISFjb2x1bW4ubG9ja2VkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJlc2l6ZUFyZ3MgPSAoY29sdW1uLCBleHRyYSkgPT4gT2JqZWN0LmFzc2lnbih7XG4gICAgY29sdW1uczogbGVhZkNvbHVtbnMoW2NvbHVtbl0pLFxuICAgIGxvY2tlZDogaXNMb2NrZWQoY29sdW1uKVxufSwgZXh0cmEpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uUmVzaXppbmdTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRhYmxlcyA9IFtdO1xuICAgICAgICB0aGlzLmJhdGNoID0gbnVsbDtcbiAgICB9XG4gICAgc3RhcnQoY29sdW1uKSB7XG4gICAgICAgIHRoaXMudHJhY2tDb2x1bW5zKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSAodGhpcy5jb2x1bW4uaXNDb2x1bW5Hcm91cCA/IFtjb2x1bW5dIDogW10pXG4gICAgICAgICAgICAuY29uY2F0KGxlYWZDb2x1bW5zKFtjb2x1bW5dKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHtcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICBsb2NrZWQ6IGlzTG9ja2VkKHRoaXMuY29sdW1uKSxcbiAgICAgICAgICAgIHR5cGU6ICdzdGFydCdcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc2l6ZUNvbHVtbnMoZGVsdGFQZXJjZW50KSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHJlc2l6ZUFyZ3ModGhpcy5jb2x1bW4sIHtcbiAgICAgICAgICAgIGRlbHRhUGVyY2VudCxcbiAgICAgICAgICAgIHR5cGU6ICdyZXNpemVDb2x1bW4nXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChhY3Rpb24pO1xuICAgIH1cbiAgICByZXNpemVUYWJsZShjb2x1bW4sIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHJlc2l6ZUFyZ3MoY29sdW1uLCB7XG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHR5cGU6ICdyZXNpemVUYWJsZSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGFjdGlvbik7XG4gICAgfVxuICAgIHJlc2l6ZWRDb2x1bW4oc3RhdGUkJDEpIHtcbiAgICAgICAgdGhpcy5yZXNpemVkQ29sdW1ucy5wdXNoKHN0YXRlJCQxKTtcbiAgICB9XG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIHJlc2l6ZWRDb2x1bW5zOiB0aGlzLnJlc2l6ZWRDb2x1bW5zLFxuICAgICAgICAgICAgdHlwZTogJ2VuZCdcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyVGFibGUodGFibGVNZXRhZGF0YSkge1xuICAgICAgICB0aGlzLnRhYmxlcy5wdXNoKHRhYmxlTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB1bnJlZ2lzdGVyVGFibGUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlcy5zcGxpY2UodGhpcy50YWJsZXMuaW5kZXhPZih0YWJsZU1ldGFkYXRhKSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB1bnJlZ2lzdGVyVGFibGU7XG4gICAgfVxuICAgIG1lYXN1cmVDb2x1bW5zKGluZm8pIHtcbiAgICAgICAgaWYgKHRoaXMuYmF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYmF0Y2gucHVzaCguLi5pbmZvKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpdEJhdGNoKGluZm8sICgpID0+IHRoaXMuZW5kKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF1dG9GaXQoLi4uY29sdW1ucykge1xuICAgICAgICBjb25zdCBub25Mb2NrZWRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uaXNMb2NrZWQpO1xuICAgICAgICB0aGlzLmF1dG9GaXRTdGFydChub25Mb2NrZWRDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hdXRvRml0QmF0Y2godGhpcy5iYXRjaCwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vbkxvY2tlZENvbHVtbnMubGVuZ3RoIDwgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NrZWRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pc0xvY2tlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvRml0U3RhcnQobG9ja2VkQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvRml0QmF0Y2godGhpcy5iYXRjaCwgKCkgPT4gdGhpcy5lbmQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhY2tDb2x1bW5zKGNvbHVtbikge1xuICAgICAgICB0aGlzLnJlc2l6ZWRDb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgIH1cbiAgICBhdXRvRml0U3RhcnQoY29sdW1ucykge1xuICAgICAgICB0aGlzLmJhdGNoID0gW107XG4gICAgICAgIHRoaXMucmVzaXplZENvbHVtbnMgPSBbXTtcbiAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9ja2VkID0gY29sdW1uc1swXS5pc0xvY2tlZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoe1xuICAgICAgICAgICAgdHlwZTogJ3N0YXJ0JyxcbiAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICBsb2NrZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmlnZ2VyQXV0b0ZpdCcsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgbG9ja2VkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhdXRvRml0QmF0Y2goaW5mbywgb25Db21wbGV0ZSkge1xuICAgICAgICBjb25zdCBsb2NrZWQgPSBpbmZvLmxlbmd0aCA+IDAgPyBpbmZvWzBdLmNvbHVtbi5pc0xvY2tlZCA6IGZhbHNlO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHRoaXMudGFibGVzXG4gICAgICAgICAgICAuZmlsdGVyKHRhYmxlID0+IHRhYmxlLmxvY2tlZCA9PT0gbG9ja2VkKVxuICAgICAgICAgICAgLm1hcCh0YWJsZSA9PiB0YWJsZS5hdXRvRml0KGluZm8pKTtcbiAgICAgICAgemlwKC4uLm9ic2VydmFibGVzKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUod2lkdGhzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBpbmZvLm1hcChpID0+IGkuY29sdW1uKSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnYXV0b0ZpdENvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICB3aWR0aHMsXG4gICAgICAgICAgICAgICAgbG9ja2VkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChvbkNvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaCA9IG51bGw7XG4gICAgfVxufVxuQ29sdW1uUmVzaXppbmdTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0ZpbHRlck1lbnUgPSAoc2V0dGluZ3MpID0+IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgJiYgc2V0dGluZ3MuaW5kZXhPZignbWVudScpID4gLTE7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzRmlsdGVyUm93ID0gKHNldHRpbmdzKSA9PiBzZXR0aW5ncyA9PT0gdHJ1ZSB8fCAodHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyAmJiBzZXR0aW5ncy5pbmRleE9mKCdyb3cnKSA+IC0xKTtcblxuY29uc3QgY29udGFpbnMkMSA9IChub2RlLCBwcmVkaWNhdGUpID0+IHtcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgY2xvc2VgIGV2ZW50IG9mIHRoZSBmaWx0ZXIgYW5kIGNvbHVtbi1tZW51IHBvcHVwLlxuICovXG5jbGFzcyBQb3B1cENsb3NlRXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IGU7XG4gICAgfVxufVxuY29uc3QgREVGQVVMVF9QT1BVUF9DTEFTUyA9ICdrLWdyaWQtZmlsdGVyLXBvcHVwJztcbi8qKlxuICogVGhlIHNlcnZpY2UgdGhhdCBpcyB1c2VkIGZvciB0aGUgcG9wdXBzIG9mIHRoZSBmaWx0ZXIgYW5kIGNvbHVtbiBtZW51c1xuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZXVzYWJsZWN1c3RvbWZpbHRlcnNfZ3JpZCAlfSN0b2MtZmlsdGVyLW1lbnUtd2l0aC1wb3B1cCkpLlxuICovXG5jbGFzcyBTaW5nbGVQb3B1cFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgcmVuZGVyZXIsIG5nWm9uZSwgc2Nyb2xsU3luY1NlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBmaWx0ZXIgb3IgY29sdW1uIG1lbnVzIGFyZSBhYm91dCB0byBjbG9zZSBiZWNhdXNlIHRoZSB1c2VyIGNsaWNrZWQgb3V0c2lkZSB0aGVpciBwb3B1cHMuXG4gICAgICAgICAqIFVzZWQgdG8gcHJldmVudCB0aGUgcG9wdXAgZnJvbSBjbG9zaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkNsb3NlID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSBzY3JvbGxTeW5jU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlc3Ryb3koKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvcGVuKGFuY2hvciwgdGVtcGxhdGUsIHBvcHVwUmVmLCBwb3B1cENsYXNzID0gREVGQVVMVF9QT1BVUF9DTEFTUykge1xuICAgICAgICBjb25zdCB0b2dnbGUgPSBpc1ByZXNlbnQocG9wdXBSZWYpICYmIHRoaXMucG9wdXBSZWYgPT09IHBvcHVwUmVmO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKCF0b2dnbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3Blbih7XG4gICAgICAgICAgICAgICAgYW5jaG9yQWxpZ246IHsgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBwb3B1cEFsaWduOiB7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBhbmNob3IsXG4gICAgICAgICAgICAgICAgcG9wdXBDbGFzczogcG9wdXBDbGFzcyxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk1vZGU6IFwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudCwgJ2RpcicsIHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hDbG9zZShhbmNob3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvcHVwUmVmO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoQ2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgZGV0YWNoQ2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXR0YWNoQ2xvc2Uoc2tpcEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5kZXRhY2hDbG9zZSgpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLnJlbW92ZUNsaWNrID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXCJkb2N1bWVudFwiLCBcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5zJDEoZS50YXJnZXQsIHggPT4gdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQgPT09IHggfHwgeCA9PT0gc2tpcEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IG5ldyBQb3B1cENsb3NlRXZlbnQoZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQoYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblNpbmdsZVBvcHVwU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU2luZ2xlUG9wdXBTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogU2Nyb2xsU3luY1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyogdHNsaW50OmRpc2FibGU6IG5vLWJpdHdpc2UgKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBhcHBlbmQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGxldCBhcHBlbmRlZCA9IGZhbHNlO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghYXBwZW5kZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICBhcHBlbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2V0RG9jdW1lbnQgPSBlbGVtZW50ID0+IGVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2V0V2luZG93ID0gZWxlbWVudCA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgb2Zmc2V0ID0gZWxlbWVudCA9PiB7XG4gICAgY29uc3QgeyBjbGllbnRUb3AsIGNsaWVudExlZnQgfSA9IGdldERvY3VtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHsgcGFnZVlPZmZzZXQsIHBhZ2VYT2Zmc2V0IH0gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gICAgY29uc3QgeyB0b3AsIGxlZnQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiB0b3AgKyBwYWdlWU9mZnNldCAtIGNsaWVudFRvcCxcbiAgICAgICAgbGVmdDogbGVmdCArIHBhZ2VYT2Zmc2V0IC0gY2xpZW50TGVmdFxuICAgIH07XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKiBJZiB0aGUgdGFyZ2V0IGlzIGJlZm9yZSB0aGUgZHJhZ2dhYmxlIGVsZW1lbnQsIHJldHVybnMgYHRydWVgLlxuICpcbiAqIERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA9IDRcbiAqL1xuY29uc3QgaXNUYXJnZXRCZWZvcmUgPSAoZHJhZ2dhYmxlLCB0YXJnZXQpID0+ICh0YXJnZXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZHJhZ2dhYmxlKSAmIDQpICE9PSAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKiBJZiB0aGUgY29udGFpbmVyIGFuZCB0aGUgZWxlbWVudCBhcmUgdGhlIHNhbWVcbiAqIG9yIGlmIHRoZSBjb250YWluZXIgaG9sZHMgKGNvbnRhaW5zKSB0aGUgZWxlbWVudCwgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZID0gMTZcbiAqL1xuY29uc3QgY29udGFpbnMkMiA9IChlbGVtZW50LCBjb250YWluZXIpID0+IGVsZW1lbnQgPT09IGNvbnRhaW5lciB8fFxuICAgIChjb250YWluZXIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudCkgJiAxNikgIT09IDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcG9zaXRpb24gPSAodGFyZ2V0LCBiZWZvcmUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRSZWN0ID0gb2Zmc2V0KHRhcmdldCk7XG4gICAgY29uc3QgeyBvZmZzZXRXaWR0aCwgb2Zmc2V0SGVpZ2h0IH0gPSB0YXJnZXQ7XG4gICAgY29uc3QgbGVmdCA9IHRhcmdldFJlY3QubGVmdCArIChiZWZvcmUgPyAwIDogb2Zmc2V0V2lkdGgpO1xuICAgIGNvbnN0IHRvcCA9IHRhcmdldFJlY3QudG9wO1xuICAgIGNvbnN0IGhlaWdodCA9IG9mZnNldEhlaWdodDtcbiAgICByZXR1cm4geyBsZWZ0LCB0b3AsIGhlaWdodCB9O1xufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYWdBbmREcm9wU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlciA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgICBhZGQodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXIucHVzaCh0YXJnZXQpO1xuICAgIH1cbiAgICByZW1vdmUodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXIgPSB0aGlzLnJlZ2lzdGVyLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnQgIT09IHRhcmdldCk7XG4gICAgfVxuICAgIG5vdGlmeURyYWcoZHJhZ2dhYmxlLCBlbGVtZW50LCBtb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0Rm9yKGVsZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5sYXN0VGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dCh7XG4gICAgICAgICAgICBkcmFnZ2FibGUsXG4gICAgICAgICAgICBtb3VzZUV2ZW50LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmxhc3RUYXJnZXQsXG4gICAgICAgICAgICB0eXBlOiAnbGVhdmUnXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMubmV4dCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlLFxuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlbnRlcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICB9XG4gICAgbm90aWZ5RHJvcChkcmFnZ2FibGUsIG1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgZHJhZ2dhYmxlLFxuICAgICAgICAgICAgbW91c2VFdmVudCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5sYXN0VGFyZ2V0LFxuICAgICAgICAgICAgdHlwZTogJ2Ryb3AnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxhc3RUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgICB0YXJnZXRGb3IoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wYXJlciA9IGNvbnRhaW5zJDIuYmluZChudWxsLCBlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIuZmluZCgoeyBlbGVtZW50OiB7IG5hdGl2ZUVsZW1lbnQgfSB9KSA9PiBjb21wYXJlcihuYXRpdmVFbGVtZW50KSk7XG4gICAgfVxufVxuRHJhZ0FuZERyb3BTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCB1cGRhdGVDbGFzcyA9IChlbGVtZW50LCB2YWxpZCkgPT4ge1xuICAgIGNvbnN0IGljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWljb24nKTtcbiAgICBpY29uLmNsYXNzTmFtZSA9IGljb24uY2xhc3NOYW1lXG4gICAgICAgIC5yZXBsYWNlKC8ocGx1c3xjYW5jZWwpLywgdmFsaWQgPyAncGx1cycgOiAnY2FuY2VsJyk7XG59O1xuY29uc3QgdXBkYXRlTG9jayA9IChlbGVtZW50LCBsb2NrZWQgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgaWNvbiA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmstaWNvbicpWzFdO1xuICAgIGNvbnN0IHZhbHVlID0gbG9ja2VkID09IG51bGwgPyAnJyA6IChsb2NrZWQgPyAnay1pLWxvY2snIDogJ2staS11bmxvY2snKTtcbiAgICBpY29uLmNsYXNzTmFtZSA9IGljb24uY2xhc3NOYW1lXG4gICAgICAgIC5yZXBsYWNlKC8oay1pLXVubG9ja3xrLWktbG9jaykvLCAnJykgKyBgICR7dmFsdWV9YDtcbn07XG5jb25zdCBkZWNvcmF0ZSA9IChlbGVtZW50LCB0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCk7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSAnay1oZWFkZXIgay1kcmFnLWNsdWUnO1xuICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGVsZW1lbnQuc3R5bGUuekluZGV4ID0gJzIwMDAwJztcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gdGFyZ2V0U3R5bGVzLnBhZGRpbmdMZWZ0O1xuICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ1RvcCA9IHRhcmdldFN0eWxlcy5wYWRkaW5nVG9wO1xuICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ0JvdHRvbSA9IHRhcmdldFN0eWxlcy5wYWRkaW5nQm90dG9tO1xuICAgIGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gdGFyZ2V0U3R5bGVzLnBhZGRpbmdSaWdodDtcbiAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdGFyZ2V0U3R5bGVzLndpZHRoO1xuICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGFyZ2V0U3R5bGVzLmhlaWdodDtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRHJhZ0hpbnRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihzYW50aXplcikge1xuICAgICAgICB0aGlzLnNhbnRpemVyID0gc2FudGl6ZXI7XG4gICAgfVxuICAgIGNyZWF0ZShkb3duLCB0YXJnZXQsIHRpdGxlKSB7XG4gICAgICAgIHRoaXMuaW5pdENvb3Jkcyhkb3duKTtcbiAgICAgICAgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBkZWNvcmF0ZSh0aGlzLmRvbSwgdGFyZ2V0KTtcbiAgICAgICAgY29uc3Qgc2FmZVRpdGxlID0gdGhpcy5zYW50aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgdGl0bGUpO1xuICAgICAgICB0aGlzLmRvbS5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWRyYWctc3RhdHVzIGstaS1jYW5jZWwgay1pY29uLXdpdGgtbW9kaWZpZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24tbW9kaWZpZXJcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAke3NhZmVUaXRsZX1cbiAgICAgICAgYDtcbiAgICB9XG4gICAgYXR0YWNoKCkge1xuICAgICAgICByZXR1cm4gYXBwZW5kKHRoaXMuZG9tKTtcbiAgICB9XG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5kb20gJiYgdGhpcy5kb20ucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCkpO1xuICAgICAgICAgICAgfSkodGhpcy5kb20pOyAvLyBoYWNrIGZvciBJRSArIHBvaW50ZXIgZXZlbnRzIVxuICAgICAgICAgICAgdGhpcy5kb20gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3coKSB7XG4gICAgICAgIHRoaXMuZG9tLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgIH1cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgdXBkYXRlQ2xhc3ModGhpcy5kb20sIHRydWUpO1xuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB1cGRhdGVDbGFzcyh0aGlzLmRvbSwgZmFsc2UpO1xuICAgIH1cbiAgICByZW1vdmVMb2NrKCkge1xuICAgICAgICB1cGRhdGVMb2NrKHRoaXMuZG9tKTtcbiAgICB9XG4gICAgdG9nZ2xlTG9jayhsb2NrZWQpIHtcbiAgICAgICAgdXBkYXRlTG9jayh0aGlzLmRvbSwgbG9ja2VkKTtcbiAgICB9XG4gICAgbW92ZShtb3ZlKSB7XG4gICAgICAgIHRoaXMuZG9tLnN0eWxlLnRvcCA9IHRoaXMuaW5pdGlhbFRvcCArIG1vdmUucGFnZVkgKyAncHgnO1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5sZWZ0ID0gdGhpcy5pbml0aWFsTGVmdCArIG1vdmUucGFnZVggKyAncHgnO1xuICAgIH1cbiAgICBpbml0Q29vcmRzKGRvd24pIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQgfSA9IG9mZnNldChkb3duLm9yaWdpbmFsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdGhpcy5pbml0aWFsVG9wID0gdG9wIC0gZG93bi5wYWdlWTtcbiAgICAgICAgdGhpcy5pbml0aWFsTGVmdCA9IGxlZnQgLSBkb3duLnBhZ2VYO1xuICAgIH1cbn1cbkRyYWdIaW50U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRHJhZ0hpbnRTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRG9tU2FuaXRpemVyIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEcm9wQ3VlU2VydmljZSB7XG4gICAgY3JlYXRlKCkge1xuICAgICAgICB0aGlzLmRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuZG9tLmNsYXNzTmFtZSA9ICdrLWdyb3VwaW5nLWRyb3BjbHVlJztcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICAgIGF0dGFjaCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGlzLmRvbSk7XG4gICAgfVxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9tICYmIHRoaXMuZG9tLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5kb20pO1xuICAgICAgICAgICAgdGhpcy5kb20gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhpZGUoKSB7XG4gICAgICAgIHRoaXMuZG9tLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9XG4gICAgcG9zaXRpb24oeyBsZWZ0LCB0b3AsIGhlaWdodCB9KSB7XG4gICAgICAgIHRoaXMuZG9tLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZG9tLm9mZnNldFdpZHRoIC8gMjtcbiAgICAgICAgdGhpcy5kb20uc3R5bGUubGVmdCA9IGxlZnQgLSB3aWR0aCArICdweCc7XG4gICAgfVxufVxuRHJvcEN1ZVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2x1bW5SZW9yZGVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgcmVvcmRlcihlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGUpO1xuICAgIH1cbn1cbkNvbHVtblJlb3JkZXJTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBjb2x1bW5SZW9yZGVyYCBldmVudC5cbiAqL1xuY2xhc3MgQ29sdW1uUmVvcmRlckV2ZW50IGV4dGVuZHMgUHJldmVudGFibGVFdmVudCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHsgY29sdW1uLCBuZXdJbmRleCwgb2xkSW5kZXggfSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5uZXdJbmRleCA9IG5ld0luZGV4O1xuICAgICAgICB0aGlzLm9sZEluZGV4ID0gb2xkSW5kZXg7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvbk1ldGFkYXRhIHtcbiAgICBjb25zdHJ1Y3RvcihkYXRhUm93cywgaGVhZGVyUm93cywgaXNWaXJ0dWFsLCBoYXNQYWdlciwgaGFzRGV0YWlsVGVtcGxhdGUsIGdyaWRFbGVtZW50LCB2aXJ0dWFsQ29sdW1ucywgY29sdW1ucykge1xuICAgICAgICB0aGlzLmRhdGFSb3dzID0gZGF0YVJvd3M7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93cyA9IGhlYWRlclJvd3M7XG4gICAgICAgIHRoaXMuaXNWaXJ0dWFsID0gaXNWaXJ0dWFsO1xuICAgICAgICB0aGlzLmhhc1BhZ2VyID0gaGFzUGFnZXI7XG4gICAgICAgIHRoaXMuaGFzRGV0YWlsVGVtcGxhdGUgPSBoYXNEZXRhaWxUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudCA9IGdyaWRFbGVtZW50O1xuICAgICAgICB0aGlzLnZpcnR1YWxDb2x1bW5zID0gdmlydHVhbENvbHVtbnM7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBtYXhMb2dpY2FsUm93SW5kZXgoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFSb3dzID0gdGhpcy5oYXNEZXRhaWxUZW1wbGF0ZSA/IHRoaXMuZGF0YVJvd3MgKiAyIDogdGhpcy5kYXRhUm93cztcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyUm93cyArIGRhdGFSb3dzIC0gMTtcbiAgICB9XG59XG5cbi8vIEluY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgc2VydmljZSBpcyBpbnN0YW50aWF0ZWQuXG5sZXQgc2VxdWVuY2UgPSAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIElkU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJlZml4ID0gYGstZ3JpZCR7c2VxdWVuY2UrK31gO1xuICAgIH1cbiAgICBjZWxsSWQocm93SW5kZXgsIGNvbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tciR7cm93SW5kZXh9YyR7Y29sSW5kZXh9YDtcbiAgICB9XG4gICAgc2VsZWN0aW9uQ2hlY2tib3hJZChpdGVtSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS1jaGVja2JveCR7aXRlbUluZGV4fWA7XG4gICAgfVxuICAgIHNlbGVjdEFsbENoZWNrYm94SWQoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tc2VsZWN0LWFsbGA7XG4gICAgfVxufVxuSWRTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5JZFNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbkluZm9TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxvY2tlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5SYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyID0gbmV3IENvbHVtbnNDb250YWluZXIoKCkgPT4gW10pO1xuICAgIH1cbiAgICBnZXQgbG9ja2VkTGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIubG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IGlzTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBnZXQgdG90YWxMZXZlbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIudG90YWxMZXZlbHM7XG4gICAgfVxuICAgIGdldCBsZWFmTmFtZWRDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZXhwYW5kQ29sdW1ucyh0aGlzLmxpc3QoKS5maWx0ZXJTb3J0KGNvbHVtbiA9PiAhY29sdW1uLmlzQ29sdW1uR3JvdXApKVxuICAgICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLm1hdGNoZXNNZWRpYSAmJiBjb2x1bW4uZGlzcGxheVRpdGxlKTtcbiAgICAgICAgcmV0dXJuIG9yZGVyQnkoY29sdW1ucywgW3sgZmllbGQ6ICdsb2NrZWQnLCBkaXI6ICdkZXNjJyB9XSk7XG4gICAgfVxuICAgIGdldCB1bmxvY2tlZFJvb3RDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdCgpLnJvb3RDb2x1bW5zKCkuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmxvY2tlZCAmJiBjb2x1bW4uaXNWaXNpYmxlKS5sZW5ndGg7XG4gICAgfVxuICAgIGluaXQoY29sdW1ucywgbGlzdCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNDb250YWluZXIgPSBjb2x1bW5zO1xuICAgICAgICB0aGlzLmxpc3QgPSBsaXN0O1xuICAgIH1cbiAgICBjaGFuZ2VWaXNpYmlsaXR5KGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlLmVtaXQoY29sdW1ucyk7XG4gICAgfVxuICAgIGNoYW5nZUxvY2tlZChjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMubG9ja2VkQ2hhbmdlLmVtaXQoY29sdW1ucyk7XG4gICAgfVxufVxuQ29sdW1uSW5mb1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTb3J0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuICAgIHNvcnQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQodmFsdWUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgY29sdW1uVmlzaWJpbGl0eUNoYW5nZWAgZXZlbnQuXG4gKi9cbmNsYXNzIENvbHVtblZpc2liaWxpdHlDaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYGNvbHVtbkxvY2tlZENoYW5nZWAgZXZlbnQuXG4gKi9cbmNsYXNzIENvbHVtbkxvY2tlZENoYW5nZUV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29sdW1ucykge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEdST1VQX0NFTExfV0lEVEggPSAzMjsgLy8gdGhpcyBzaG91bGQgYmUgdGhlIHZhbHVlIG9mIGdyb3VwLWNlbGwgaW5zaWRlIHRoZSB0aGVtZSFcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRUcmFja0J5KGluZGV4LCBpdGVtKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGEnICYmIGl0ZW0uaXNFZGl0aW5nKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbn1cblxuY29uc3QgY3JlYXRlQ29udHJvbCA9IChzb3VyY2UpID0+IChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0gbmV3IEZvcm1Db250cm9sKHNvdXJjZVtrZXldKTtcbiAgICByZXR1cm4gYWNjO1xufTtcbmNvbnN0IHZhbGlkYXRlQ29sdW1uc0ZpZWxkID0gKGNvbHVtbnMpID0+IGV4cGFuZENvbHVtbnMoY29sdW1ucy50b0FycmF5KCkpXG4gICAgLmZpbHRlcihpc0NvbHVtbkNvbXBvbmVudClcbiAgICAuZmlsdGVyKCh7IGZpZWxkIH0pID0+ICFpc1ZhbGlkRmllbGROYW1lKGZpZWxkKSlcbiAgICAuZm9yRWFjaCgoeyBmaWVsZCB9KSA9PiBjb25zb2xlLndhcm4oYFxuICAgICAgICAgICAgICAgIEdyaWQgY29sdW1uIGZpZWxkIG5hbWUgJyR7ZmllbGR9JyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuXG4gICAgICAgICAgICAgICAgSWRlbnRpZmllcnMgY2FuIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyAoaW5jbHVkaW5nIFwiJFwiIG9yIFwiX1wiKSwgYW5kIG1heSBub3Qgc3RhcnQgd2l0aCBhIGRpZ2l0LlxuICAgICAgICAgICAgICAgIFBsZWFzZSB1c2Ugb25seSB2YWxpZCBpZGVudGlmaWVyIG5hbWVzIHRvIGVuc3VyZSBlcnJvci1mcmVlIG9wZXJhdGlvbi5cbiAgICAgICAgICAgIGApKTtcbmNvbnN0IGhhbmRsZUV4cGFuZENvbGxhcHNlU2VydmljZSA9IChzZXJ2aWNlLCBleHBhbmRFbWl0dGVyLCBjb2xsYXBzZUVtaXR0ZXIsIG1hcCQkMSkgPT4gKHNlcnZpY2UuY2hhbmdlcy5waXBlKGZpbHRlcigoeyBkYXRhSXRlbSB9KSA9PiBpc1ByZXNlbnQoZGF0YUl0ZW0pKSlcbiAgICAuc3Vic2NyaWJlKCh4KSA9PiB4LmV4cGFuZCA/IGV4cGFuZEVtaXR0ZXIuZW1pdChtYXAkJDEoeCkpIDogY29sbGFwc2VFbWl0dGVyLmVtaXQobWFwJCQxKHgpKSkpO1xuY29uc3QgaXNJbkVkaXRlZENlbGwgPSAoZWxlbWVudCwgZ3JpZEVsZW1lbnQpID0+IGNsb3Nlc3QoZWxlbWVudCwgbWF0Y2hlc0NsYXNzZXMoJ2stZ3JpZC1lZGl0LWNlbGwnKSkgJiZcbiAgICBjbG9zZXN0KGVsZW1lbnQsIG1hdGNoZXNOb2RlTmFtZSgna2VuZG8tZ3JpZCcpKSA9PT0gZ3JpZEVsZW1lbnQ7XG5jb25zdCDJtTQkMiA9IEVNUFRZX0NFTExfQ09OVEVYVDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgR3JpZCBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W10gPSBwcm9kdWN0cztcbiAqIH1cbiAqXG4gKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgfSwge1xuICogICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgfVxuICogXTtcbiAqIGBgYFxuICovXG5jbGFzcyBHcmlkQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzdXBwb3J0U2VydmljZSwgc2VsZWN0aW9uU2VydmljZSwgY2VsbFNlbGVjdGlvblNlcnZpY2UsIHdyYXBwZXIsIGdyb3VwSW5mb1NlcnZpY2UsIGdyb3Vwc1NlcnZpY2UsIGNoYW5nZU5vdGlmaWNhdGlvbiwgZGV0YWlsc1NlcnZpY2UsIGVkaXRTZXJ2aWNlLCBmaWx0ZXJTZXJ2aWNlLCBwZGZTZXJ2aWNlLCByZXNwb25zaXZlU2VydmljZSwgcmVuZGVyZXIsIGV4Y2VsU2VydmljZSwgbmdab25lLCBzY3JvbGxTeW5jU2VydmljZSwgZG9tRXZlbnRzLCBjb2x1bW5SZXNpemluZ1NlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmLCBjb2x1bW5SZW9yZGVyU2VydmljZSwgY29sdW1uSW5mb1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCBzb3J0U2VydmljZSwgc2Nyb2xsUmVxdWVzdFNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLnN1cHBvcnRTZXJ2aWNlID0gc3VwcG9ydFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UgPSBjZWxsU2VsZWN0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy53cmFwcGVyID0gd3JhcHBlcjtcbiAgICAgICAgdGhpcy5ncm91cEluZm9TZXJ2aWNlID0gZ3JvdXBJbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlID0gZ3JvdXBzU2VydmljZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOb3RpZmljYXRpb24gPSBjaGFuZ2VOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2UgPSBkZXRhaWxzU2VydmljZTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSBmaWx0ZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UgPSBwZGZTZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlc3BvbnNpdmVTZXJ2aWNlID0gcmVzcG9uc2l2ZVNlcnZpY2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2UgPSBleGNlbFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlID0gc2Nyb2xsU3luY1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gZG9tRXZlbnRzO1xuICAgICAgICB0aGlzLmNvbHVtblJlc2l6aW5nU2VydmljZSA9IGNvbHVtblJlc2l6aW5nU2VydmljZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZiA9IGNoYW5nZURldGVjdG9yUmVmO1xuICAgICAgICB0aGlzLmNvbHVtblJlb3JkZXJTZXJ2aWNlID0gY29sdW1uUmVvcmRlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UgPSBjb2x1bW5JbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlID0gc29ydFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2Nyb2xsUmVxdWVzdFNlcnZpY2UgPSBzY3JvbGxSZXF1ZXN0U2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGRhdGEgb2YgdGhlIEdyaWQuIElmIGFuIGFycmF5IGlzIHByb3ZpZGVkLCB0aGUgR3JpZCBhdXRvbWF0aWNhbGx5IGdldHMgdGhlIHRvdGFsIGNvdW50XG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBkYXRhYmluZGluZ19ncmlkICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHNjcm9sbCBtb2RlIHVzZWQgYnkgdGhlIEdyaWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICAgICAqICAtIGBub25lYCZtZGFzaDtSZW5kZXJzIG5vIHNjcm9sbGJhci5cbiAgICAgICAgICogIC0gYHNjcm9sbGFibGVgJm1kYXNoO1RoZSBkZWZhdWx0IHNjcm9sbCBtb2RlLiBJdCByZXF1aXJlcyB0aGUgc2V0dGluZyBvZiB0aGUgYGhlaWdodGAgb3B0aW9uLlxuICAgICAgICAgKiAgLSBgdmlydHVhbGAmbWRhc2g7RGlzcGxheXMgbm8gcGFnZXIgYW5kIHJlbmRlcnMgYSBwb3J0aW9uIG9mIHRoZSBkYXRhIChvcHRpbWl6ZWQgcmVuZGVyaW5nKSB3aGlsZSB0aGUgdXNlciBpcyBzY3JvbGxpbmcgdGhlIGNvbnRlbnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUgPSAnc2Nyb2xsYWJsZSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSBzaW5nbGUtcm93IFtzZWxlY3Rpb25dKHslIHNsdWcgc2VsZWN0aW9uX2dyaWQgJX0pIG9mIHRoZSBHcmlkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBob3cgdG8gdHJhY2sgY2hhbmdlcyBmb3IgdGhlIGRhdGEgcm93cy5cbiAgICAgICAgICpcbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIEdyaWQgdHJhY2tzIGNoYW5nZXMgYnkgdGhlIGluZGV4IG9mIHRoZSBkYXRhIGl0ZW0uXG4gICAgICAgICAqIEVkaXRlZCByb3dzIGFyZSB0cmFja2VkIGJ5IHJlZmVyZW5jZS5cbiAgICAgICAgICogSW4gc29tZSBjYXNlcywgeW91IG1pZ2h0IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IsXG4gICAgICAgICAqIGZvciBleGFtcGxlLCB3aGVuIHlvdSBpbXBsZW1lbnQgZWRpdGluZyB3aXRoIGltbXV0YWJsZSBkYXRhIGl0ZW1zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byB0cmFjayBpdGVtcyBvbmx5IGJ5IGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAgICAgICAgICogaW1wb3J0IHsgR3JpZEl0ZW0gfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcbiAgICAgICAgICpcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqICAgIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFt0cmFja0J5XT1cInRyYWNrQnlcIj5cbiAgICAgICAgICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgICAgICogICAgYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdID0gcHJvZHVjdHM7XG4gICAgICAgICAqXG4gICAgICAgICAqICAgIHB1YmxpYyB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IEdyaWRJdGVtKTogYW55IHtcbiAgICAgICAgICogICAgICAgIGNvbnNvbGUubG9nKGl0ZW0pO1xuICAgICAgICAgKiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgKiAgICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICpcbiAgICAgICAgICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICAgICAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICAgICAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICAgICAqICB9LCB7XG4gICAgICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gICAgICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICAgICAgICAgKiAgfVxuICAgICAgICAgKiBdO1xuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHJhY2tCeSA9IGRlZmF1bHRUcmFja0J5O1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGdyaWQgd2lsbCByZW5kZXIgb25seSB0aGUgY29sdW1ucyBpbiB0aGUgY3VycmVudCB2aWV3cG9ydC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmlydHVhbENvbHVtbnMgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgdGhlIFtmaWx0ZXJpbmddKHslIHNsdWcgZmlsdGVyaW5nX2dyaWQgJX0pIG9mIHRoZSBHcmlkIGNvbHVtbnMgdGhhdCBoYXZlIHRoZWlyIGBmaWVsZGAgb3B0aW9uIHNldC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5hYmxlcyB0aGUgW3NvcnRpbmddKHslIHNsdWcgc29ydGluZ19ncmlkICV9KSBvZiB0aGUgR3JpZCBjb2x1bW5zIHRoYXQgaGF2ZSB0aGVpciBgZmllbGRgIG9wdGlvbiBzZXQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25maWd1cmVzIHRoZSBwYWdlciBvZiB0aGUgR3JpZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICAgICAqIC0gYGJ1dHRvbkNvdW50OiBOdW1iZXJgJm1kYXNoO1NldHMgdGhlIG1heGltdW0gbnVtZXJpYyBidXR0b25zIGNvdW50IGJlZm9yZSB0aGUgYnV0dG9ucyBhcmUgY29sbGFwc2VkLlxuICAgICAgICAgKiAtIGBpbmZvOiBCb29sZWFuYCZtZGFzaDtUb2dnbGVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMuXG4gICAgICAgICAqIC0gYHR5cGU6IFBhZ2VyVHlwZWAmbWRhc2g7QWNjZXB0cyB0aGUgYG51bWVyaWNgIChidXR0b25zIHdpdGggbnVtYmVycykgYW5kIGBpbnB1dGAgKGlucHV0IGZvciB0eXBpbmcgdGhlIHBhZ2UgbnVtYmVyKSB2YWx1ZXMuXG4gICAgICAgICAqIC0gYHBhZ2VTaXplczogQm9vbGVhbmAgb3IgYEFycmF5PG51bWJlcj5gJm1kYXNoO1Nob3dzIGEgbWVudSBmb3Igc2VsZWN0aW5nIHRoZSBwYWdlIHNpemUuXG4gICAgICAgICAqIC0gYHByZXZpb3VzTmV4dDogQm9vbGVhbmAmbWRhc2g7VG9nZ2xlcyB0aGUgKipQcmV2aW91cyoqIGFuZCAqKk5leHQqKiBidXR0b25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wYWdlYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHVzZXIgY2FuIGdyb3VwIHRoZSBHcmlkIGJ5IGRyYWdnaW5nIHRoZSBjb2x1bW4gaGVhZGVyIGNlbGxzLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCBncm91cGluZyBpcyBkaXNhYmxlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdyb3VwaW5nYmFzaWNzX2dyaWQgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgdXNlciBjYW4gdXNlIGRlZGljYXRlZCBzaG9ydGN1dHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgR3JpZC5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgbmF2aWdhdGlvbiBpcyBkaXNhYmxlZCBhbmQgdGhlIEdyaWQgY29udGVudCBpcyBhY2Nlc3NpYmxlIGluIHRoZSBub3JtYWwgdGFiIHNlcXVlbmNlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uYXZpZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBHcmlkIGNvbHVtbnMgd2lsbCBiZSByZXNpemVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBzbyB0aGF0XG4gICAgICAgICAqIHRoZXkgZml0IHRoZWlyIGhlYWRlcnMgYW5kIHJvdyBjb250ZW50LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAgICAgKiBDb2x1bW5zIHdpdGggYGF1dG9TaXplYCBzZXQgdG8gYGZhbHNlYCBhcmUgZXhjbHVkZWQuXG4gICAgICAgICAqIFRvIGR5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29sdW1uIHdpZHRoIHRvIG1hdGNoIHRoZSBuZXcgY29udGVudCxcbiAgICAgICAgICogcmVmZXIgdG8gW3RoaXMgZXhhbXBsZV0oeyUgc2x1ZyByZXNpemluZ19jb2x1bW5zX2dyaWQgJX0pLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvU2l6ZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHVzZXIgY2FuIHJlc2l6ZSBjb2x1bW5zIGJ5IGRyYWdnaW5nIHRoZSBlZGdlcyAocmVzaXplIGhhbmRsZXMpIG9mIHRoZWlyIGhlYWRlciBjZWxsc1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlc2l6aW5nX2NvbHVtbnNfZ3JpZCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZXNpemFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB1c2VyIGNhbiByZW9yZGVyIGNvbHVtbnMgYnkgZHJhZ2dpbmcgdGhlaXIgaGVhZGVyIGNlbGxzXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVvcmRlcmluZ19jb2x1bW5zX2dyaWQgJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVvcmRlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgbG9hZGluZyBpbmRpY2F0b3Igb2YgdGhlIEdyaWQgd2lsbCBiZSBkaXNwbGF5ZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRhYmluZGluZ19ncmlkICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgY29sdW1uIG1lbnUgb2YgdGhlIGNvbHVtbnMgd2lsbCBiZSBkaXNwbGF5ZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBjb2x1bW5tZW51X2dyaWQgJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1uTWVudSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBoZWFkZXIgb2YgdGhlIGdyaWQgd2lsbCBiZSBoaWRkZW4uIFRoZSBoZWFkZXIgaXMgdmlzaWJsZSBieSBkZWZhdWx0LlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRoZSBoZWFkZXIgaW5jbHVkZXMgY29sdW1uIGhlYWRlcnMgYW5kIHRoZSBbZmlsdGVyIHJvd10oeyUgc2x1ZyBmaWx0ZXJpbmdfZ3JpZCAlfSN0b2MtZmlsdGVyLXJvdykuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhpZGVIZWFkZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIEdyaWQgZmlsdGVyIGlzIG1vZGlmaWVkIHRocm91Z2ggdGhlIFVJLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGV2ZW50IHlvdXJzZWxmIGFuZCBmaWx0ZXIgdGhlIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHBhZ2Ugb2YgdGhlIEdyaWQgaXMgY2hhbmdlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9KSkuXG4gICAgICAgICAqIFlvdSBoYXZlIHRvIGhhbmRsZSB0aGUgZXZlbnQgeW91cnNlbGYgYW5kIHBhZ2UgdGhlIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBncm91cGluZyBvZiB0aGUgR3JpZCBpcyBjaGFuZ2VkLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGV2ZW50IHlvdXJzZWxmIGFuZCBncm91cCB0aGUgZGF0YSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdyb3VwaW5nYmFzaWNzX2dyaWQgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2UgPSBuZXcgWm9uZUF3YXJlRXZlbnRFbWl0dGVyKHRoaXMubmdab25lKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHNvcnRpbmcgb2YgdGhlIEdyaWQgaXMgY2hhbmdlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNvcnRpbmdfZ3JpZCAlfSkpLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGV2ZW50IHlvdXJzZWxmIGFuZCBzb3J0IHRoZSBkYXRhLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgR3JpZCByb3cuXG4gICAgICAgICAqIEVtaXRzIHRoZSBbYFNlbGVjdGlvbkV2ZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9zZWxlY3Rpb25ldmVudCAlfSN0b2Mtc2VsZWN0aW9uY2hhbmdlKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgZGF0YSBzdGF0ZSBvZiB0aGUgR3JpZCBpcyBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kYXRhU3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGV4cGFuZHMgYSBncm91cCBoZWFkZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwRXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjb2xsYXBzZXMgYSBncm91cCBoZWFkZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwQ29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGV4cGFuZHMgYSBtYXN0ZXIgcm93LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZXRhaWxFeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNvbGxhcHNlcyBhIG1hc3RlciByb3cuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRldGFpbENvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlICoqRWRpdCoqIGNvbW1hbmQgYnV0dG9uIHRvIGVkaXQgYSByb3dcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWVkaXRpbmctcmVjb3JkcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lZGl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlICoqQ2FuY2VsKiogY29tbWFuZCBidXR0b24gdG8gY2xvc2UgYSByb3dcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWNhbmNlbGxpbmctZWRpdGluZykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgKipTYXZlKiogY29tbWFuZCBidXR0b24gdG8gc2F2ZSBjaGFuZ2VzIGluIGEgcm93XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9I3RvYy1zYXZpbmctcmVjb3JkcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlICoqUmVtb3ZlKiogY29tbWFuZCBidXR0b24gdG8gcmVtb3ZlIGEgcm93XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9I3RvYy1yZW1vdmluZy1yZWNvcmRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKkFkZCoqIGNvbW1hbmQgYnV0dG9uIHRvIGFkZCBhIG5ldyByb3dcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWFkZGluZy1yZWNvcmRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFkZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgbGVhdmVzIGFuIGVkaXRlZCBjZWxsIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19pbmNlbGxfZ3JpZCAlfSN0b2MtYmFzaWMtY29uY2VwdHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2VsbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgYSBjZWxsIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19pbmNlbGxfZ3JpZCAlfSN0b2MtYmFzaWMtY29uY2VwdHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2VsbENsaWNrID0gbmV3IFpvbmVBd2FyZUV2ZW50RW1pdHRlcih0aGlzLm5nWm9uZSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgKipFeHBvcnQgdG8gUERGKiogY29tbWFuZCBidXR0b24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBkZkV4cG9ydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKkV4cG9ydCB0byBFeGNlbCoqIGNvbW1hbmQgYnV0dG9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leGNlbEV4cG9ydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIHRoZSByZXNpemluZyBvZiB0aGUgY29sdW1uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemUgPSBuZXcgWm9uZUF3YXJlRXZlbnRFbWl0dGVyKHRoaXMubmdab25lKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY29tcGxldGVzIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBjb2x1bW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbHVtblJlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbHVtbnMgZnJvbSB0aGUgY29sdW1uIG1lbnUgb3IgY29sdW1uIGNob29zZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGxvY2tlZCBzdGF0ZSBvZiB0aGUgY29sdW1ucyBmcm9tIHRoZSBjb2x1bW4gbWVudSBvciBieSByZW9yZGVyaW5nIHRoZSBjb2x1bW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5Mb2NrZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIGxhc3QgcmVjb3JkIG9uIHRoZSBwYWdlIGFuZCBlbmFibGVzIGVuZGxlc3Mgc2Nyb2xsaW5nXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc2Nyb2xsbW1vZGVzX2dyaWQgJX0jdG9jLWVuZGxlc3Mtc2Nyb2xsaW5nKSkuXG4gICAgICAgICAqIFlvdSBoYXZlIHRvIGhhbmRsZSB0aGUgZXZlbnQgeW91cnNlbGYgYW5kIHBhZ2UgdGhlIGRhdGEuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjcm9sbEJvdHRvbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGdyaWQgY29udGVudCBpcyBzY3JvbGxlZC5cbiAgICAgICAgICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgb3V0c2lkZSB0aGUgQW5ndWxhciB6b25lLiBFbnRlciB0aGUgQW5ndWxhciB6b25lIGlmIHlvdSBtYWtlIGFueSBjaGFuZ2VzIHRoYXQgcmVxdWlyZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb250ZW50U2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBxdWVyeSBsaXN0IG9mIGFsbCBkZWNsYXJlZCBjb2x1bW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmZvb3RlciA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25EaXJlY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyID0gbmV3IENvbHVtbnNDb250YWluZXIoKCkgPT4gdGhpcy5jb2x1bW5MaXN0LmZpbHRlckhpZXJhcmNoeShjb2x1bW4gPT4ge1xuICAgICAgICAgICAgY29sdW1uLm1hdGNoZXNNZWRpYSA9IHRoaXMubWF0Y2hlc01lZGlhKGNvbHVtbik7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uLmlzVmlzaWJsZTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgRGF0YUNvbGxlY3Rpb24oKCkgPT4gbmV3IERhdGFSZXN1bHRJdGVyYXRvcih0aGlzLmRhdGEsIHRoaXMuc2tpcCwgdGhpcy5oYXNHcm91cEZvb3RlcnMpKTtcbiAgICAgICAgdGhpcy5zaG91bGRHZW5lcmF0ZUNvbHVtbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zb3J0ID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHRoaXMuX2dyb3VwID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHRoaXMuX3NraXAgPSAwO1xuICAgICAgICB0aGlzLmNhY2hlZFdpbmRvd1dpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fcm93U2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jZWxsU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICB0aGlzLnJ0bCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yb3dDbGFzcyA9ICgpID0+IG51bGw7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJ0bCA9IHJ0bDtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5ydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cEluZm9TZXJ2aWNlLnJlZ2lzdGVyQ29sdW1uc0NvbnRhaW5lcigoKSA9PiB0aGlzLmNvbHVtbkxpc3QpO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLmluaXQodGhpcy5jb2x1bW5zQ29udGFpbmVyLCAoKSA9PiB0aGlzLmNvbHVtbkxpc3QpO1xuICAgICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLnZpc2liaWxpdHlDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2VkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2UuZW1pdChuZXcgQ29sdW1uVmlzaWJpbGl0eUNoYW5nZUV2ZW50KGNoYW5nZWQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29sdW1uTG9ja2VkQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jb2x1bW5JbmZvU2VydmljZS5sb2NrZWRDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2VkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxvY2tlZENoYW5nZS5lbWl0KG5ldyBDb2x1bW5Mb2NrZWRDaGFuZ2VFdmVudChjaGFuZ2VkKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwRXhwYW5kQ29sbGFwc2VTdWJzY3JpcHRpb24gPSBoYW5kbGVFeHBhbmRDb2xsYXBzZVNlcnZpY2UoZ3JvdXBzU2VydmljZSwgdGhpcy5ncm91cEV4cGFuZCwgdGhpcy5ncm91cENvbGxhcHNlLCAoeyBkYXRhSXRlbTogZ3JvdXAsIGluZGV4IH0pID0+ICh7IGdyb3VwLCBncm91cEluZGV4OiBpbmRleCB9KSk7XG4gICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2VTdWJzY3JpcHRpb24gPSBoYW5kbGVFeHBhbmRDb2xsYXBzZVNlcnZpY2UoZGV0YWlsc1NlcnZpY2UsIHRoaXMuZGV0YWlsRXhwYW5kLCB0aGlzLmRldGFpbENvbGxhcHNlLCBhcmdzID0+IGFyZ3MpO1xuICAgICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24gPSB0aGlzLnNvcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF0dGFjaFN0YXRlQ2hhbmdlc0VtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hFZGl0SGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hEb21FdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMucGRmU3Vic2NyaXB0aW9uID0gdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydENsaWNrLnN1YnNjcmliZSh0aGlzLmVtaXRQREZFeHBvcnRFdmVudC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5leGNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuZXhjZWxTZXJ2aWNlLmV4cG9ydENsaWNrLnN1YnNjcmliZSh0aGlzLnNhdmVBc0V4Y2VsLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmNvbHVtbnNDb250YWluZXJDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDb2x1bW5SZXNpemUoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0ID0gbmV3IENvbHVtbkxpc3QodGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5SZW9yZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5jb2x1bW5SZW9yZGVyU2VydmljZVxuICAgICAgICAgICAgLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMucmVvcmRlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5SYW5nZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY29sdW1uUmFuZ2VDaGFuZ2Uuc3Vic2NyaWJlKHRoaXMub25Db2x1bW5SYW5nZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJlY29yZHMgdG8gYmUgc2tpcHBlZCBieSB0aGUgcGFnZXIuXG4gICAgICogUmVxdWlyZWQgYnkgdGhlIFtwYWdpbmddKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0pIGZ1bmN0aW9uYWxpdHkuXG4gICAgICovXG4gICAgZ2V0IHNraXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9za2lwO1xuICAgIH1cbiAgICBzZXQgc2tpcCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2tpcCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBkZXNjcmlwdG9ycyBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIHNvcnRlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNvcnRpbmdfZ3JpZCAlfSkpLlxuICAgICAqL1xuICAgIHNldCBzb3J0KHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fc29ydCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGRlc2NyaXB0b3JzIGJ5IHdoaWNoIHRoZSBkYXRhIHdpbGwgYmUgZ3JvdXBlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdyb3VwaW5nYmFzaWNzX2dyaWQgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZ3JvdXAodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqL1xuICAgIGdldCBncm91cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHNob3dUb3BUb29sYmFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyVGVtcGxhdGUgJiYgWyd0b3AnLCAnYm90aCddLmluZGV4T2YodGhpcy50b29sYmFyVGVtcGxhdGUucG9zaXRpb24pID4gLTE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc2hvd0JvdHRvbVRvb2xiYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2xiYXJUZW1wbGF0ZSAmJiBbJ2JvdHRvbScsICdib3RoJ10uaW5kZXhPZih0aGlzLnRvb2xiYXJUZW1wbGF0ZS5wb3NpdGlvbikgPiAtMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc0xvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzaG93UGFnZXIoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1ZpcnR1YWwgJiYgdGhpcy5wYWdlYWJsZSAhPT0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc2hvd0dyb3VwUGFuZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwYWJsZSAmJiB0aGlzLmdyb3VwYWJsZS5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBncm91cGFibGVFbXB0eVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwYWJsZS5lbXB0eVRleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbWFycXVlZVNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5lbmFibGVNYXJxdWVlIHx8IHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UuZW5hYmxlTWFycXVlZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQW4gYWxpYXMgZm9yIGBuYXZpZ2FibGVgIGZvciB1c2VycyB3aG8gbWlncmF0ZSBmcm9tIEtlbmRvIFVJIGZvciBqUXVlcnkuXG4gICAgICovXG4gICAgc2V0IG5hdmlnYXRhYmxlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhYmxlID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbmF2aWdhdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgZm9yIGV2ZXJ5IGRhdGEgcm93IGluIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgICAqIGltcG9ydCB7IFJvd0NsYXNzQXJncyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xuICAgICAqXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgICAqICAgIHN0eWxlczogW2BcbiAgICAgKiAgICAgICAgLmstZ3JpZCB0ci5ldmVuIHsgYmFja2dyb3VuZC1jb2xvcjogI2Y0NWM0MjsgfVxuICAgICAqICAgICAgICAuay1ncmlkIHRyLm9kZCB7IGJhY2tncm91bmQtY29sb3I6ICM0MWY0ZGY7IH1cbiAgICAgKiAgICBgXSxcbiAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFtyb3dDbGFzc109XCJyb3dDYWxsYmFja1wiPlxuICAgICAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gICAgICogICAgYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdID0gcHJvZHVjdHM7XG4gICAgICpcbiAgICAgKiAgICBwdWJsaWMgcm93Q2FsbGJhY2soY29udGV4dDogUm93Q2xhc3NBcmdzKSB7XG4gICAgICogICAgICAgIGNvbnN0IGlzRXZlbiA9IGNvbnRleHQuaW5kZXggJSAyID09IDA7XG4gICAgICogICAgICAgIHJldHVybiB7XG4gICAgICogICAgICAgICAgICBldmVuOiBpc0V2ZW4sXG4gICAgICogICAgICAgICAgICBvZGQ6ICFpc0V2ZW5cbiAgICAgKiAgICAgICAgfTtcbiAgICAgKiAgICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAgICAgKiAgfSwge1xuICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICAgICAqICB9XG4gICAgICogXTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXQgcm93Q2xhc3MoZm4pIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSAmJiB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcm93Q2xhc3MgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzID0gZm47XG4gICAgfVxuICAgIGdldCByb3dDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgQm9vbGVhbiBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGZvciBlYWNoIGRhdGEgcm93IGluIHRoZSBjb21wb25lbnRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNlbGVjdGlvbl9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1zZWxlY3RlZC1yb3dzKSkuXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByb3cgd2lsbCBiZSBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBzZXQgcm93U2VsZWN0ZWQoZm4pIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSAmJiB0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgcm93U2VsZWN0ZWQgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGVkID0gZm47XG4gICAgfVxuICAgIGdldCByb3dTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiBhIGRhdGEgY2VsbC5cbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGBzZWxlY3RlZGAgYW5kIGBpdGVtYCBwcm9wZXJ0aWVzLlxuICAgICAqIFRoZSBjZWxsIGlzIG1hcmtlZCBhcyBzZWxlY3RlZCBvbmx5IGlmIHRoZSBgc2VsZWN0ZWRgIHByb3BlcnR5IGVxdWFscyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggZGF0YSBjZWxsIGFuZCBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlXG4gICAgICogYXMgcGFydCBvZiBhIGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUuIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ3JpZF9zZWxlY3Rpb25fY3VzdG9tICV9dG9jLXNldHRpbmctdGhlLXNlbGVjdGVkLWNlbGxzKSlcbiAgICAgKi9cbiAgICBzZXQgY2VsbFNlbGVjdGVkKGZuKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUgJiYgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNlbGxTZWxlY3RlZCBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KGZuKX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2VsbFNlbGVjdGVkID0gZm47XG4gICAgfVxuICAgIGdldCBjZWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jZWxsU2VsZWN0ZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGNlbGwgKGlmIGFueSkuXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZUNlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGl2ZUNlbGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHJvdyAoaWYgYW55KS5cbiAgICAgKi9cbiAgICBnZXQgYWN0aXZlUm93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3RpdmVSb3c7XG4gICAgfVxuICAgIGdldCBkaXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGxvY2tlZENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGdldCB2aXJ0dWFsQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXJ0dWFsO1xuICAgIH1cbiAgICBnZXQgbm9TY3JvbGxiYXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYmFyV2lkdGggPT09IDA7XG4gICAgfVxuICAgIGdldCBkZXRhaWxUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbURldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tRGV0YWlsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsVGVtcGxhdGVDaGlsZHJlbiA/IHRoaXMuZGV0YWlsVGVtcGxhdGVDaGlsZHJlbi5maXJzdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0IGRldGFpbFRlbXBsYXRlKGRldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbURldGFpbFRlbXBsYXRlID0gZGV0YWlsVGVtcGxhdGU7XG4gICAgfVxuICAgIGdldCBub1JlY29yZHNUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbU5vUmVjb3Jkc1RlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tTm9SZWNvcmRzVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9SZWNvcmRzVGVtcGxhdGVDaGlsZHJlbiA/IHRoaXMubm9SZWNvcmRzVGVtcGxhdGVDaGlsZHJlbi5maXJzdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0IG5vUmVjb3Jkc1RlbXBsYXRlKGN1c3RvbU5vUmVjb3Jkc1RlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbU5vUmVjb3Jkc1RlbXBsYXRlID0gY3VzdG9tTm9SZWNvcmRzVGVtcGxhdGU7XG4gICAgfVxuICAgIGdldCBwYWdlclRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VzdG9tUGFnZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbVBhZ2VyVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXJUZW1wbGF0ZUNoaWxkcmVuID8gdGhpcy5wYWdlclRlbXBsYXRlQ2hpbGRyZW4uZmlyc3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldCBwYWdlclRlbXBsYXRlKGN1c3RvbVBhZ2VyVGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tUGFnZXJUZW1wbGF0ZSA9IGN1c3RvbVBhZ2VyVGVtcGxhdGU7XG4gICAgfVxuICAgIGdldCB0b29sYmFyVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXN0b21Ub29sYmFyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21Ub29sYmFyVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhclRlbXBsYXRlQ2hpbGRyZW4gPyB0aGlzLnRvb2xiYXJUZW1wbGF0ZUNoaWxkcmVuLmZpcnN0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXQgdG9vbGJhclRlbXBsYXRlKGN1c3RvbVRvb2xiYXJUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLl9jdXN0b21Ub29sYmFyVGVtcGxhdGUgPSBjdXN0b21Ub29sYmFyVGVtcGxhdGU7XG4gICAgfVxuICAgIGdldCBzY3JvbGxiYXJXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VwcG9ydFNlcnZpY2Uuc2Nyb2xsYmFyV2lkdGg7XG4gICAgfVxuICAgIGdldCBoZWFkZXJQYWRkaW5nKCkge1xuICAgICAgICBpZiAoaXNVbml2ZXJzYWwoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KDAsIHRoaXMuc2Nyb2xsYmFyV2lkdGggLSAxKSArICdweCc7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5ydGwgPyAwIDogcGFkZGluZztcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMucnRsID8gcGFkZGluZyA6IDA7XG4gICAgICAgIHJldHVybiBgMCAke3JpZ2h0fSAwICR7bGVmdH1gO1xuICAgIH1cbiAgICBnZXQgaGFzR3JvdXBGb290ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmhhc0dyb3VwRm9vdGVyO1xuICAgIH1cbiAgICBnZXQgc2hvd0Zvb3RlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5oYXNGb290ZXI7XG4gICAgfVxuICAgIGdldCBzaG93R3JvdXBGb290ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cGFibGUgJiYgdGhpcy5ncm91cGFibGUuc2hvd0Zvb3RlcjtcbiAgICB9XG4gICAgZ2V0IGFyaWFSb3dDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxDb2x1bW5MZXZlbHMgKyAxICsgdGhpcy52aWV3LnRvdGFsO1xuICAgIH1cbiAgICBnZXQgYXJpYUNvbENvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmxlYWZDb2x1bW5zVG9SZW5kZXIubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgaXNWaXJ0dWFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JvbGxhYmxlID09PSAndmlydHVhbCc7XG4gICAgfVxuICAgIGdldCBpc1Njcm9sbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbGFibGUgIT09ICdub25lJztcbiAgICB9XG4gICAgZ2V0IHZpc2libGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmFsbENvbHVtbnM7XG4gICAgfVxuICAgIGdldCBsb2NrZWRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmxvY2tlZENvbHVtbnM7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZENvbHVtbnM7XG4gICAgfVxuICAgIGdldCBsb2NrZWRMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5sb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IG5vbkxvY2tlZExlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZExlYWZDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIubGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCB0b3RhbENvbHVtbkxldmVscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci50b3RhbExldmVscztcbiAgICB9XG4gICAgZ2V0IGhlYWRlckNvbHVtbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxDb2x1bW5zICYmICF0aGlzLnBkZlNlcnZpY2UuZXhwb3J0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3cG9ydENvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9uTG9ja2VkQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IGhlYWRlckxlYWZDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucyAmJiAhdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVhZlZpZXdwb3J0Q29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub25Mb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IGxvY2tlZFdpZHRoKCkge1xuICAgICAgICBjb25zdCBncm91cENlbGxzV2lkdGggPSB0aGlzLmdyb3VwLmxlbmd0aCAqIEdST1VQX0NFTExfV0lEVEg7XG4gICAgICAgIHJldHVybiBleHBhbmRDb2x1bW5zKHRoaXMubG9ja2VkTGVhZkNvbHVtbnMudG9BcnJheSgpKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAoY3Vyci53aWR0aCB8fCAwKSwgZ3JvdXBDZWxsc1dpZHRoKTtcbiAgICB9XG4gICAgZ2V0IG5vbkxvY2tlZFdpZHRoKCkge1xuICAgICAgICBpZiAoKCF0aGlzLnJ0bCAmJiB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCkgfHwgdGhpcy52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZpcnR1YWxDb2x1bW5zID8gdGhpcy5jb2x1bW5zQ29udGFpbmVyLnVubG9ja2VkV2lkdGggOlxuICAgICAgICAgICAgICAgIHRoaXMubGVhZlZpZXdwb3J0Q29sdW1ucy5yZWR1Y2UoKGFjYywgY29sdW1uKSA9PiBhY2MgKyAoY29sdW1uLndpZHRoIHx8IDApLCAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0YWJsZVNldHRpbmdzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbk1lbnVUZW1wbGF0ZSgpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmNvbHVtbk1lbnVUZW1wbGF0ZXMuZmlyc3Q7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSA/IHRlbXBsYXRlLnRlbXBsYXRlUmVmIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IHRvdGFsQ291bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmlydHVhbCB8fCAhaXNQcmVzZW50KHRoaXMucGFnZVNpemUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aWV3LnRvdGFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIHRoZSBzcGVjaWZpZWQgbWFzdGVyIHJvdyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGhpZXJhcmNoeV9ncmlkICV9KSkuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSB2ZXJzaW9ucy5cbiAgICAgKiBUaGVzZSB2ZXJzaW9ucyB0cmFja2VkIHRoZSBleHBhbmRlZCBzdGF0ZSBpbnRlcm5hbGx5IHVzaW5nIHRoZSBkYXRhIHJvdyBpbmRleC5cbiAgICAgKlxuICAgICAqIEZvciBuZXcgZGV2ZWxvcG1lbnQsIHVzZSB0aGUgW2BrZW5kb0dyaWREZXRhaWxzRXhwYW5kQnlgIGRpcmVjdGl2ZV0oeyUgc2x1ZyBhcGlfZ3JpZF9leHBhbmRkZXRhaWxzZGlyZWN0aXZlICV9KVxuICAgICAqIG9yIHByb3ZpZGUgYW4gaXNEZXRhaWxFeHBhbmRlZCBjYWxsYmFjay4gU2VlIFtDb250cm9sbGluZyB0aGUgRXhwYW5kZWQgU3RhdGVdKHslIHNsdWcgbWFzdGVyX2RldGFpbF9leHBhbmRlZF9zdGF0ZV9ncmlkICV9KVxuICAgICAqIGZvciBleGFtcGxlcyBvbiBob3cgdG8gY29udHJvbCB0aGUgZXhwYW5kZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgZGF0YSByb3cgaW5kZXggb2YgdGhlIG1hc3RlciByb3cuXG4gICAgICovXG4gICAgZXhwYW5kUm93KGluZGV4KSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRGV0YWlsUm93TGVnYWN5KGluZGV4LCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBzcGVjaWZpZWQgbWFzdGVyIHJvdyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGhpZXJhcmNoeV9ncmlkICV9KSkuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSB2ZXJzaW9ucy5cbiAgICAgKiBUaGVzZSB2ZXJzaW9ucyB0cmFja2VkIHRoZSBleHBhbmRlZCBzdGF0ZSBpbnRlcm5hbGx5IHVzaW5nIHRoZSBkYXRhIHJvdyBpbmRleC5cbiAgICAgKlxuICAgICAqIEZvciBuZXcgZGV2ZWxvcG1lbnQsIHVzZSB0aGUgW2BrZW5kb0dyaWREZXRhaWxzRXhwYW5kQnlgIGRpcmVjdGl2ZV0oeyUgc2x1ZyBhcGlfZ3JpZF9leHBhbmRkZXRhaWxzZGlyZWN0aXZlICV9KVxuICAgICAqIG9yIHByb3ZpZGUgYW4gaXNEZXRhaWxFeHBhbmRlZCBjYWxsYmFjay4gU2VlIFtDb250cm9sbGluZyB0aGUgRXhwYW5kZWQgU3RhdGVdKHslIHNsdWcgbWFzdGVyX2RldGFpbF9leHBhbmRlZF9zdGF0ZV9ncmlkICV9KVxuICAgICAqIGZvciBleGFtcGxlcyBvbiBob3cgdG8gY29udHJvbCB0aGUgZXhwYW5kZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgZGF0YSByb3cgaW5kZXggb2YgdGhlIG1hc3RlciByb3cuXG4gICAgICovXG4gICAgY29sbGFwc2VSb3coaW5kZXgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVEZXRhaWxSb3dMZWdhY3koaW5kZXgsIGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwYW5kcyBhIGdyb3VwIGhlYWRlciBpdGVtIGZvciB0aGUgZ2l2ZW4gaW5kZXguIEZvciBleGFtcGxlLFxuICAgICAqIGAwXzFgIGV4cGFuZHMgdGhlIHNlY29uZCBpbm5lciBncm91cCBvZiB0aGUgZmlyc3QgbWFzdGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogPiAqIFdoZW4geW91IHVzZSB0aGUgW2BrZW5kb0dyaWRHcm91cEJpbmRpbmdgXSh7JSBzbHVnIGFwaV9ncmlkX2dyb3VwYmluZGluZ2RpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLFxuICAgICAqID4gdGhlIGBleHBhbmRHcm91cGAgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgICogPiAqIFdoZW4gYSBHcmlkIGlzIHBhZ2VhYmxlLCB0aGUgaW5kZXhlcyBvZiB0aGUgZ3JvdXBzIGFyZSBvZmZzZXQgYnkgdGhlIGN1cnJlbnQgR3JpZCBbYHNraXBgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLXNraXApLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGluZGV4IC0gVGhlIHVuZGVyc2NvcmUgc2VwYXJhdGVkIGhpZXJhcmNoaWNhbCBpbmRleCBvZiB0aGUgZ3JvdXAuXG4gICAgICovXG4gICAgZXhwYW5kR3JvdXAoaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyb3Vwc1NlcnZpY2UuaXNFeHBhbmRlZChpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS50b2dnbGVSb3coaW5kZXgsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyBhIGdyb3VwIGhlYWRlciBpdGVtIGZvciB0aGUgZ2l2ZW4gaW5kZXguIEZvciBleGFtcGxlLFxuICAgICAqIGAwXzFgIGNvbGxhcHNlcyB0aGUgc2Vjb25kIGlubmVyIGdyb3VwIG9mIHRoZSBmaXJzdCBtYXN0ZXIgZ3JvdXAuXG4gICAgICpcbiAgICAgKiA+ICogV2hlbiB5b3UgdXNlIHRoZSBbYGtlbmRvR3JpZEdyb3VwQmluZGluZ2BdKHslIHNsdWcgYXBpX2dyaWRfZ3JvdXBiaW5kaW5nZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUsXG4gICAgICogPiB0aGUgYGNvbGxhcHNlR3JvdXBgIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqID4gKiBXaGVuIGEgR3JpZCBpcyBwYWdlYWJsZSwgdGhlIGluZGV4ZXMgb2YgdGhlIGdyb3VwcyBhcmUgb2Zmc2V0IGJ5IHRoZSBjdXJyZW50IEdyaWQgW2Bza2lwYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1za2lwKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleCAtIFRoZSB1bmRlcnNjb3JlIHNlcGFyYXRlZCBoaWVyYXJjaGljYWwgaW5kZXggb2YgdGhlIGdyb3VwLlxuICAgICAqL1xuICAgIGNvbGxhcHNlR3JvdXAoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzU2VydmljZS5pc0V4cGFuZGVkKGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnRvZ2dsZVJvdyhpbmRleCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlc2V0R3JvdXBzU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5yZXNldCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZXhwYW5kR3JvdXBDaGlsZHJlbihncm91cEluZGV4KSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5leHBhbmRDaGlsZHJlbihncm91cEluZGV4KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uRGF0YUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hdXRvR2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uLm5vdGlmeSgpO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UuZGF0YUNoYW5nZWQuZW1pdCgpO1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuZGVmYXVsdFNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGlvbi5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdFNlbGVjdGlvblNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uTWV0YWRhdGEoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwiZGF0YVwiLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggJiYgYW55Q2hhbmdlZChbXCJwYWdlU2l6ZVwiLCBcInNraXBcIiwgXCJzb3J0XCIsIFwiZ3JvdXBcIl0sIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU5vdGlmaWNhdGlvbi5ub3RpZnkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW55Q2hhbmdlZChbXCJwYWdlU2l6ZVwiLCBcInNjcm9sbGFibGVcIiwgJ3ZpcnR1YWxDb2x1bW5zJ10sIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25NZXRhZGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQoXCJ2aXJ0dWFsQ29sdW1uc1wiLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3cG9ydENvbHVtbnMgPSB0aGlzLmxlYWZWaWV3cG9ydENvbHVtbnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQoXCJoZWlnaHRcIiwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7dGhpcy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwiZmlsdGVyYWJsZVwiLCBjaGFuZ2VzKSAmJiB0aGlzLmxvY2tlZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNIZWFkZXJIZWlnaHQodGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFueUNoYW5nZWQoW1wiY29sdW1uTWVudVwiLCBcInNvcnRhYmxlXCIsIFwiZmlsdGVyYWJsZVwiXSwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1lbnVPcHRpb25zID0gdGhpcy5jb2x1bW5NZW51ICYmIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGZpbHRlcjogQm9vbGVhbih0aGlzLmZpbHRlcmFibGUpLFxuICAgICAgICAgICAgICAgIHNvcnQ6IEJvb2xlYW4odGhpcy5zb3J0YWJsZSlcbiAgICAgICAgICAgIH0sIHRoaXMuY29sdW1uTWVudSk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwic2Nyb2xsYWJsZVwiLCBjaGFuZ2VzKSAmJiB0aGlzLmlzU2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hdHRhY2hTY3JvbGxTeW5jKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQoXCJzZWxlY3RhYmxlXCIsIGNoYW5nZXMpICYmIHRoaXMuc2hvdWxkUmVzZXRTZWxlY3Rpb24oY2hhbmdlcy5zZWxlY3RhYmxlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGlvbi5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25EaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRpcmVjdGl2ZS5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hTY3JvbGxTeW5jKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoRWxlbWVudEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uTWV0YWRhdGEoKTtcbiAgICAgICAgdGhpcy5hcHBseUF1dG9TaXplKCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyLnJlZnJlc2goKTtcbiAgICAgICAgdGhpcy52ZXJpZnlTZXR0aW5ncygpO1xuICAgICAgICB0aGlzLmluaXRTZWxlY3Rpb25TZXJ2aWNlKCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zaG91bGRHZW5lcmF0ZUNvbHVtbnMgPSAhdGhpcy5jb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hdXRvR2VuZXJhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdCA9IG5ldyBDb2x1bW5MaXN0KHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29sdW1ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZlcmlmeVNldHRpbmdzKCkpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmluaXQodGhpcy5uYXZpZ2F0aW9uTWV0YWRhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGF0ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwRXhwYW5kQ29sbGFwc2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFeHBhbmRDb2xsYXBzZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRldGFpbHNTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFpbHNTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWRpdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZGZTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGRmU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNvcnRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc29ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnNDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4Y2VsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4Y2VsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uc0NvbnRhaW5lckNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRldGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0aW9uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9vdGVyQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uUmVzaXppbmdTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uUmVzaXppbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2x1bW5SZW9yZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblJlb3JkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uVmlzaWJpbGl0eUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTG9ja2VkQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxvY2tlZENoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzRWxlbWVudFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtblJhbmdlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhdHRhY2hTY3JvbGxTeW5jKCkge1xuICAgICAgICBpZiAoaXNVbml2ZXJzYWwoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhlYWRlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZS5yZWdpc3RlckVtaXR0ZXIodGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudCwgXCJoZWFkZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9vdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlckNoYW5nZVN1YnNjcmlwdGlvbiA9IG9ic2VydmUodGhpcy5mb290ZXIpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShmb290ZXJzID0+IGZvb3RlcnNcbiAgICAgICAgICAgICAgICAubWFwKGZvb3RlciA9PiBmb290ZXIubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgICAgICAgICAgICAuZm9yRWFjaChlbGVtZW50ID0+IHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UucmVnaXN0ZXJFbWl0dGVyKGVsZW1lbnQsIFwiZm9vdGVyXCIpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogU3dpdGNoZXMgdGhlIHNwZWNpZmllZCB0YWJsZSByb3cgaW4gdGhlIGVkaXQgbW9kZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfdGVtcGxhdGVfZm9ybXNfZ3JpZCAlfSN0b2MtZWRpdGluZy1yZWNvcmRzKSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggLSBUaGUgZGF0YSByb3cgaW5kZXggdGhhdCB3aWxsIGJlIHN3aXRjaGVkIGluIHRoZSBlZGl0IG1vZGUuXG4gICAgICogQHBhcmFtIGdyb3VwIC0gVGhlIFtgRm9ybUdyb3VwYF0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnZm9ybWdyb3VwYXBpJ10gfX0pXG4gICAgICogdGhhdCBkZXNjcmliZXMgdGhlIGVkaXQgZm9ybS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBjb25maWd1cmluZyB0aGUgZm9jdXMgdGFyZ2V0IG9uY2UgdGhlIGVkaXRvciBvcGVucy5cbiAgICAgKi9cbiAgICBlZGl0Um93KHJvd0luZGV4LCBncm91cCwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmVkaXRSb3cocm93SW5kZXgsIGdyb3VwKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudChvcHRpb25zKSAmJiBvcHRpb25zLnNraXBGb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IGB0cltkYXRhLWtlbmRvLWdyaWQtaXRlbS1pbmRleD1cIiR7cm93SW5kZXh9XCJdYDtcbiAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBvcHRpb25zICYmIG9wdGlvbnMuY29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzTmFOKGNvbHVtbkluZGV4KSA/IHJvdyA6IGAke3Jvd30gdGRbZGF0YS1rZW5kby1ncmlkLWNvbHVtbi1pbmRleD1cIiR7Y29sdW1uSW5kZXh9XCJdYDtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRFbGVtZW50KHRhcmdldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZWRpdG9yIGZvciBhIGdpdmVuIHJvdyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfdGVtcGxhdGVfZm9ybXNfZ3JpZCAlfSN0b2MtY2FuY2VsbGluZy1lZGl0aW5nKSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgcm93IGluZGV4IHRoYXQgd2lsbCBiZSBzd2l0Y2hlZCBvdXQgb2YgdGhlIGVkaXQgbW9kZS4gSWYgbm8gaW5kZXggaXMgcHJvdmlkZWQsIGl0IGlzIGFzc3VtZWRcbiAgICAgKiB0aGF0IHRoZSBuZXcgaXRlbSBlZGl0b3Igd2lsbCBiZSBjbG9zZWQuXG4gICAgICovXG4gICAgY2xvc2VSb3coaW5kZXgpIHtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5jbG9zZShpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm93IGVkaXRvciAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfdGVtcGxhdGVfZm9ybXNfZ3JpZCAlfSN0b2MtYWRkaW5nLXJlY29yZHMpKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBncm91cCAtIFRoZSBbYEZvcm1Hcm91cGBdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ2Zvcm1ncm91cGFwaSddIH19KSB0aGF0IGRlc2NyaWJlc1xuICAgICAqIHRoZSBlZGl0IGZvcm0uIElmIGNhbGxlZCB3aXRoIGEgZGF0YSBpdGVtLCBpdCB3aWxsIGJ1aWxkIHRoZSBgRm9ybUdyb3VwYCBmcm9tIHRoZSBkYXRhIGl0ZW0gZmllbGRzLlxuICAgICAqL1xuICAgIGFkZFJvdyhncm91cCkge1xuICAgICAgICBjb25zdCBpc0Zvcm1Hcm91cCA9IGdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwO1xuICAgICAgICBpZiAoIWlzRm9ybUdyb3VwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhncm91cCkucmVkdWNlKGNyZWF0ZUNvbnRyb2woZ3JvdXApLCB7fSk7IC8vIEZvcm1CdWlsZGVyP1xuICAgICAgICAgICAgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKGZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5hZGRSb3coZ3JvdXApO1xuICAgICAgICB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoJy5rLWdyaWQtYWRkLXJvdycpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQdXRzIHRoZSBjZWxsIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IHRoZSB0YWJsZSByb3cgYW5kIGNvbHVtbiBpbiBlZGl0IG1vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93SW5kZXggLSBUaGUgZGF0YSByb3cgaW5kZXggdGhhdCB3aWxsIGJlIHN3aXRjaGVkIGluIHRoZSBlZGl0IG1vZGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfGFueX0gY29sdW1uIC0gVGhlIGxlYWYgY29sdW1uIGluZGV4LCBvciB0aGUgZmllbGQgbmFtZSBvciB0aGUgY29sdW1uIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIGVkaXRlZC5cbiAgICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZ3JvdXAgLSBUaGUgW2BGb3JtR3JvdXBgXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWydmb3JtZ3JvdXBhcGknXSB9fSlcbiAgICAgKiB0aGF0IGRlc2NyaWJlcyB0aGUgZWRpdCBmb3JtLlxuICAgICAqL1xuICAgIGVkaXRDZWxsKHJvd0luZGV4LCBjb2x1bW4sIGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb2x1bW5JbnN0YW5jZShjb2x1bW4pO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmVkaXRDZWxsKHJvd0luZGV4LCBpbnN0YW5jZSwgZ3JvdXApO1xuICAgICAgICB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoJy5rLWdyaWQtZWRpdC1jZWxsJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY3VycmVudCBjZWxsIGluIGVkaXQgbW9kZSBhbmQgZmlyZXNcbiAgICAgKiB0aGUgW2BjZWxsQ2xvc2VgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLWNlbGxjbG9zZSkgZXZlbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZWRpdGVkIGNlbGwgd2FzIGNsb3NlZC5cbiAgICAgKiBBIGBmYWxzZWAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlXG4gICAgICogW2BjZWxsQ2xvc2VgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLWNlbGxjbG9zZSkgZXZlbnQgd2FzIHByZXZlbnRlZC5cbiAgICAgKi9cbiAgICBjbG9zZUNlbGwoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lZGl0U2VydmljZS5jbG9zZUNlbGwoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjdXJyZW50IGNlbGwgaW4gZWRpdCBtb2RlLlxuICAgICAqL1xuICAgIGNhbmNlbENlbGwoKSB7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY2FuY2VsQ2VsbCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZmxhZyB3aGljaCBpbmRpY2F0ZXMgaWYgYSByb3cgb3IgYSBjZWxsIGlzIGN1cnJlbnRseSBlZGl0ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIGEgcm93IG9yIGEgY2VsbCBpcyBjdXJyZW50bHkgZWRpdGVkLlxuICAgICAqL1xuICAgIGlzRWRpdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiBhIGNlbGwgaXMgY3VycmVudGx5IGVkaXRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgZmxhZyB3aGljaCBpbmRpY2F0ZXMgaWYgYSBjZWxsIGlzIGN1cnJlbnRseSBiZWluZyBlZGl0ZWQuXG4gICAgICovXG4gICAgaXNFZGl0aW5nQ2VsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nQ2VsbCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZXMgdGhlIFBERiBleHBvcnQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwZGZleHBvcnRfZ3JpZCAlfSkpLlxuICAgICAqL1xuICAgIHNhdmVBc1BERigpIHtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlLnNhdmUodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cG9ydHMgdGhlIEdyaWQgZWxlbWVudCB0byBhIERyYXdpbmcgW2BHcm91cGBdKHslIHNsdWcgYXBpX2tlbmRvLWRyYXdpbmdfZ3JvdXAgJX0pIGJ5IHVzaW5nIHRoZSBga2VuZG8tZ3JpZC1wZGZgIGNvbXBvbmVudCBvcHRpb25zLlxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGRmZXhwb3J0X2dyaWQgJX0jdG9jLWV4cG9ydGluZy1tdWx0aXBsZS1ncmlkcy10by10aGUtc2FtZS1wZGYpKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSBEcmF3aW5nIGBHcm91cGAuXG4gICAgICovXG4gICAgZHJhd1BERigpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZVByb21pc2UoKTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlLmRyYXcodGhpcywgcHJvbWlzZSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZXMgdGhlIEV4Y2VsIGV4cG9ydCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGV4Y2VsZXhwb3J0X2dyaWQgJX0pKS5cbiAgICAgKi9cbiAgICBzYXZlQXNFeGNlbCgpIHtcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2Uuc2F2ZSh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgbWluaW11bSBwb3NzaWJsZSB3aWR0aCBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4sXG4gICAgICogc28gdGhhdCB0aGUgd2hvbGUgdGV4dCBmaXRzIHdpdGhvdXQgd3JhcHBpbmcuIFRoaXMgbWV0aG9kIGV4cGVjdHMgdGhlIEdyaWRcbiAgICAgKiB0byBiZSByZXNpemFibGUgKHNldCBgcmVzaXphYmxlYCB0byBgdHJ1ZWApLlxuICAgICAqIE1ha2VzIHNlbnNlIHRvIGV4ZWN1dGUgdGhpcyBtZXRob2Qgb25seVxuICAgICAqIGFmdGVyIHRoZSBHcmlkIGlzIGFscmVhZHkgcG9wdWxhdGVkIHdpdGggZGF0YS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgIHRlbXBsYXRlOiBgXG4gICAgICogICAgICAgIDxrZW5kby1ncmlkXG4gICAgICogICAgICAgICAgICAjZ3JpZFxuICAgICAqICAgICAgICAgICAgW2RhdGFdPVwiZ3JpZERhdGFcIlxuICAgICAqICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcbiAgICAgKiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMDBweFwiPlxuICAgICAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cImdyaWQuYXV0b0ZpdENvbHVtbihncm91cENvbHVtbilcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIEF1dG8tZml0IHRoZSBncm91cCBjb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLWdyb3VwICNncm91cENvbHVtbiB0aXRsZT1cIlByb2R1Y3QgSW5mb1wiPlxuICAgICAqICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgICAgICBmaWVsZD1cIlByb2R1Y3RJRFwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI1MFwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCIzMFwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSURcIj5cbiAgICAgKiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgICAgIGZpZWxkPVwiUHJvZHVjdE5hbWVcIlxuICAgICAqICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICAgICAqICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uLWdyb3VwPlxuICAgICAqXG4gICAgICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICBmaWVsZD1cIlVuaXRQcmljZVwiXG4gICAgICogICAgICAgICAgICAgICAgdGl0bGU9XCJVbml0IFByaWNlXCJcbiAgICAgKiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTgwXCJcbiAgICAgKiAgICAgICAgICAgICAgICBmaWx0ZXI9XCJudW1lcmljXCJcbiAgICAgKiAgICAgICAgICAgICAgICBmb3JtYXQ9XCJ7MDpjfVwiPlxuICAgICAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICAgICAqICAgIGBcbiAgICAgKiB9KVxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IHByb2R1Y3RzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICogIH0sIHtcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgKiAgfVxuICAgICAqIF07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXV0b0ZpdENvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemluZ1NlcnZpY2UuYXV0b0ZpdChjb2x1bW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGp1c3RzIHRoZSB3aWR0aCBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbnMgdG8gZml0IHRoZSBlbnRpcmUgY29udGVudCwgaW5jbHVkaW5nIGhlYWRlcnMsIHdpdGhvdXQgd3JhcHBpbmcuXG4gICAgICogSWYgbm8gY29sdW1ucyBhcmUgc3BlY2lmaWVkLCBgYXV0b0ZpdENvbHVtbnNgIGlzIGFwcGxpZWQgdG8gYWxsIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgR3JpZCB0byBiZSByZXNpemFibGUgKHNldCBgcmVzaXphYmxlYCB0byBgdHJ1ZWApLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgIDxrZW5kby1ncmlkXG4gICAgICogICAgICAgICAgI2dyaWRcbiAgICAgKiAgICAgICAgICBbZGF0YV09XCJncmlkRGF0YVwiXG4gICAgICogICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcbiAgICAgKiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzAwcHhcIj5cbiAgICAgKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICAgICAqICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiay1idXR0b25cIiAoY2xpY2spPVwiZ3JpZC5hdXRvRml0Q29sdW1ucyhbZmlyc3RDb2x1bW4sIGxhc3RDb2x1bW5dKVwiPlxuICAgICAqICAgICAgICAgICAgICAgICAgQXV0by1maXQgdGhlIGZpcnN0IGFuZCBsYXN0IGNvbHVtblxuICAgICAqICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgKiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cImdyaWQuYXV0b0ZpdENvbHVtbnMoKVwiPlxuICAgICAqICAgICAgICAgICAgICAgICAgQXV0by1maXQgYWxsIGNvbHVtbnNcbiAgICAgKiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4tZ3JvdXAgdGl0bGU9XCJQcm9kdWN0IEluZm9cIj5cbiAgICAgKiAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgICAjZmlyc3RDb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICAgIGZpZWxkPVwiUHJvZHVjdElEXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI1MFwiXG4gICAgICogICAgICAgICAgICAgICAgICBbbWluUmVzaXphYmxlV2lkdGhdPVwiMzBcIlxuICAgICAqICAgICAgICAgICAgICAgICAgdGl0bGU9XCJJRFwiPlxuICAgICAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqXG4gICAgICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgICAgZmllbGQ9XCJQcm9kdWN0TmFtZVwiXG4gICAgICogICAgICAgICAgICAgICAgICB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiXG4gICAgICogICAgICAgICAgICAgICAgICA+XG4gICAgICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbi1ncm91cD5cbiAgICAgKlxuICAgICAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAjbGFzdENvbHVtblxuICAgICAqICAgICAgICAgICAgICBmaWVsZD1cIlVuaXRQcmljZVwiXG4gICAgICogICAgICAgICAgICAgIHRpdGxlPVwiVW5pdCBQcmljZVwiXG4gICAgICogICAgICAgICAgICAgIFt3aWR0aF09XCIxODBcIlxuICAgICAqICAgICAgICAgICAgICBmaWx0ZXI9XCJudW1lcmljXCJcbiAgICAgKiAgICAgICAgICAgICAgZm9ybWF0PVwiezA6Y31cIj5cbiAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgPC9rZW5kby1ncmlkPlxuICAgICAqICAgIGBcbiAgICAgKiB9KVxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IHByb2R1Y3RzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICogIH0sIHtcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgKiAgfVxuICAgICAqIF07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXV0b0ZpdENvbHVtbnMoY29sdW1ucyA9IHRoaXMuY29sdW1ucykge1xuICAgICAgICBsZXQgY29scztcbiAgICAgICAgaWYgKGNvbHVtbnMgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgICAgICAgIGNvbHMgPSBjb2x1bW5zLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbHMgPSBjb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXppbmdTZXJ2aWNlLmF1dG9GaXQoLi4uY29scyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBub3RpZnlQYWdlQ2hhbmdlKHNvdXJjZSwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gXCJsaXN0XCIgJiYgIXRoaXMuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbm90aWZ5U2Nyb2xsQm90dG9tKCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxhYmxlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMuc2Nyb2xsQm90dG9tKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc2Nyb2xsQm90dG9tLmVtaXQoeyBzZW5kZXI6IHRoaXMgfSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmb2N1c0VkaXRFbGVtZW50KGNvbnRhaW5lclNlbGVjdG9yKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzRWxlbWVudFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRWxlbWVudFN1YnNjcmlwdGlvbiA9IHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldEVkaXRGb2N1cyh3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoY29udGFpbmVyU2VsZWN0b3IpKSAmJiB0aGlzLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RWRpdEZvY3VzKHdyYXBwZXIucXVlcnlTZWxlY3RvcihgLmstZ3JpZC1jb250ZW50ICR7Y29udGFpbmVyU2VsZWN0b3J9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzRWxlbWVudFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIGxhc3QgYWN0aXZlIG9yIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSBHcmlkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge05hdmlnYXRpb25DZWxsfSBUaGUgZm9jdXNlZCBjZWxsLlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICB0aGlzLmFzc2VydE5hdmlnYWJsZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb2N1c0NlbGwoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgY2VsbCB3aXRoIHRoZSBzcGVjaWZpZWQgcm93IGFuZCBjb2x1bW4gaW5kZXguXG4gICAgICpcbiAgICAgKiBUaGUgcm93IGluZGV4IGlzIGJhc2VkIG9uIHRoZSBsb2dpY2FsIHN0cnVjdHVyZSBvZiB0aGUgR3JpZCBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgZGF0YSBpdGVtIGluZGV4OlxuICAgICAqICogSGVhZGVyIHJvd3MgYXJlIGluY2x1ZGVkLCBzdGFydGluZyBhdCBpbmRleCAwLlxuICAgICAqICogR3JvdXAgaGVhZGVycyBhbmQgZm9vdGVycyBhcmUgaW5jbHVkZWQuXG4gICAgICogKiBUaGUgcm93IGluZGV4aW5nIGlzIGFic29sdXRlIGFuZCBkb2VzIG5vdCBjaGFuZ2Ugd2l0aCBwYWdpbmcuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgR3JpZCBpcyBjb25maWd1cmVkIGZvciBzY3JvbGxpbmcsIGluY2x1ZGluZyB2aXJ0dWFsIHNjcm9sbGluZywgdGhlIHNjcm9sbCBwb3NpdGlvbiB3aWxsIGJlIHVwZGF0ZWQuXG4gICAgICogSWYgdGhlIHJvdyBpcyBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBwYWdlLCB0aGUgbWV0aG9kIHdpbGwgaGF2ZSBubyBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93SW5kZXggLSBUaGUgbG9naWNhbCByb3cgaW5kZXggdG8gZm9jdXMuIFRoZSB0b3AgaGVhZGVyIHJvdyBoYXMgYW4gaW5kZXggMC5cbiAgICAgKiBAcGFyYW0gY29sSW5kZXggLSBUaGUgY29sdW1uIGluZGV4IHRvIGZvY3VzLlxuICAgICAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uQ2VsbH0gVGhlIGZvY3VzZWQgY2VsbC5cbiAgICAgKlxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpIHtcbiAgICAgICAgdGhpcy5hc3NlcnROYXZpZ2FibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNDZWxsKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIG5leHQgY2VsbCwgb3B0aW9uYWxseSB3cmFwcGluZyB0byB0aGUgbmV4dCByb3cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd3JhcCAtIEEgQm9vbGVhbiB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGZvY3VzIHdpbGwgbW92ZSB0byB0aGUgbmV4dCByb3cuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKiBAcmV0dXJucyB7TmF2aWdhdGlvbkNlbGx9IFRoZSBmb2N1c2VkIGNlbGwuIElmIHRoZSBmb2N1cyBpcyBhbHJlYWR5IG9uIHRoZSBsYXN0IGNlbGwsIHJldHVybnMgYG51bGxgLlxuICAgICAqL1xuICAgIGZvY3VzTmV4dENlbGwod3JhcCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3NlcnROYXZpZ2FibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNOZXh0Q2VsbCh3cmFwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgcHJldmlvdXMgY2VsbC4gT3B0aW9uYWxseSB3cmFwcyB0byB0aGUgcHJldmlvdXMgcm93LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdyYXAgLSBBIEJvb2xlYW4gdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmb2N1cyB3aWxsIG1vdmUgdG8gdGhlIG5leHQgcm93LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICogQHJldHVybnMge05hdmlnYXRpb25DZWxsfSBUaGUgZm9jdXNlZCBjZWxsLiBJZiB0aGUgZm9jdXMgaXMgYWxyZWFkeSBvbiB0aGUgZmlyc3QgY2VsbCwgcmV0dXJucyBgbnVsbGAuXG4gICAgICovXG4gICAgZm9jdXNQcmV2Q2VsbCh3cmFwID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmFzc2VydE5hdmlnYWJsZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb2N1c1ByZXZDZWxsKHdyYXApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIHRvIHRoZSBzcGVjaWZpZWQgcm93IGFuZCBjb2x1bW5cbiAgICAgKi9cbiAgICBzY3JvbGxUbyhyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsUmVxdWVzdFNlcnZpY2Uuc2Nyb2xsVG8ocmVxdWVzdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uLlxuICAgICAqIFRoZSByZW9yZGVyaW5nIG9mIGNvbHVtbnMgb3BlcmF0ZXMgb25seSBvbiB0aGUgbGV2ZWxcbiAgICAgKiB3aGljaCBpcyBpbmZlcnJlZCBieSB0aGUgc291cmNlIGNvbHVtbi5cbiAgICAgKiBGb3IgdGhlIGByZW9yZGVyQ29sdW1uYCBtZXRob2QgdG8gd29yayBwcm9wZXJseSxcbiAgICAgKiB0aGUgYHNvdXJjZWAgY29sdW1uIGhhcyB0byBiZSB2aXNpYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb2x1bW5CYXNlfSBzb3VyY2UgLSBUaGUgY29sdW1uIHdob3NlIHBvc2l0aW9uIHdpbGwgYmUgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVzdEluZGV4IC0gVGhlIG5ldyBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7Q29sdW1uUmVvcmRlckNvbmZpZ30gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgIHRlbXBsYXRlOiBgXG4gICAgICogICAgICAgIDxrZW5kby1ncmlkXG4gICAgICogICAgICAgICAgICAjZ3JpZFxuICAgICAqICAgICAgICAgICAgW2RhdGFdPVwiZ3JpZERhdGFcIlxuICAgICAqICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxuICAgICAqICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwMHB4XCI+XG4gICAgICogICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICAgICAqICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiay1idXR0b25cIlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdyaWQucmVvcmRlckNvbHVtbihncm91cENvbHVtbiwgMiwgeyBiZWZvcmU6IHRydWUgfSlcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIE1vdmUgdGhlIGdyb3VwIGNvbHVtbiBiZWZvcmUgdGhlIGxhc3Qgb25lLlxuICAgICAqICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgKiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4tZ3JvdXAgI2dyb3VwQ29sdW1uIHRpdGxlPVwiUHJvZHVjdCBJbmZvXCI+XG4gICAgICogICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgICAgIGZpZWxkPVwiUHJvZHVjdElEXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjUwXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJJRFwiPlxuICAgICAqICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJQcm9kdWN0TmFtZVwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gICAgICogICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4tZ3JvdXA+XG4gICAgICpcbiAgICAgKiAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgIGZpZWxkPVwiVW5pdFByaWNlXCJcbiAgICAgKiAgICAgICAgICAgICAgICB0aXRsZT1cIlVuaXQgUHJpY2VcIlxuICAgICAqICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxODBcIlxuICAgICAqICAgICAgICAgICAgICAgIGZvcm1hdD1cInswOmN9XCI+XG4gICAgICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqXG4gICAgICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICBmaWVsZD1cIkRpc2NvbnRpbnVlZFwiXG4gICAgICogICAgICAgICAgICAgICAgdGl0bGU9XCJEaXNjb250aW51ZWRcIlxuICAgICAqICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMDBcIj5cbiAgICAgKiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgKiAgICBgXG4gICAgICogfSlcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W10gPSBwcm9kdWN0cztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAqICB9LCB7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMixcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlb3JkZXJDb2x1bW4oc291cmNlLCBkZXN0SW5kZXgsIG9wdGlvbnMgPSB7IGJlZm9yZTogZmFsc2UgfSkge1xuICAgICAgICBjb25zdCBjb2x1bW5zRm9yTGV2ZWwgPSB0aGlzLmNvbHVtbnNGb3JMZXZlbChzb3VyY2UubGV2ZWwpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gY29sdW1uc0ZvckxldmVsW2Rlc3RJbmRleF07XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdE5vbkxvY2tlZCA9IHRhcmdldC5pc0xvY2tlZCAmJlxuICAgICAgICAgICAgIXNvdXJjZS5pc0xvY2tlZCAmJlxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZENvbHVtbnMubGVuZ3RoID09PSAxO1xuICAgICAgICBpZiAobGFzdE5vbkxvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NwYW5Db2x1bW5Db21wb25lbnQodGFyZ2V0KSAmJiAhb3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5jaGlsZENvbHVtbnMubGFzdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlb3JkZXIoe1xuICAgICAgICAgICAgYmVmb3JlOiBvcHRpb25zLmJlZm9yZSxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gd2hpY2ggZGV0ZXJtaW5lcyBpZiBhIHNwZWNpZmljIHJvdyBpcyBleHBhbmRlZC5cbiAgICAgKi9cbiAgICBzZXQgaXNEZXRhaWxFeHBhbmRlZChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmRldGFpbHNTZXJ2aWNlLnVzZXJDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICBnZXQgaXNEZXRhaWxFeHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsc1NlcnZpY2UudXNlckNhbGxiYWNrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVvcmRlcih7IHRhcmdldCwgc291cmNlLCBiZWZvcmUsIGNoYW5nZUNvbnRhaW5lciB9KSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zRm9yTGV2ZWwgPSB0aGlzLmNvbHVtbnNGb3JMZXZlbChzb3VyY2UubGV2ZWwpO1xuICAgICAgICAgICAgbGV0IG5ld0luZGV4ID0gY29sdW1uc0ZvckxldmVsLmluZGV4T2YodGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQucGFyZW50ICYmIHRhcmdldC5wYXJlbnQuaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV3SW5kZXggPSBjb2x1bW5zRm9yTGV2ZWwuaW5kZXhPZih0YXJnZXQucGFyZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG9sZEluZGV4ID0gY29sdW1uc0ZvckxldmVsLmluZGV4T2Yoc291cmNlKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlICYmIDAgPCBuZXdJbmRleCAmJiBvbGRJbmRleCA8IG5ld0luZGV4KSB7IC8vIGRyb3BwZWQgYmVmb3JlIHRoZSBmaXJzdCBub3QgbG9ja2VkIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICBuZXdJbmRleC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghYmVmb3JlICYmIG9sZEluZGV4ID4gbmV3SW5kZXgpIHsgLy8gZHJvcHBlZCBhZnRlciB0aGUgbGFzdCBsb2NrZWQgY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIG5ld0luZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXJncyA9IG5ldyBDb2x1bW5SZW9yZGVyRXZlbnQoe1xuICAgICAgICAgICAgICAgIGNvbHVtbjogc291cmNlLFxuICAgICAgICAgICAgICAgIG9sZEluZGV4OiBvbGRJbmRleCxcbiAgICAgICAgICAgICAgICBuZXdJbmRleDogbmV3SW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5SZW9yZGVyLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkxvY2tlZENoYW5nZS5lbWl0KG5ldyBDb2x1bW5Mb2NrZWRDaGFuZ2VFdmVudChbc291cmNlXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5JbmRpY2VzKHsgc291cmNlLCB0YXJnZXQsIGJlZm9yZSB9KTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UubG9ja2VkICE9PSB0YXJnZXQubG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLmxvY2tlZCA9IHRhcmdldC5sb2NrZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNDb250YWluZXIucmVmcmVzaCgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUNvbHVtbkluZGljZXMoeyBzb3VyY2UsIHRhcmdldCwgYmVmb3JlIH0pIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRDb2x1bW5zID0gZXhwYW5kQ29sdW1uc1dpdGhTcGFuKHRoaXMuY29sdW1uc0ZvckxldmVsKHNvdXJjZS5sZXZlbCkpO1xuICAgICAgICBjb25zdCBzb3VyY2VDb2x1bW5JbmRleCA9IGV4cGFuZGVkQ29sdW1ucy5pbmRleE9mKHNvdXJjZSk7XG4gICAgICAgIGxldCBuZXh0U291cmNlSW5kZXggPSAwO1xuICAgICAgICBsZXQgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHRvU2tpcCA9IDE7XG4gICAgICAgIC8vIFBvc3NpYmxlIG9ubHkgd2hlbiBjYWxsZWQgZnJvbSB0aGUgQVBJLlxuICAgICAgICBpZiAoc291cmNlLmlzU3BhbkNvbHVtbikge1xuICAgICAgICAgICAgdG9Ta2lwICs9IHNvdXJjZS5jaGlsZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBleHBhbmRlZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gZXhwYW5kZWRDb2x1bW5zW2ldO1xuICAgICAgICAgICAgaWYgKGNvbHVtbiA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgbmV4dFNvdXJjZUluZGV4ID0gYmVmb3JlID8gbmV4dEluZGV4IDogbmV4dEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSBiZWZvcmUgPyBuZXh0SW5kZXggKyB0b1NraXAgOiBuZXh0SW5kZXg7XG4gICAgICAgICAgICAgICAgY29sdW1uLm9yZGVySW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRTb3VyY2VJbmRleCA9PT0gbmV4dEluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXggKz0gdG9Ta2lwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbiA9PT0gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaSArPSB0b1NraXA7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ub3JkZXJJbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRJbmRleCsrO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IHNvdXJjZUNvbHVtbkluZGV4OyBpIDwgc291cmNlQ29sdW1uSW5kZXggKyB0b1NraXA7IGkrKykge1xuICAgICAgICAgICAgZXhwYW5kZWRDb2x1bW5zW2ldLm9yZGVySW5kZXggPSBuZXh0U291cmNlSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUluZGljZXNGb3JMZXZlbChzb3VyY2UubGV2ZWwgKyAxKTtcbiAgICB9XG4gICAgdXBkYXRlSW5kaWNlc0ZvckxldmVsKGxldmVsKSB7XG4gICAgICAgIGNvbnN0IGNvbHNGb3JQYXJlbnRMZXZlbCA9IHRoaXMuY29sdW1uc0ZvckxldmVsKGxldmVsIC0gMSk7XG4gICAgICAgIGNvbnN0IGNvbHNGb3JMZXZlbCA9IFtdO1xuICAgICAgICBzb3J0Q29sdW1ucyhjb2xzRm9yUGFyZW50TGV2ZWwpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGlmIChjLmlzQ29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICBjb2xzRm9yTGV2ZWwucHVzaCguLi5jLmNoaWxkcmVuQXJyYXkuc29ydCgoYSwgYikgPT4gYS5vcmRlckluZGV4IC0gYi5vcmRlckluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBleHBhbmRDb2x1bW5zV2l0aFNwYW4oY29sc0ZvckxldmVsKS5tYXAoKGMsIGkpID0+IGMub3JkZXJJbmRleCA9IGkpO1xuICAgICAgICBpZiAobGV2ZWwgPCB0aGlzLmNvbHVtbnNDb250YWluZXIudG90YWxMZXZlbHMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5kaWNlc0ZvckxldmVsKGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sdW1uc0ZvckxldmVsKGxldmVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXJcbiAgICAgICAgICAgIC5hbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmxldmVsID09PSBsZXZlbCk7XG4gICAgfVxuICAgIGluaXRTZWxlY3Rpb25TZXJ2aWNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm5nT25EZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlLm5nT25EZXN0cm95KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkRpcmVjdGl2ZSAmJiAhaXNQcmVzZW50KHRoaXMuZGVmYXVsdFNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24odGhpcywgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbFNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGFibGVbJ2NlbGwnXTtcbiAgICAgICAgY29uc3QgYWN0aXZlU2VydmljZSA9IGNlbGxTZWxlY3Rpb25Nb2RlID8gdGhpcy5jZWxsU2VsZWN0aW9uU2VydmljZSA6IHRoaXMuc2VsZWN0aW9uU2VydmljZTtcbiAgICAgICAgY29uc3QgaW5hY3RpdmVTZXJ2aWNlID0gY2VsbFNlbGVjdGlvbk1vZGUgPyB0aGlzLnNlbGVjdGlvblNlcnZpY2UgOiB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlO1xuICAgICAgICBpZiAoaW5hY3RpdmVTZXJ2aWNlLmFjdGl2ZSkge1xuICAgICAgICAgICAgaW5hY3RpdmVTZXJ2aWNlLm5nT25EZXN0cm95KCk7XG4gICAgICAgICAgICBhY3RpdmVTZXJ2aWNlLmFkZFN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGluYWN0aXZlU2VydmljZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVTZXJ2aWNlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGFjdGl2ZVNlcnZpY2UuaW5pdCh7XG4gICAgICAgICAgICBjZWxsU2VsZWN0ZWQ6IGNlbGxTZWxlY3Rpb25Nb2RlID8gdGhpcy5jZWxsU2VsZWN0ZWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICByb3dTZWxlY3RlZDogY2VsbFNlbGVjdGlvbk1vZGUgPyB1bmRlZmluZWQgOiB0aGlzLnJvd1NlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgdmlldzogdGhpcy52aWV3LFxuICAgICAgICAgICAgY29sdW1uczogY2VsbFNlbGVjdGlvbk1vZGUgPyB0aGlzLmNvbHVtbkxpc3QudG9BcnJheSgpIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uRGlyZWN0aXZlICYmICF0aGlzLnNlbGVjdGFibGVTZXR0aW5ncy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3Rpb24ucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxTZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEVkaXRGb2N1cyhlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS50cnlGb2N1cyhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2x1bW5JbnN0YW5jZShjb2x1bW4pIHtcbiAgICAgICAgbGV0IGluc3RhbmNlO1xuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5jb25jYXQodGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKSlbY29sdW1uXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmZpZWxkID09PSBjb2x1bW4pWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBjb2x1bW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnN0YW5jZSAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbHVtbiAke2NvbHVtbn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICAgIHZlcmlmeVNldHRpbmdzKCkge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2tlZCA9IHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoIHx8ICh0aGlzLmNvbHVtbk1lbnUgJiYgdGhpcy5jb2x1bW5NZW51LmxvY2spO1xuICAgICAgICAgICAgaWYgKGxvY2tlZCAmJiB0aGlzLmRldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIYXZpbmcgYm90aCBkZXRhaWwgdGVtcGxhdGUgYW5kIGxvY2tlZCBjb2x1bW5zIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggJiYgIXRoaXMubm9uTG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIG5vbi1sb2NrZWQgY29sdW1uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKGxvY2tlZCB8fCB0aGlzLnZpcnR1YWxDb2x1bW5zKSAmJiBleHBhbmRDb2x1bW5zKHRoaXMuY29sdW1uTGlzdC50b0FycmF5KCkpLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi53aWR0aCAmJiAhaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGxvY2tlZCA/ICdMb2NrZWQnIDogJ1ZpcnR1YWwnKSArICcgY29sdW1ucyBmZWF0dXJlIHJlcXVpcmVzIGFsbCBjb2x1bW5zIHRvIGhhdmUgc2V0IHdpZHRoLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvY2tlZCAmJiAhdGhpcy5pc1Njcm9sbGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2tlZCBjb2x1bW5zIGFyZSBvbmx5IHN1cHBvcnRlZCB3aGVuIHNjcm9sbGluZyBpcyBlbmFibGVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdC5maWx0ZXIoaXNDb2x1bW5Hcm91cENvbXBvbmVudCkuZmlsdGVyKCh4KSA9PiAheC5oYXNDaGlsZHJlbikubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5Hcm91cENvbXBvbmVudCBzaG91bGQgY29udGFpbiBDb2x1bW5Db21wb25lbnQgb3IgQ29tbWFuZENvbHVtbkNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKHggPT4geC5sb2NrZWQgJiYgeC5wYXJlbnQgJiYgIXgucGFyZW50LmlzTG9ja2VkKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2tlZCBjaGlsZCBjb2x1bW5zIHJlcXVpcmUgdGhlaXIgcGFyZW50IGNvbHVtbnMgdG8gYmUgbG9ja2VkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLnJvd0hlaWdodCB8fCB0aGlzLmRldGFpbFJvd0hlaWdodCkgJiYgIXRoaXMuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaGVpZ2h0IGFuZCBkZXRhaWwgcm93IGhlaWdodCBzZXR0aW5ncyByZXF1aXJlIHZpcnR1YWwgc2Nyb2xsaW5nIG1vZGUgdG8gYmUgZW5hYmxlZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRlQ29sdW1uc0ZpZWxkKHRoaXMuY29sdW1uTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXV0b0dlbmVyYXRlQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkR2VuZXJhdGVDb2x1bW5zICYmICF0aGlzLmNvbHVtbnMubGVuZ3RoICYmIHRoaXMudmlldy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5yZXNldChPYmplY3Qua2V5cyh0aGlzLnZpZXcuYXQoMCkpLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbiA9IG5ldyBDb2x1bW5Db21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0dGFjaFN0YXRlQ2hhbmdlc0VtaXR0ZXIoKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VTdWJzY3JpcHRpb24gPVxuICAgICAgICAgICAgbWVyZ2UodGhpcy5wYWdlQ2hhbmdlLnBpcGUobWFwKHggPT4gKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVyLCBncm91cDogdGhpcy5ncm91cCwgc2tpcDogeC5za2lwLCBzb3J0OiB0aGlzLnNvcnQsIHRha2U6IHgudGFrZVxuICAgICAgICAgICAgfSkpKSwgdGhpcy5zb3J0Q2hhbmdlLnBpcGUobWFwKHNvcnQgPT4gKHsgZmlsdGVyOiB0aGlzLmZpbHRlciwgZ3JvdXA6IHRoaXMuZ3JvdXAsIHNraXA6IHRoaXMuc2tpcCwgc29ydDogc29ydCwgdGFrZTogdGhpcy5wYWdlU2l6ZSB9KSkpLCB0aGlzLmdyb3VwQ2hhbmdlLnBpcGUobWFwKGdyb3VwID0+ICh7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlciwgZ3JvdXA6IGdyb3VwLCBza2lwOiB0aGlzLnNraXAsIHNvcnQ6IHRoaXMuc29ydCwgdGFrZTogdGhpcy5wYWdlU2l6ZVxuICAgICAgICAgICAgfSkpKSwgdGhpcy5maWx0ZXJDaGFuZ2UucGlwZShtYXAoZmlsdGVyJCQxID0+ICh7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIkJDEsIGdyb3VwOiB0aGlzLmdyb3VwLCBza2lwOiAwLCBzb3J0OiB0aGlzLnNvcnQsIHRha2U6IHRoaXMucGFnZVNpemVcbiAgICAgICAgICAgIH0pKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2VsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2VsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVN0YXRlQ2hhbmdlLmVtaXQoeCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgYXR0YWNoRWRpdEhhbmRsZXJzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5lZGl0U2VydmljZVxuICAgICAgICAgICAgLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuZW1pdENSVURFdmVudC5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgZW1pdENSVURFdmVudChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgYWN0aW9uLCByb3dJbmRleCwgZm9ybUdyb3VwIH0gPSBhcmdzO1xuICAgICAgICBsZXQgZGF0YUl0ZW0gPSB0aGlzLnZpZXcuYXQocm93SW5kZXggLSB0aGlzLnNraXApO1xuICAgICAgICBpZiAoYWN0aW9uICE9PSAnYWRkJyAmJiAhZGF0YUl0ZW0pIHtcbiAgICAgICAgICAgIGRhdGFJdGVtID0gZm9ybUdyb3VwLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xvc2VDZWxsKCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXJncywge1xuICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtLFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFkZC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2FuY2VsJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZWRpdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0LmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmUnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzYXZlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmUuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NlbGxDbG9zZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsQ2xvc2UuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0dGFjaERvbUV2ZW50SGFuZGxlcnMoKSB7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uID0gdGhpcy5kb21FdmVudHMuY2VsbENsaWNrLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2suZW1pdChPYmplY3QuYXNzaWduKHsgc2VuZGVyOiB0aGlzIH0sIGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGF0dGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKCkge1xuICAgICAgICBpZiAoaXNVbml2ZXJzYWwoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXJpYVJvb3QgPSB0aGlzLmFyaWFSb290Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZUNoZWNrID0gdGhpcy5yZXNpemVDaGVjay5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgcmVzaXplU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCByZXNpemVDaGVjayk7XG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCByZXNpemVDaGVjayk7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudENsaWNrU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0U2VydmljZS5zaG91bGRDbG9zZUNlbGwoKSAmJlxuICAgICAgICAgICAgICAgICAgICAhY2xvc2VzdChhcmdzLnRhcmdldCwgbWF0Y2hlc0NsYXNzZXMoJ2stYW5pbWF0aW9uLWNvbnRhaW5lciBrLWdyaWQtaWdub3JlLWNsaWNrJykpICYmXG4gICAgICAgICAgICAgICAgICAgICEoYWN0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3QoYWN0aXZlRWxlbWVudCwgbWF0Y2hlc0NsYXNzZXMoJ2stYW5pbWF0aW9uLWNvbnRhaW5lcicpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5FZGl0ZWRDZWxsKGFjdGl2ZUVsZW1lbnQsIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY2xvc2VDZWxsKGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgd2luZG93Qmx1clN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnYmx1cicsIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgIShtYXRjaGVzTm9kZU5hbWUoJ2lucHV0JykoYWN0aXZlRWxlbWVudCkgJiYgYWN0aXZlRWxlbWVudC50eXBlID09PSAnZmlsZScgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNJbkVkaXRlZENlbGwoYWN0aXZlRWxlbWVudCwgdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmNsb3NlQ2VsbChhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMud2luZG93Qmx1ci5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHdyYXBwZXIsICdjbGljaycsIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMuY2xpY2suZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qga2V5ZG93blN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHdyYXBwZXIsICdrZXlkb3duJywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5rZXlkb3duLmVtaXQoYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGZvY3VzSW4gYW5kIGZvY3VzT3V0IGFyZSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCB3aXRoIEFSSUEgcm9sZSBcImdyaWRcIlxuICAgICAgICAgICAgbGV0IGZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzSW5TdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihhcmlhUm9vdCwgJ2ZvY3VzaW4nLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvY3VzLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvY3VzSW4uZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c091dFN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGFyaWFSb290LCAnZm9jdXNvdXQnLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBhcmdzLnJlbGF0ZWRUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRzaWRlID0gIWNsb3Nlc3QobmV4dCwgKG5vZGUpID0+IG5vZGUgPT09IGFyaWFSb290KTtcbiAgICAgICAgICAgICAgICBpZiAob3V0c2lkZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb2N1c091dC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRDbGlja1N1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIHdpbmRvd0JsdXJTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBjbGlja1N1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIGtleWRvd25TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBmb2N1c0luU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgZm9jdXNPdXRTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXRjaGVzTWVkaWEoYykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaXZlU2VydmljZS5tYXRjaGVzTWVkaWEoYy5tZWRpYSk7XG4gICAgfVxuICAgIHJlc2l6ZUNoZWNrKCkge1xuICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggIT09IHRoaXMuY2FjaGVkV2luZG93V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkV2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgICAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxpc3QuZmlsdGVySGllcmFyY2h5KGNvbHVtbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlc01lZGlhID0gdGhpcy5tYXRjaGVzTWVkaWEoY29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm1hdGNoZXNNZWRpYSAhPT0gbWF0Y2hlc01lZGlhKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ubWF0Y2hlc01lZGlhID0gbWF0Y2hlc01lZGlhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmlzVmlzaWJsZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRQREZFeHBvcnRFdmVudCgpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IG5ldyBQREZFeHBvcnRFdmVudCgpO1xuICAgICAgICB0aGlzLnBkZkV4cG9ydC5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFzUERGKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3luY0hlYWRlckhlaWdodChvYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gaXNQcmVzZW50KHRoaXMubG9ja2VkSGVhZGVyKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHN5bmNSb3dzSGVpZ2h0KHRoaXMubG9ja2VkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0sIHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0pKTtcbiAgICB9XG4gICAgY29sdW1uc0NvbnRhaW5lckNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyQ2hhbmdlU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgIHRoaXMuc3luY0hlYWRlckhlaWdodCh0aGlzLmNvbHVtbnNDb250YWluZXIuY2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmxvY2tlZENvbHVtbnMubGVuZ3RoID4gMCksIHN3aXRjaE1hcCgoKSA9PiB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpKSkpO1xuICAgIH1cbiAgICBoYW5kbGVDb2x1bW5SZXNpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc2l6ZXMgPSB0aGlzLmNvbHVtblJlc2l6aW5nU2VydmljZS5jaGFuZ2VzO1xuICAgICAgICB0aGlzLmNvbHVtblJlc2l6aW5nU3Vic2NyaXB0aW9uID0gcmVzaXplcy5waXBlKHRhcChlID0+IHtcbiAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1ncmlkLWNvbHVtbi1yZXNpemluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZS50eXBlID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLWdyaWQtY29sdW1uLXJlc2l6aW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICdzdGFydCcpLCBzd2l0Y2hNYXAoKCkgPT4gcmVzaXplcy5waXBlKFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHJ4anMtbm8tdW5zYWZlLXRha2V1bnRpbFxuICAgICAgICB0YWtlVW50aWwocmVzaXplcy5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3RyaWdnZXJBdXRvRml0JykpKSwgZmlsdGVyKGUgPT4gZS50eXBlID09PSAnZW5kJykpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5vdGlmeVJlc2l6ZShlKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBlLnJlc2l6ZWRDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXNUcnV0aHkoaXRlbS5jb2x1bW4ucmVzaXphYmxlKSAmJiAhaXRlbS5jb2x1bW4uaXNDb2x1bW5Hcm91cClcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgY29sdW1uOiBpdGVtLmNvbHVtbixcbiAgICAgICAgICAgIG5ld1dpZHRoOiBpdGVtLmNvbHVtbi53aWR0aCxcbiAgICAgICAgICAgIG9sZFdpZHRoOiBpdGVtLm9sZFdpZHRoXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemUuZW1pdChhcmdzKTtcbiAgICB9XG4gICAgYXNzZXJ0TmF2aWdhYmxlKCkge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMubmF2aWdhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBHcmlkIHNob3VsZCBiZSBjb25maWd1cmVkIGFzIFtuYXZpZ2FibGVdPVwidHJ1ZVwiIHRvIGNvbnRyb2wgZm9jdXMnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuYXZpZ2F0aW9uTWV0YWRhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHRoaXMuaXNWaXJ0dWFsO1xuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGRhdGFSb3dzID0gaXNWaXJ0dWFsID8gdGhpcy52aWV3LnRvdGFsIDogcGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGFkZFJvd09mZnNldCA9IHRoaXMuZWRpdFNlcnZpY2UuaGFzTmV3SXRlbSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBmaWx0ZXJSb3dPZmZzZXQgPSBoYXNGaWx0ZXJSb3codGhpcy5maWx0ZXJhYmxlKSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBoZWFkZXJSb3dzID0gdGhpcy50b3RhbENvbHVtbkxldmVscyArIDEgKyBmaWx0ZXJSb3dPZmZzZXQgKyBhZGRSb3dPZmZzZXQ7XG4gICAgICAgIHJldHVybiBuZXcgTmF2aWdhdGlvbk1ldGFkYXRhKGRhdGFSb3dzLCBoZWFkZXJSb3dzLCBpc1ZpcnR1YWwsIHRoaXMuc2hvd1BhZ2VyLCBpc1ByZXNlbnQodGhpcy5kZXRhaWxUZW1wbGF0ZSksIHRoaXMud3JhcHBlciwgdGhpcy52aXJ0dWFsQ29sdW1ucywgdGhpcy5jb2x1bW5zQ29udGFpbmVyKTtcbiAgICB9XG4gICAgdXBkYXRlTmF2aWdhdGlvbk1ldGFkYXRhKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm1ldGFkYXRhID0gdGhpcy5uYXZpZ2F0aW9uTWV0YWRhdGEoKTtcbiAgICB9XG4gICAgYXBwbHlBdXRvU2l6ZSgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+IHRoaXMuYXV0b1NpemUgPyBjLmF1dG9TaXplICE9PSBmYWxzZSA6IGMuYXV0b1NpemUpO1xuICAgICAgICBpZiAoY29scy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShfID0+IHRoaXMuYXV0b0ZpdENvbHVtbnMoY29scykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ29sdW1uUmFuZ2VDaGFuZ2UocmFuZ2UpIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRDb2x1bW5zID0gdGhpcy52aWV3cG9ydENvbHVtbnMgPSBbXTtcbiAgICAgICAgY29uc3QgbGVhZlZpZXdwb3J0Q29sdW1ucyA9IHRoaXMuY29sdW1uc0NvbnRhaW5lclxuICAgICAgICAgICAgLm5vbkxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKS5zbGljZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kICsgMSk7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxlYWZWaWV3cG9ydENvbHVtbnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IGxlYWZWaWV3cG9ydENvbHVtbnNbaWR4XTtcbiAgICAgICAgICAgIHdoaWxlIChjb2x1bW4ucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRvQWRkID0gW2NvbHVtbl07XG4gICAgICAgICAgICB3aGlsZSAodG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gdG9BZGQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB2aWV3cG9ydENvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uaXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICB0b0FkZC51bnNoaWZ0LmFwcGx5KHRvQWRkLCBjb2x1bW4uY2hpbGRyZW5BcnJheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdEZyb21Hcm91cCA9IHZpZXdwb3J0Q29sdW1uc1t2aWV3cG9ydENvbHVtbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb2x1bW4gPSBsZWFmVmlld3BvcnRDb2x1bW5zW2lkeF07XG4gICAgICAgICAgICB3aGlsZSAoY29sdW1uICE9PSBsYXN0RnJvbUdyb3VwICYmIGlkeCA8IGxlYWZWaWV3cG9ydENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWR4Kys7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gbGVhZlZpZXdwb3J0Q29sdW1uc1tpZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5zdGFydCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbGVhZlZpZXdwb3J0Q29sdW1uc1swXTtcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSByYW5nZS5vZmZzZXQ7XG4gICAgICAgICAgICBsZXQgY3VycmVudCA9IHZpZXdwb3J0Q29sdW1uc1swXTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudCAhPT0gZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgLT0gY3VycmVudC5pc0NvbHVtbkdyb3VwID8gMCA6IGN1cnJlbnQud2lkdGg7XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gdmlld3BvcnRDb2x1bW5zW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxMZXZlbHMgPSB0aGlzLmNvbHVtbnNDb250YWluZXIudG90YWxMZXZlbHM7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8PSB0b3RhbExldmVsczsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0Q29sdW1uID0gaWR4IDwgdG90YWxMZXZlbHMgPyBuZXcgQ29sdW1uR3JvdXBDb21wb25lbnQocHJldmlvdXMpIDogbmV3IENvbHVtbkJhc2UkMShwcmV2aW91cyk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gb2Zmc2V0Q29sdW1uO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRDb2x1bW4udGl0bGUgPSBcIlxcdTAwQTBcIjtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q29sdW1uLndpZHRoID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydENvbHVtbnMudW5zaGlmdChvZmZzZXRDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxlYWZWaWV3cG9ydENvbHVtbnMgPSB2aWV3cG9ydENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaXNDb2x1bW5Hcm91cCk7XG4gICAgfVxuICAgIHRvZ2dsZURldGFpbFJvd0xlZ2FjeShpbmRleCwgZXhwYW5kKSB7XG4gICAgICAgIGNvbnN0IGhhc0NhbGxiYWNrID0gdHlwZW9mIHRoaXMuaXNEZXRhaWxFeHBhbmRlZCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBleHBhbmRSb3cgYW5kIGNvbGxhcHNlUm93IG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hlbiB1c2luZyB0aGUgJyArXG4gICAgICAgICAgICAgICAgJ2tlbmRvR3JpZERldGFpbHNFeHBhbmRCeSBkaXJlY3RpdmUgb3IgdGhlIGlzRGV0YWlsRXhwYW5kZWQgY2FsbGJhY2suICcgK1xuICAgICAgICAgICAgICAgICdUaGVzZSBtZXRob2RzIGFyZSBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSB2ZXJzaW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpICYmIGhhc0NhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsc1NlcnZpY2UuaXNFeHBhbmRlZChpbmRleCwgbnVsbCkgIT09IGV4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxzU2VydmljZS50b2dnbGVSb3coaW5kZXgsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3VsZFJlc2V0U2VsZWN0aW9uKHNlbGVjdGFibGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBzZWxlY3RhYmxlQ2hhbmdlcy5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBpZiAoIXByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFNlbGVjdGlvbiB3YXMgZGlzYWJsZWQsIG5vIG5lZWQgdG8gcmVzZXQuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gc2VsZWN0YWJsZUNoYW5nZXMuY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZSB8fCBjdXJyZW50VmFsdWUuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIFNlbGVjdGlvbiBkaXNhYmxlZCwgcmVzZXQuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZS5jZWxsICE9PSBjdXJyZW50VmFsdWUuY2VsbDtcbiAgICB9XG59XG5HcmlkQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvR3JpZCcsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIEJyb3dzZXJTdXBwb3J0U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uSW5mb1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENlbGxTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEZXRhaWxzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgR3JvdXBzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgR3JvdXBJbmZvU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRWRpdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFBERlNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFN1c3BlbmRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDRUxMX0NPTlRFWFQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogybU0JDJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmdyaWQnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBQYWdlckNvbnRleHRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBFeGNlbFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFNjcm9sbFN5bmNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBSZXNpemVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRG9tRXZlbnRzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTaW5nbGVQb3B1cFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERyYWdBbmREcm9wU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRHJhZ0hpbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEcm9wQ3VlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uUmVvcmRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBGb2N1c1Jvb3QsXG4gICAgICAgICAgICAgICAgICAgIElkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgU2Nyb2xsUmVxdWVzdFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFNvcnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQnLFxuICAgICAgICAgICAgICAgIHN0eWxlczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBTdHlsZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgga2VuZG8tdGhlbWUtZGVmYXVsdEB2Mi40Ni4wIGFuZCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgICAgICBgICAgLmstZ3JpZCAuay1ncmlkLWFyaWEtcm9vdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5rLWdyaWQgLmstZmlsdGVyLXJvdyB0ZCB7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICB9YFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb0dyaWRMb2NhbGl6ZWRNZXNzYWdlc1xuICAgICAgICAgICAgaTE4bi1ncm91cFBhbmVsRW1wdHk9XCJrZW5kby5ncmlkLmdyb3VwUGFuZWxFbXB0eXxUaGUgbGFiZWwgdmlzaWJsZSBpbiB0aGUgR3JpZCBncm91cCBwYW5lbCB3aGVuIGl0IGlzIGVtcHR5XCJcbiAgICAgICAgICAgIGdyb3VwUGFuZWxFbXB0eT1cIkRyYWcgYSBjb2x1bW4gaGVhZGVyIGFuZCBkcm9wIGl0IGhlcmUgdG8gZ3JvdXAgYnkgdGhhdCBjb2x1bW5cIlxuXG4gICAgICAgICAgICBpMThuLW5vUmVjb3Jkcz1cImtlbmRvLmdyaWQubm9SZWNvcmRzfFRoZSBsYWJlbCB2aXNpYmxlIGluIHRoZSBHcmlkIHdoZW4gdGhlcmUgYXJlIG5vIHJlY29yZHNcIlxuICAgICAgICAgICAgbm9SZWNvcmRzPVwiTm8gcmVjb3JkcyBhdmFpbGFibGUuXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlckZpcnN0UGFnZT1cImtlbmRvLmdyaWQucGFnZXJGaXJzdFBhZ2V8VGhlIGxhYmVsIGZvciB0aGUgZmlyc3QgcGFnZSBidXR0b24gaW4gR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlckZpcnN0UGFnZT1cIkdvIHRvIHRoZSBmaXJzdCBwYWdlXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlclByZXZpb3VzUGFnZT1cImtlbmRvLmdyaWQucGFnZXJQcmV2aW91c1BhZ2V8VGhlIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgcGFnZSBidXR0b24gaW4gR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlclByZXZpb3VzUGFnZT1cIkdvIHRvIHRoZSBwcmV2aW91cyBwYWdlXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlck5leHRQYWdlPVwia2VuZG8uZ3JpZC5wYWdlck5leHRQYWdlfFRoZSBsYWJlbCBmb3IgdGhlIG5leHQgcGFnZSBidXR0b24gaW4gR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlck5leHRQYWdlPVwiR28gdG8gdGhlIG5leHQgcGFnZVwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJMYXN0UGFnZT1cImtlbmRvLmdyaWQucGFnZXJMYXN0UGFnZXxUaGUgbGFiZWwgZm9yIHRoZSBsYXN0IHBhZ2UgYnV0dG9uIGluIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJMYXN0UGFnZT1cIkdvIHRvIHRoZSBsYXN0IHBhZ2VcIlxuXG4gICAgICAgICAgICBpMThuLXBhZ2VyUGFnZT1cImtlbmRvLmdyaWQucGFnZXJQYWdlfFRoZSBsYWJlbCBiZWZvcmUgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaW4gdGhlIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJQYWdlPVwiUGFnZVwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJPZj1cImtlbmRvLmdyaWQucGFnZXJPZnxUaGUgbGFiZWwgYmVmb3JlIHRoZSB0b3RhbCBwYWdlcyBudW1iZXIgaW4gdGhlIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJPZj1cIm9mXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlckl0ZW1zPVwia2VuZG8uZ3JpZC5wYWdlckl0ZW1zfFRoZSBsYWJlbCBhZnRlciB0aGUgdG90YWwgcGFnZXMgbnVtYmVyIGluIHRoZSBHcmlkIHBhZ2VyXCJcbiAgICAgICAgICAgIHBhZ2VySXRlbXM9XCJpdGVtc1wiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJQYWdlTnVtYmVySW5wdXRUaXRsZT1cImtlbmRvLmdyaWQucGFnZXJQYWdlTnVtYmVySW5wdXRUaXRsZXxUaGUgbGFiZWwgZm9yIHRoZSBwYWdlciBpbnB1dCBpbiB0aGUgR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlclBhZ2VOdW1iZXJJbnB1dFRpdGxlPVwiUGFnZSBOdW1iZXJcIlxuXG4gICAgICAgICAgICBpMThuLXBhZ2VySXRlbXNQZXJQYWdlPVwia2VuZG8uZ3JpZC5wYWdlckl0ZW1zUGVyUGFnZXxUaGUgbGFiZWwgZm9yIHRoZSBwYWdlIHNpemUgY2hvb3NlciBpbiB0aGUgR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlckl0ZW1zUGVyUGFnZT1cIml0ZW1zIHBlciBwYWdlXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXI9XCJrZW5kby5ncmlkLmZpbHRlcnxUaGUgbGFiZWwgb2YgdGhlIGZpbHRlciBjZWxsIG9yIGljb25cIlxuICAgICAgICAgICAgZmlsdGVyPVwiRmlsdGVyXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJFcU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJFcU9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBlcXVhbCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyRXFPcGVyYXRvcj1cIklzIGVxdWFsIHRvXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJOb3RFcU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJOb3RFcU9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBub3QgZXF1YWwgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlck5vdEVxT3BlcmF0b3I9XCJJcyBub3QgZXF1YWwgdG9cIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlcklzTnVsbE9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJJc051bGxPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgaXMgbnVsbCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVySXNOdWxsT3BlcmF0b3I9XCJJcyBudWxsXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJJc05vdE51bGxPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVySXNOb3ROdWxsT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGlzIG5vdCBudWxsIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJJc05vdE51bGxPcGVyYXRvcj1cIklzIG5vdCBudWxsXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJJc0VtcHR5T3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlcklzRW1wdHlPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgaXMgZW1wdHkgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlcklzRW1wdHlPcGVyYXRvcj1cIklzIGVtcHR5XCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJJc05vdEVtcHR5T3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlcklzTm90RW1wdHlPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgaXMgbm90IGVtcHR5IGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJJc05vdEVtcHR5T3BlcmF0b3I9XCJJcyBub3QgZW1wdHlcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyU3RhcnRzV2l0aE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBzdGFydHMgd2l0aCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyU3RhcnRzV2l0aE9wZXJhdG9yPVwiU3RhcnRzIHdpdGhcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckNvbnRhaW5zT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckNvbnRhaW5zT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGNvbnRhaW5zIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJDb250YWluc09wZXJhdG9yPVwiQ29udGFpbnNcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlck5vdENvbnRhaW5zT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlck5vdENvbnRhaW5zT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGRvZXMgbm90IGNvbnRhaW4gZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlck5vdENvbnRhaW5zT3BlcmF0b3I9XCJEb2VzIG5vdCBjb250YWluXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJFbmRzV2l0aE9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJFbmRzV2l0aE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBlbmRzIHdpdGggZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckVuZHNXaXRoT3BlcmF0b3I9XCJFbmRzIHdpdGhcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckd0ZU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJHdGVPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJHdGVPcGVyYXRvcj1cIklzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0b1wiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyR3RPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyR3RPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgZ3JlYXRlciB0aGFuIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJHdE9wZXJhdG9yPVwiSXMgZ3JlYXRlciB0aGFuXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJMdGVPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyTHRlT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGxlc3MgdGhhbiBvciBlcXVhbCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyTHRlT3BlcmF0b3I9XCJJcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckx0T3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckx0T3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGxlc3MgdGhhbiBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyTHRPcGVyYXRvcj1cIklzIGxlc3MgdGhhblwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVySXNUcnVlPVwia2VuZG8uZ3JpZC5maWx0ZXJJc1RydWV8VGhlIHRleHQgb2YgdGhlIElzVHJ1ZSBib29sZWFuIGZpbHRlciBvcHRpb25cIlxuICAgICAgICAgICAgZmlsdGVySXNUcnVlPVwiSXMgVHJ1ZVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVySXNGYWxzZT1cImtlbmRvLmdyaWQuZmlsdGVySXNGYWxzZXxUaGUgdGV4dCBvZiB0aGUgSXNGYWxzZSBib29sZWFuIGZpbHRlciBvcHRpb25cIlxuICAgICAgICAgICAgZmlsdGVySXNGYWxzZT1cIklzIEZhbHNlXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJCb29sZWFuQWxsPVwia2VuZG8uZ3JpZC5maWx0ZXJCb29sZWFuQWxsfFRoZSB0ZXh0IG9mIHRoZSAoQWxsKSBib29sZWFuIGZpbHRlciBvcHRpb25cIlxuICAgICAgICAgICAgZmlsdGVyQm9vbGVhbkFsbD1cIihBbGwpXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJBZnRlck9yRXF1YWxPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyQWZ0ZXJPckVxdWFsT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGFmdGVyIG9yIGVxdWFsIGRhdGUgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckFmdGVyT3JFcXVhbE9wZXJhdG9yPVwiSXMgYWZ0ZXIgb3IgZXF1YWwgdG9cIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckFmdGVyT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckFmdGVyT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGFmdGVyIGRhdGUgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckFmdGVyT3BlcmF0b3I9XCJJcyBhZnRlclwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyQmVmb3JlT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckJlZm9yZU9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBiZWZvcmUgZGF0ZSBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyQmVmb3JlT3BlcmF0b3I9XCJJcyBiZWZvcmVcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckJlZm9yZU9yRXF1YWxPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyQmVmb3JlT3JFcXVhbE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBiZWZvcmUgb3IgZXF1YWwgZGF0ZSBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyQmVmb3JlT3JFcXVhbE9wZXJhdG9yPVwiSXMgYmVmb3JlIG9yIGVxdWFsIHRvXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJGaWx0ZXJCdXR0b249XCJrZW5kby5ncmlkLmZpbHRlckZpbHRlckJ1dHRvbnxUaGUgdGV4dCBvZiB0aGUgZmlsdGVyIGJ1dHRvblwiXG4gICAgICAgICAgICBmaWx0ZXJGaWx0ZXJCdXR0b249XCJGaWx0ZXJcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckNsZWFyQnV0dG9uPVwia2VuZG8uZ3JpZC5maWx0ZXJDbGVhckJ1dHRvbnxUaGUgdGV4dCBvZiB0aGUgY2xlYXIgZmlsdGVyIGJ1dHRvblwiXG4gICAgICAgICAgICBmaWx0ZXJDbGVhckJ1dHRvbj1cIkNsZWFyXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJBbmRMb2dpYz1cImtlbmRvLmdyaWQuZmlsdGVyQW5kTG9naWN8VGhlIHRleHQgb2YgdGhlIEFuZCBmaWx0ZXIgbG9naWNcIlxuICAgICAgICAgICAgZmlsdGVyQW5kTG9naWM9XCJBbmRcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlck9yTG9naWM9XCJrZW5kby5ncmlkLmZpbHRlck9yTG9naWN8VGhlIHRleHQgb2YgdGhlIE9yIGZpbHRlciBsb2dpY1wiXG4gICAgICAgICAgICBmaWx0ZXJPckxvZ2ljPVwiT3JcIlxuXG4gICAgICAgICAgICBpMThuLWxvYWRpbmc9XCJrZW5kby5ncmlkLmxvYWRpbmd8VGhlIGxvYWRpbmcgdGV4dFwiXG4gICAgICAgICAgICBsb2FkaW5nPVwiTG9hZGluZ1wiXG5cbiAgICAgICAgICAgIGkxOG4tY29sdW1uTWVudT1cImtlbmRvLmdyaWQuY29sdW1uTWVudXxUaGUgdGl0bGUgb2YgdGhlIGNvbHVtbiBtZW51IGljb25cIlxuICAgICAgICAgICAgY29sdW1uTWVudT1cIkNvbHVtbiBNZW51XCJcblxuICAgICAgICAgICAgaTE4bi1jb2x1bW5zPVwia2VuZG8uZ3JpZC5jb2x1bW5zfFRoZSB0ZXh0IHNob3duIGluIHRoZSBjb2x1bW4gbWVudSBmb3IgdGhlIGNvbHVtbnMgaXRlbVwiXG4gICAgICAgICAgICBjb2x1bW5zPVwiQ29sdW1uc1wiXG5cbiAgICAgICAgICAgIGkxOG4tbG9jaz1cImtlbmRvLmdyaWQubG9ja3xUaGUgdGV4dCBzaG93biBpbiB0aGUgY29sdW1uIG1lbnUgZm9yIHRoZSBsb2NrIGl0ZW1cIlxuICAgICAgICAgICAgbG9jaz1cIkxvY2tcIlxuXG4gICAgICAgICAgICBpMThuLXVubG9jaz1cImtlbmRvLmdyaWQudW5sb2NrfFRoZSB0ZXh0IHNob3duIGluIHRoZSBjb2x1bW4gbWVudSBmb3IgdGhlIHVubG9jayBpdGVtXCJcbiAgICAgICAgICAgIHVubG9jaz1cIlVubG9ja1wiXG5cbiAgICAgICAgICAgIGkxOG4tc29ydGFibGU9XCJrZW5kby5ncmlkLnNvcnRhYmxlfFRoZSBsYWJlbCBvZiB0aGUgc29ydCBpY29uXCJcbiAgICAgICAgICAgIHNvcnRhYmxlPVwiU29ydGFibGVcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnRBc2NlbmRpbmc9XCJrZW5kby5ncmlkLnNvcnRBc2NlbmRpbmd8VGhlIHRleHQgc2hvd24gaW4gdGhlIGNvbHVtbiBtZW51IGZvciB0aGUgc29ydCBhc2NlbmRpbmcgaXRlbVwiXG4gICAgICAgICAgICBzb3J0QXNjZW5kaW5nPVwiU29ydCBBc2NlbmRpbmdcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnREZXNjZW5kaW5nPVwia2VuZG8uZ3JpZC5zb3J0RGVzY2VuZGluZ3xUaGUgdGV4dCBzaG93biBpbiB0aGUgY29sdW1uIG1lbnUgZm9yIHRoZSBzb3J0IGRlc2NlbmRpbmcgaXRlbVwiXG4gICAgICAgICAgICBzb3J0RGVzY2VuZGluZz1cIlNvcnQgRGVzY2VuZGluZ1wiXG5cbiAgICAgICAgICAgIGkxOG4tc29ydGVkQXNjZW5kaW5nPVwia2VuZG8uZ3JpZC5zb3J0ZWRBc2NlbmRpbmd8VGhlIHN0YXR1cyBhbm5vdW5jZW1lbnQgd2hlbiBhIGNvbHVtbiBpcyBzb3J0ZWQgYXNjZW5kaW5nXCJcbiAgICAgICAgICAgIHNvcnRlZEFzY2VuZGluZz1cIlNvcnRlZCBBc2NlbmRpbmdcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnRlZERlc2NlbmRpbmc9XCJrZW5kby5ncmlkLnNvcnRlZERlc2NlbmRpbmd8VGhlIHN0YXR1cyBhbm5vdW5jZW1lbnQgd2hlbiBhIGNvbHVtbiBpcyBzb3J0ZWQgZGVzY2VuZGluZ1wiXG4gICAgICAgICAgICBzb3J0ZWREZXNjZW5kaW5nPVwiU29ydGVkIERlc2NlbmRpbmdcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnRlZERlZmF1bHQ9XCJrZW5kby5ncmlkLnNvcnRlZERlZmF1bHR8VGhlIHN0YXR1cyBhbm5vdW5jZW1lbnQgd2hlbiBhIGNvbHVtbiBpcyBubyBsb25nZXIgc29ydGVkXCJcbiAgICAgICAgICAgIHNvcnRlZERlZmF1bHQ9XCJOb3QgU29ydGVkXCJcblxuICAgICAgICAgICAgaTE4bi1jb2x1bW5zQXBwbHk9XCJrZW5kby5ncmlkLmNvbHVtbnNBcHBseXxUaGUgdGV4dCBzaG93biBpbiB0aGUgY29sdW1uIG1lbnUgb3IgY29sdW1uIGNob29zZXIgZm9yIHRoZSBjb2x1bW5zIGFwcGx5IGJ1dHRvblwiXG4gICAgICAgICAgICBjb2x1bW5zQXBwbHk9XCJBcHBseVwiXG5cbiAgICAgICAgICAgIGkxOG4tY29sdW1uc1Jlc2V0PVwia2VuZG8uZ3JpZC5jb2x1bW5zUmVzZXR8VGhlIHRleHQgc2hvd24gaW4gdGhlIGNvbHVtbiBtZW51IG9yIGNvbHVtbiBjaG9vc2VyIGZvciB0aGUgY29sdW1ucyByZXNldCBidXR0b25cIlxuICAgICAgICAgICAgY29sdW1uc1Jlc2V0PVwiUmVzZXRcIlxuXG4gICAgICAgICAgICBpMThuLWRldGFpbEV4cGFuZD1cImtlbmRvLmdyaWQuZGV0YWlsRXhwYW5kfFRoZSB0aXRsZSBvZiB0aGUgZXhwYW5kIGljb24gb2YgZGV0YWlsIHJvd3MuXCJcbiAgICAgICAgICAgIGRldGFpbEV4cGFuZD1cIkV4cGFuZCBEZXRhaWxzXCJcblxuICAgICAgICAgICAgaTE4bi1kZXRhaWxDb2xsYXBzZT1cImtlbmRvLmdyaWQuZGV0YWlsQ29sbGFwc2V8VGhlIHRpdGxlIG9mIHRoZSBjb2xsYXBzZSBpY29uIG9mIGRldGFpbCByb3dzLlwiXG4gICAgICAgICAgICBkZXRhaWxDb2xsYXBzZT1cIkNvbGxhcHNlIERldGFpbHNcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckRhdGVUb2RheT1cImtlbmRvLmdyaWQuZmlsdGVyRGF0ZVRvZGF5fFRoZSB0ZXh0IG9mIHRoZSBUb2RheSBidXR0b24gb2YgdGhlIERhdGUgZmlsdGVyLlwiXG4gICAgICAgICAgICBmaWx0ZXJEYXRlVG9kYXk9XCJUT0RBWVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyRGF0ZVRvZ2dsZT1cImtlbmRvLmdyaWQuZmlsdGVyRGF0ZVRvZ2dsZXxUaGUgdGl0bGUgb2YgdGhlIFRvZ2dsZSBidXR0b24gb2YgdGhlIERhdGUgZmlsdGVyLlwiXG4gICAgICAgICAgICBmaWx0ZXJEYXRlVG9nZ2xlPVwiVG9nZ2xlIENhbGVuZGFyXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJOdW1lcmljRGVjcmVtZW50PVwia2VuZG8uZ3JpZC5maWx0ZXJOdW1lcmljRGVjcmVtZW50fFRoZSB0aXRsZSBvZiB0aGUgRGVjcmVtZW50IGJ1dHRvbiBvZiB0aGUgTnVtZXJpYyBmaWx0ZXIuXCJcbiAgICAgICAgICAgIGZpbHRlck51bWVyaWNEZWNyZW1lbnQ9XCJEZWNyZW1lbnRcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlck51bWVyaWNJbmNyZW1lbnQ9XCJrZW5kby5ncmlkLmZpbHRlck51bWVyaWNJbmNyZW1lbnR8VGhlIHRpdGxlIG9mIHRoZSBJbmNyZW1lbnQgYnV0dG9uIG9mIHRoZSBOdW1lcmljIGZpbHRlci5cIlxuICAgICAgICAgICAgZmlsdGVyTnVtZXJpY0luY3JlbWVudD1cIkluY3JlbWVudFwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxrZW5kby1ncmlkLXRvb2xiYXIgKm5nSWY9XCJzaG93VG9wVG9vbGJhclwiIHBvc2l0aW9uPVwidG9wXCI+PC9rZW5kby1ncmlkLXRvb2xiYXI+XG4gICAgICAgIDxrZW5kby1ncmlkLWdyb3VwLXBhbmVsXG4gICAgICAgICAgICAqbmdJZj1cInNob3dHcm91cFBhbmVsXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cImdyb3VwYWJsZUVtcHR5VGV4dFwiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZ3JvdXBDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1ncm91cC1wYW5lbD5cbiAgICAgICAgPGRpdiAjYXJpYVJvb3RcbiAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWFyaWEtcm9vdFwiXG4gICAgICAgICAgICByb2xlPVwiZ3JpZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJvd2NvdW50XT1cImFyaWFSb3dDb3VudFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNvbGNvdW50XT1cImFyaWFDb2xDb3VudFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNTY3JvbGxhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVIZWFkZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwiaGVhZGVyUGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAjbG9ja2VkSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWhlYWRlci1sb2NrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBbbG9ja2VkXT1cInRydWVcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGtlbmRvR3JpZEhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsb2NrZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxDb2x1bW5MZXZlbHNdPVwidG90YWxDb2x1bW5MZXZlbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBhYmxlXT1cInNob3dHcm91cFBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwicmVvcmRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVdPVwiY29sdW1uTWVudU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51VGVtcGxhdGVdPVwiY29sdW1uTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxDb2x1bW5zQ291bnRdPVwibGVhZkNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+PGRpdiAjaGVhZGVyIGNsYXNzPVwiay1ncmlkLWhlYWRlci13cmFwXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIGRhdGEtc2Nyb2xsYWJsZVxuICAgICAgICAgICAgICAgICAgICBba2VuZG9HcmlkUmVzaXphYmxlQ29udGFpbmVyXT1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrZWRXaWR0aF09XCJsb2NrZWRXaWR0aCArIHNjcm9sbGJhcldpZHRoICsgMlwiPlxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgcm9sZT1cInByZXNlbnRhdGlvblwiIFtzdHlsZS53aWR0aC5weF09XCJub25Mb2NrZWRXaWR0aFwiIFt2aXJ0dWFsQ29sdW1uc109XCJ2aXJ0dWFsQ29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGdyb3VwIGtlbmRvR3JpZENvbEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiaGVhZGVyTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiaXNMb2NrZWQgPyBbXSA6IGdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQga2VuZG9HcmlkSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImhlYWRlckNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbkxldmVsc109XCJ0b3RhbENvbHVtbkxldmVsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cGFibGVdPVwic2hvd0dyb3VwUGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJpc0xvY2tlZCA/IFtdIDogZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVdPVwiY29sdW1uTWVudU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51VGVtcGxhdGVdPVwiY29sdW1uTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9ja2VkQ29sdW1uc0NvdW50XT1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ29sdW1uc0NvdW50XT1cImxlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidmlydHVhbENvbHVtbnNcIiBjbGFzcz1cImstd2lkdGgtY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uc0NvbnRhaW5lci51bmxvY2tlZFdpZHRoXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8a2VuZG8tZ3JpZC1saXN0XG4gICAgICAgICAgICAgICAgW2RhdGFdPVwidmlld1wiXG4gICAgICAgICAgICAgICAgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtkZXRhaWxSb3dIZWlnaHRdPVwiZGV0YWlsUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbdG90YWxdPVwidG90YWxDb3VudFwiXG4gICAgICAgICAgICAgICAgW3Rha2VdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgIFtncm91cGFibGVdPVwiZ3JvdXBhYmxlXCJcbiAgICAgICAgICAgICAgICBbc2tpcF09XCJza2lwXCJcbiAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlXCJcbiAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtub1JlY29yZHNUZW1wbGF0ZV09XCJub1JlY29yZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwibm90aWZ5UGFnZUNoYW5nZSgnbGlzdCcsICRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW2lzVmlydHVhbF09XCJpc1ZpcnR1YWxcIlxuICAgICAgICAgICAgICAgIFt2aXJ0dWFsQ29sdW1uc109XCJ2aXJ0dWFsQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgKHNjcm9sbEJvdHRvbSk9XCJub3RpZnlTY3JvbGxCb3R0b20oKVwiXG4gICAgICAgICAgICAgICAgKGNvbnRlbnRTY3JvbGwpPVwiY29udGVudFNjcm9sbC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkU2VsZWN0aW9uTWFycXVlZVxuICAgICAgICAgICAgICAgIFtlbmFibGVEcmFnXT1cIm1hcnF1ZWVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1saXN0PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0Zvb3RlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWdyaWQtZm9vdGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZ109XCJoZWFkZXJQYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWZvb3Rlci1sb2NrZWRcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbbG9ja2VkXT1cInRydWVcIiBbc3R5bGUud2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xncm91cCBrZW5kb0dyaWRDb2xHcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImxvY2tlZExlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGZvb3Qga2VuZG9HcmlkRm9vdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJhcmlhUm93Q291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+PGRpdiAjZm9vdGVyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWZvb3Rlci13cmFwXCIgZGF0YS1zY3JvbGxhYmxlXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0dyaWRSZXNpemFibGVDb250YWluZXJdPVwibG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2tlZFdpZHRoXT1cImxvY2tlZFdpZHRoICsgc2Nyb2xsYmFyV2lkdGggKyAzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSByb2xlPVwicHJlc2VudGF0aW9uXCIgW3N0eWxlLndpZHRoLnB4XT1cIm5vbkxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJub25Mb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJpc0xvY2tlZCA/IFtdIDogZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zm9vdCBrZW5kb0dyaWRGb290ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImFyaWFSb3dDb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJpc0xvY2tlZCA/IFtdIDogZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIm5vbkxvY2tlZExlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9ja2VkQ29sdW1uc0NvdW50XT1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNTY3JvbGxhYmxlXCI+XG4gICAgICAgICAgICA8dGFibGUgW3N0eWxlLnRhYmxlLWxheW91dF09XCJyZXNpemFibGUgPyAnZml4ZWQnIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxjb2xncm91cCBrZW5kb0dyaWRDb2xHcm91cFxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICAgIDx0aGVhZCBrZW5kb0dyaWRIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZUhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbkxldmVsc109XCJ0b3RhbENvbHVtbkxldmVsc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBhYmxlXT1cInNob3dHcm91cFBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NvcnRdPVwic29ydFwiXG4gICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImNvbHVtbk1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVUZW1wbGF0ZV09XCJjb2x1bW5NZW51VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keSBrZW5kb0dyaWRUYWJsZUJvZHlcbiAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInZpZXdcIlxuICAgICAgICAgICAgICAgICAgICBbc2tpcF09XCJza2lwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub1JlY29yZHNUZW1wbGF0ZV09XCJub1JlY29yZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93R3JvdXBGb290ZXJzXT1cInNob3dHcm91cEZvb3RlcnNcIlxuICAgICAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVcbiAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkU2VsZWN0aW9uTWFycXVlZVxuICAgICAgICAgICAgICAgICAgICBbZW5hYmxlRHJhZ109XCJtYXJxdWVlU2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8dGZvb3Qga2VuZG9HcmlkRm9vdGVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0Zvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJhcmlhUm93Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIga2VuZG9HcmlkTG9hZGluZz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGtlbmRvLXBhZ2VyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dQYWdlclwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwicGFnZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW3RvdGFsXT1cInZpZXcudG90YWxcIlxuICAgICAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJwYWdlYWJsZVwiXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJub3RpZnlQYWdlQ2hhbmdlKCdwYWdlcicsICRldmVudClcIj5cbiAgICAgICAgPC9rZW5kby1wYWdlcj5cbiAgICAgICAgPGtlbmRvLWdyaWQtdG9vbGJhciAqbmdJZj1cInNob3dCb3R0b21Ub29sYmFyXCIgcG9zaXRpb249XCJib3R0b21cIj48L2tlbmRvLWdyaWQtdG9vbGJhcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyaWRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCcm93c2VyU3VwcG9ydFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNlbGVjdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENlbGxTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBHcm91cEluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBHcm91cHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VOb3RpZmljYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEZXRhaWxzU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEZpbHRlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFBERlNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlc3BvbnNpdmVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEV4Y2VsU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBTY3JvbGxTeW5jU2VydmljZSB9LFxuICAgIHsgdHlwZTogRG9tRXZlbnRzU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ29sdW1uUmVzaXppbmdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogQ29sdW1uUmVvcmRlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogU29ydFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNjcm9sbFJlcXVlc3RTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5HcmlkQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VTaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvd0hlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsUm93SGVpZ2h0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBza2lwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzY3JvbGxhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0cmFja0J5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aXJ0dWFsQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5hdmlnYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbmF2aWdhdGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF1dG9TaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb3dDbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93U2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNlbGxTZWxlY3RlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVzaXphYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW9yZGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9hZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGlkZUhlYWRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGFnZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdyb3VwQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgc29ydENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNlbGVjdGlvbkNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGRhdGFTdGF0ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdyb3VwRXhwYW5kOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZ3JvdXBDb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGRldGFpbEV4cGFuZDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGRldGFpbENvbGxhcHNlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZWRpdDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNhbmNlbDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNhdmU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICByZW1vdmU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBhZGQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsQ2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBwZGZFeHBvcnQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBleGNlbEV4cG9ydDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbHVtblJlc2l6ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbHVtblJlb3JkZXI6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sdW1uTG9ja2VkQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgc2Nyb2xsQm90dG9tOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29udGVudFNjcm9sbDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbkJhc2UkMSxdIH1dLFxuICAgIGRpcjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkJyxdIH1dLFxuICAgIGxvY2tlZENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1sb2NrZWRjb2x1bW5zJyxdIH1dLFxuICAgIHZpcnR1YWxDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtdmlydHVhbCcsXSB9XSxcbiAgICBub1Njcm9sbGJhckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtbm8tc2Nyb2xsYmFyJyxdIH1dLFxuICAgIGRldGFpbFRlbXBsYXRlQ2hpbGRyZW46IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0RldGFpbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgbm9SZWNvcmRzVGVtcGxhdGVDaGlsZHJlbjogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbTm9SZWNvcmRzVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBwYWdlclRlbXBsYXRlQ2hpbGRyZW46IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1BhZ2VyVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICB0b29sYmFyVGVtcGxhdGVDaGlsZHJlbjogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbVG9vbGJhclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgY29sdW1uTWVudVRlbXBsYXRlczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgbG9ja2VkSGVhZGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtcImxvY2tlZEhlYWRlclwiLF0gfV0sXG4gICAgaGVhZGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtcImhlYWRlclwiLF0gfV0sXG4gICAgZm9vdGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtcImZvb3RlclwiLF0gfV0sXG4gICAgYXJpYVJvb3Q6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydhcmlhUm9vdCcsXSB9XSxcbiAgICBpc0RldGFpbEV4cGFuZGVkOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVwZGF0ZSA9IChhcnIsIGlkeCwgdmFsdWUpID0+IChbXG4gICAgLi4uYXJyLnNsaWNlKDAsIGlkeCArIDEpLFxuICAgIC4uLihhcnIuc2xpY2UoaWR4ICsgMSkubWFwKHggPT4geCArIHZhbHVlKSlcbl0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJvd0hlaWdodFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHRvdGFsID0gMCwgcm93SGVpZ2h0LCBkZXRhaWxSb3dIZWlnaHQpIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5kZXRhaWxSb3dIZWlnaHQgPSBkZXRhaWxSb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMub2Zmc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLmhlaWdodHMgPSBbXTtcbiAgICAgICAgbGV0IGFnZyA9IDA7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRvdGFsOyBpZHgrKykge1xuICAgICAgICAgICAgdGhpcy5vZmZzZXRzLnB1c2goYWdnKTtcbiAgICAgICAgICAgIGFnZyArPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmhlaWdodHMucHVzaChyb3dIZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhlaWdodChyb3dJbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHRzW3Jvd0luZGV4XTtcbiAgICB9XG4gICAgZXhwYW5kRGV0YWlsKHJvd0luZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodChyb3dJbmRleCkgPT09IHRoaXMucm93SGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0hlaWdodChyb3dJbmRleCwgdGhpcy5kZXRhaWxSb3dIZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbGxhcHNlRGV0YWlsKHJvd0luZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodChyb3dJbmRleCkgPiB0aGlzLnJvd0hlaWdodCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dIZWlnaHQocm93SW5kZXgsIHRoaXMuZGV0YWlsUm93SGVpZ2h0ICogLTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzRXhwYW5kZWQocm93SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0KHJvd0luZGV4KSA+IHRoaXMucm93SGVpZ2h0O1xuICAgIH1cbiAgICBpbmRleChwb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub2Zmc2V0cy5yZWR1Y2UoKHByZXYsIGN1cnJlbnQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9PT0gcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudCA+IHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkeCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LCB1bmRlZmluZWQpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IHRoaXMudG90YWwgLSAxIDogcmVzdWx0O1xuICAgIH1cbiAgICBvZmZzZXQocm93SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0c1tyb3dJbmRleF07XG4gICAgfVxuICAgIHRvdGFsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHRzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xuICAgIH1cbiAgICB1cGRhdGVSb3dIZWlnaHQocm93SW5kZXgsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdGFsID4gMCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHRzW3Jvd0luZGV4XSArPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0cyA9IHVwZGF0ZSh0aGlzLm9mZnNldHMsIHJvd0luZGV4LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9mZnNldCkge1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZUFjdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2tpcCwgdGFrZSQkMSkge1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnRha2UgPSB0YWtlJCQxO1xuICAgIH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxCb3R0b21BY3Rpb24ge1xufVxuY29uc3QgU0NST0xMX0JPVFRPTV9USFJFU0hPTEQgPSAyO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNjcm9sbGVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3Ioc2Nyb2xsT2JzZXJ2YWJsZSkge1xuICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmFibGUgPSBzY3JvbGxPYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gMDtcbiAgICB9XG4gICAgY3JlYXRlKHJvd0hlaWdodFNlcnZpY2UsIHNraXAsIHRha2UkJDEsIHRvdGFsKSB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZSA9IHJvd0hlaWdodFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZmlyc3RMb2FkZWQgPSBza2lwO1xuICAgICAgICB0aGlzLmxhc3RMb2FkZWQgPSBza2lwICsgdGFrZSQkMTtcbiAgICAgICAgdGhpcy50YWtlID0gdGFrZSQkMTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSAwO1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgU2Nyb2xsQWN0aW9uKHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoc2tpcCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsT2JzZXJ2YWJsZS5zdWJzY3JpYmUoeCA9PiB0aGlzLm9uU2Nyb2xsKHgsIG9ic2VydmVyKSk7XG4gICAgICAgIH0pLnN1YnNjcmliZSh4ID0+IHN1YmplY3QubmV4dCh4KSk7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblNjcm9sbCh7IHNjcm9sbFRvcCwgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9LCBvYnNlcnZlcikge1xuICAgICAgICBpZiAodGhpcy5sYXN0U2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cCA9IHRoaXMubGFzdFNjcm9sbFRvcCA+PSBzY3JvbGxUb3A7XG4gICAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgICAgbGV0IGZpcnN0SXRlbUluZGV4ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KHNjcm9sbFRvcCk7XG4gICAgICAgIGxldCBmaXJzdEl0ZW1PZmZzZXQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGZpcnN0SXRlbUluZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChzY3JvbGxUb3AgKyBvZmZzZXRIZWlnaHQpO1xuICAgICAgICBpZiAoIXVwKSB7XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW1JbmRleCA+PSB0aGlzLmxhc3RMb2FkZWQgJiYgdGhpcy5sYXN0TG9hZGVkIDwgdGhpcy50b3RhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJmbG93ID0gKGZpcnN0SXRlbUluZGV4ICsgdGhpcy50YWtlKSAtIHRoaXMudG90YWw7XG4gICAgICAgICAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdEl0ZW1JbmRleCA9IGZpcnN0SXRlbUluZGV4IC0gb3ZlcmZsb3c7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0SXRlbU9mZnNldCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoZmlyc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gZmlyc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgU2Nyb2xsQWN0aW9uKGZpcnN0SXRlbU9mZnNldCkpO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0VGFrZSA9IHRoaXMuZmlyc3RMb2FkZWQgKyB0aGlzLnRha2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0TG9hZGVkID0gTWF0aC5taW4obmV4dFRha2UsIHRoaXMudG90YWwpO1xuICAgICAgICAgICAgICAgIG5leHRUYWtlID0gbmV4dFRha2UgPiB0aGlzLnRvdGFsID8gdGhpcy50b3RhbCAtIHRoaXMuZmlyc3RMb2FkZWQgOiB0aGlzLnRha2U7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgUGFnZUFjdGlvbih0aGlzLmZpcnN0TG9hZGVkLCB0aGlzLnRha2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0Qm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0IC0gc2Nyb2xsVG9wIDwgU0NST0xMX0JPVFRPTV9USFJFU0hPTEQ7XG4gICAgICAgICAgICAgICAgaWYgKGF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFNjcm9sbEJvdHRvbUFjdGlvbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwICYmIGZpcnN0SXRlbUluZGV4IDwgdGhpcy5maXJzdExvYWRlZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9uVmlzaWJsZUJ1ZmZlciA9IE1hdGguZmxvb3IodGhpcy50YWtlICogMC4zKTtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RMb2FkZWQgPSBNYXRoLm1heChmaXJzdEl0ZW1JbmRleCAtIG5vblZpc2libGVCdWZmZXIsIDApO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgU2Nyb2xsQWN0aW9uKHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQodGhpcy5maXJzdExvYWRlZCkpKTtcbiAgICAgICAgICAgIHRoaXMubGFzdExvYWRlZCA9IE1hdGgubWluKHRoaXMuZmlyc3RMb2FkZWQgKyB0aGlzLnRha2UsIHRoaXMudG90YWwpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgUGFnZUFjdGlvbih0aGlzLmZpcnN0TG9hZGVkLCB0aGlzLnRha2UpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBOT05fREFUQV9DRUxMX0NMQVNTRVMgPSAnay1oaWVyYXJjaHktY2VsbCBrLWRldGFpbC1jZWxsIGstZ3JvdXAtY2VsbCc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTk9OX0RBVEFfUk9XX0NMQVNTRVMgPSAnay1ncm91cGluZy1yb3cgay1ncm91cC1mb290ZXIgay1kZXRhaWwtcm93IGstZ3JpZC1ub3JlY29yZHMnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IElHTk9SRV9UQVJHRVRfQ0xBU1NTRVMgPSAnay1pY29uJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBJR05PUkVfQ09OVEFJTkVSX0NMQVNTRVMgPSAnay13aWRnZXQgay1ncmlkLWlnbm9yZS1jbGljayc7XG5cbmNvbnN0IGVsZW1lbnRBdCA9IChpbmRleCwgZWxlbWVudHMsIGVsZW1lbnRPZmZzZXQpID0+IHtcbiAgICBmb3IgKGxldCBpZHggPSAwLCBlbGVtZW50SWR4ID0gMDsgaWR4IDwgZWxlbWVudHMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBlbGVtZW50T2Zmc2V0KGVsZW1lbnRzW2lkeF0pO1xuICAgICAgICBpZiAoZWxlbWVudElkeCA8PSBpbmRleCAmJiBpbmRleCA8PSBlbGVtZW50SWR4ICsgb2Zmc2V0IC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzW2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudElkeCArPSBvZmZzZXQ7XG4gICAgfVxufTtcbmNvbnN0IHJvd0F0ID0gKGluZGV4LCByb3dzKSA9PiBlbGVtZW50QXQoaW5kZXgsIHJvd3MsIHJvdyA9PiByb3cuaGFzQXR0cmlidXRlKCdkYXRhLWtlbmRvLWdyaWQtaXRlbS1pbmRleCcpID8gMSA6IDApO1xuY29uc3QgY2VsbEF0ID0gKGluZGV4LCBjZWxscykgPT4gZWxlbWVudEF0KGluZGV4LCBjZWxscywgY2VsbCA9PiAhaGFzQ2xhc3NlcyhjZWxsLCBOT05fREFUQV9DRUxMX0NMQVNTRVMpID8gcGFyc2VJbnQoY2VsbC5nZXRBdHRyaWJ1dGUoJ2NvbFNwYW4nKSwgMTApIHx8IDEgOiAwKTtcbmNvbnN0IEVNUFRZX09CSkVDVCA9IHt9O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFNDUk9MTEVSX0ZBQ1RPUllfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2dyaWQtc2Nyb2xsLXNlcnZpY2UtZmFjdG9yeScpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIERFRkFVTFRfU0NST0xMRVJfRkFDVE9SWShvYnNlcnZhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBTY3JvbGxlclNlcnZpY2Uob2JzZXJ2YWJsZSk7XG59XG5jb25zdCB3aGVlbERlbHRhWSA9IChlKSA9PiB7XG4gICAgY29uc3QgZGVsdGFZID0gZS53aGVlbERlbHRhWTtcbiAgICBpZiAoZS53aGVlbERlbHRhICYmIChkZWx0YVkgPT09IHVuZGVmaW5lZCB8fCBkZWx0YVkpKSB7XG4gICAgICAgIHJldHVybiBlLndoZWVsRGVsdGE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGUuZGV0YWlsICYmIGUuYXhpcyA9PT0gZS5WRVJUSUNBTF9BWElTKSB7XG4gICAgICAgIHJldHVybiAoLWUuZGV0YWlsKSAqIDEwO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn07XG5jb25zdCBwcmV2ZW50TG9ja2VkU2Nyb2xsID0gKGFyZ3MsIGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBkZWx0YSA9IHdoZWVsRGVsdGFZKGFyZ3MpO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IGFsbG93U2Nyb2xsID0gKHNjcm9sbFRvcCA9PT0gMCAmJiAwIDwgZGVsdGEpIHx8IChlbGVtZW50LnNjcm9sbEhlaWdodCA8PSBlbGVtZW50Lm9mZnNldEhlaWdodCArIHNjcm9sbFRvcCAmJiBkZWx0YSA8IDApO1xuICAgIGlmICghYWxsb3dTY3JvbGwpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59O1xuY29uc3QgdHJhbnNsYXRlWSA9IChyZW5kZXJlciwgdmFsdWUpID0+IGVsID0+IHJlbmRlcmVyLnNldFN0eWxlKGVsLCBcInRyYW5zZm9ybVwiLCBgdHJhbnNsYXRlWSgke3ZhbHVlfXB4KWApO1xuY29uc3QgbWF5YmVOYXRpdmVFbGVtZW50ID0gZWwgPT4gZWwgPyBlbC5uYXRpdmVFbGVtZW50IDogbnVsbDtcbmNvbnN0IGhhc1Njcm9sbGJhciA9IChlbCwgcGFyZW50KSA9PiBlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID4gcGFyZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG5jb25zdCBzZXRIZWlnaHQkMSA9IHJlbmRlcmVyID0+ICh7IGVsLCBoZWlnaHQgfSkgPT4gcmVuZGVyZXIuc2V0U3R5bGUoZWwsIFwiaGVpZ2h0XCIsIGAke2hlaWdodH1weGApO1xuY29uc3QgYnVmZmVyU2l6ZSA9IDE7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioc2Nyb2xsZXJGYWN0b3J5LCBkZXRhaWxzU2VydmljZSwgY2hhbmdlTm90aWZpY2F0aW9uLCBzdXNwZW5kU2VydmljZSwgZ3JvdXBzU2VydmljZSwgbmdab25lLCByZW5kZXJlciwgc2Nyb2xsU3luY1NlcnZpY2UsIHJlc2l6ZVNlcnZpY2UsIGVkaXRTZXJ2aWNlLCBzdXBwb3J0U2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UsIHNjcm9sbFJlcXVlc3RTZXJ2aWNlLCBsb2NhbGl6YXRpb24sIGNvbHVtblJlc2l6aW5nU2VydmljZSwgY2hhbmdlRGV0ZWN0b3IsIHBkZlNlcnZpY2UsIGNvbHVtbkluZm8pIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VOb3RpZmljYXRpb24gPSBjaGFuZ2VOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuc3VzcGVuZFNlcnZpY2UgPSBzdXNwZW5kU2VydmljZTtcbiAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlID0gZ3JvdXBzU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZSA9IHNjcm9sbFN5bmNTZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlc2l6ZVNlcnZpY2UgPSByZXNpemVTZXJ2aWNlO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc3VwcG9ydFNlcnZpY2UgPSBzdXBwb3J0U2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemluZ1NlcnZpY2UgPSBjb2x1bW5SZXNpemluZ1NlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlID0gcGRmU2VydmljZTtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvID0gY29sdW1uSW5mbztcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5za2lwID0gMDtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gbmV3IENvbHVtbnNDb250YWluZXIoKCkgPT4gW10pO1xuICAgICAgICB0aGlzLnNlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ncm91cGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50cmFja0J5ID0gZGVmYXVsdFRyYWNrQnk7XG4gICAgICAgIHRoaXMuY29udGVudFNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnNjcm9sbEJvdHRvbSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhcnRJZHggPSAwO1xuICAgICAgICB0aGlzLnJlc2l6ZVNlbnNvcnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyU2Nyb2xsVG9wID0gMDtcbiAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgdGhpcy5ydGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHNjcm9sbGVyRmFjdG9yeSh0aGlzLmRpc3BhdGNoZXIpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPVxuICAgICAgICAgICAgZGV0YWlsc1NlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoeCA9PiB0aGlzLmRldGFpbEV4cGFuZCh4KSkuYWRkKHNjcm9sbFJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RzLnN1YnNjcmliZSh4ID0+IHRoaXMuc2Nyb2xsVG8oeCkpKTtcbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBob3N0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuICdwcmVzZW50YXRpb24nO1xuICAgIH1cbiAgICBnZXQgc2hvd0Zvb3RlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBhYmxlICYmIHRoaXMuZ3JvdXBhYmxlLnNob3dGb290ZXI7XG4gICAgfVxuICAgIGdldCB0b3RhbFdpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMudW5sb2NrZWRXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy51bmxvY2tlZFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsb2NrZWRMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5sb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IG5vbkxvY2tlZExlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLm5vbkxvY2tlZExlYWZDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucyAmJiAhdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRDb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vbkxvY2tlZExlYWZDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubGVhZkNvbHVtbnNUb1JlbmRlcjtcbiAgICB9XG4gICAgZ2V0IGxvY2tlZFdpZHRoKCkge1xuICAgICAgICBjb25zdCBncm91cENlbGxzV2lkdGggPSB0aGlzLmdyb3Vwcy5sZW5ndGggKiBHUk9VUF9DRUxMX1dJRFRIO1xuICAgICAgICByZXR1cm4gZXhwYW5kQ29sdW1ucyh0aGlzLmxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgKGN1cnIud2lkdGggfHwgMCksIGdyb3VwQ2VsbHNXaWR0aCk7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRXaWR0aCgpIHtcbiAgICAgICAgaWYgKCghdGhpcy5ydGwgJiYgdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGgpIHx8IHRoaXMudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBzdW1Db2x1bW5XaWR0aHMoZXhwYW5kQ29sdW1ucyh0aGlzLm5vbkxvY2tlZENvbHVtbnNUb1JlbmRlci50b0FycmF5KCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgaXNMb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmhhbmRsZVJvd1N5bmMuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuaGFuZGxlUm93TmF2aWdhdGlvbkxvY2tlZC5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobWVyZ2UodGhpcy5jb2x1bW5zLmNoYW5nZXMsIHRoaXMucmVzaXplU2VydmljZS5jaGFuZ2VzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0Q29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHRoaXMucnRsID0gcnRsKSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgaGFzSW5pdGlhbFNraXAgPSBjaGFuZ2VzLnNraXAgJiYgY2hhbmdlcy5za2lwLmZpcnN0Q2hhbmdlICYmIGNoYW5nZXMuc2tpcC5jdXJyZW50VmFsdWUgPiAwO1xuICAgICAgICBpZiAoaGFzSW5pdGlhbFNraXApIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5pdGlhbFNjcm9sbFRvU2tpcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQoXCJza2lwXCIsIGNoYW5nZXMpICYmICF0aGlzLnJlYmluZCkge1xuICAgICAgICAgICAgdGhpcy5za2lwU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldCh0aGlzLnNraXApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlDaGFuZ2VkKFtcInRvdGFsXCIsIFwidGFrZVwiXSwgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmViaW5kID0gZmFsc2U7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMgJiYgKCF0aGlzLnZpZXdwb3J0Q29sdW1ucyB8fCB0aGlzLnZpZXdwb3J0V2lkdGhDaGFuZ2UoKSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5za2lwICYmIHRoaXMuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQodGhpcy5za2lwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCk7XG4gICAgICAgIHRoaXMuYXR0YWNoQ29udGFpbmVyU2Nyb2xsKCk7XG4gICAgICAgIHRoaXMuaW5pdFJlc2l6ZVNlcnZpY2UoKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCBpc0xvY2tlZCA9IHRoaXMuaXNMb2NrZWQ7XG4gICAgICAgIGlmIChpc0xvY2tlZCAmJiAhdGhpcy5oYXNMb2NrZWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3luY1Jvd3NIZWlnaHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc0xvY2tlZENvbnRhaW5lciA9IGlzTG9ja2VkO1xuICAgIH1cbiAgICBzeW5jUm93c0hlaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9ja2VkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBzeW5jUm93c0hlaWdodCh0aGlzLmxvY2tlZFRhYmxlLm5hdGl2ZUVsZW1lbnQsIHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhbnVwU2Nyb2xsZXIoKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VzcGVuZFNlcnZpY2Uuc2Nyb2xsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIZWlnaHRTZXJ2aWNlID0gbmV3IFJvd0hlaWdodFNlcnZpY2UodGhpcy50b3RhbCwgdGhpcy5yb3dIZWlnaHQsIHRoaXMuZGV0YWlsUm93SGVpZ2h0KTtcbiAgICAgICAgdGhpcy50b3RhbEhlaWdodCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS50b3RhbEhlaWdodCgpO1xuICAgICAgICBpZiAoIWlzVW5pdmVyc2FsKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuY3JlYXRlU2Nyb2xsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9ja2VkU2Nyb2xsKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3VzcGVuZFNlcnZpY2Uuc2Nyb2xsKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NrZWRTY3JvbGxUb3AgPSB0aGlzLmxvY2tlZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGlmIChsb2NrZWRTY3JvbGxUb3AgIT09IHRoaXMuY29udGFpbmVyU2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lclNjcm9sbFRvcCA9IGxvY2tlZFNjcm9sbFRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2NrZWRNb3VzZXdoZWVsKGFyZ3MpIHtcbiAgICAgICAgaWYgKCFhcmdzLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIHByZXZlbnRMb2NrZWRTY3JvbGwoYXJncywgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxEZWx0YSA9IHdoZWVsRGVsdGFZKGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgLT0gc2Nyb2xsRGVsdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9ja2VkS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuUGFnZURvd24gfHwgYXJncy5rZXlDb2RlID09PSBLZXlzLlBhZ2VVcCkge1xuICAgICAgICAgICAgY29uc3QgZGlyID0gYXJncy5rZXlDb2RlID09PSBLZXlzLlBhZ2VEb3duID8gMSA6IC0xO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCArPSBlbGVtZW50Lm9mZnNldEhlaWdodCAqIGRpciAqIDAuODtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXRhaWxFeHBhbmQoeyBpbmRleCwgZXhwYW5kIH0pIHtcbiAgICAgICAgaWYgKGV4cGFuZCkge1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmV4cGFuZERldGFpbChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodFNlcnZpY2UuY29sbGFwc2VEZXRhaWwoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UudG90YWxIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb25WaWV3cG9ydCgpO1xuICAgIH1cbiAgICBhdHRhY2hDb250YWluZXJTY3JvbGwoKSB7XG4gICAgICAgIGlmIChpc1VuaXZlcnNhbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChmcm9tRXZlbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpLnBpcGUobWFwKChldmVudCkgPT4gZXZlbnQudGFyZ2V0KSwgZmlsdGVyKCgpID0+ICF0aGlzLnN1c3BlbmRTZXJ2aWNlLnNjcm9sbCksIHRhcCgodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbnRhaW5lclNjcm9sbCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uVmlld3BvcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbHVtblNjcm9sbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dWaWV3cG9ydCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2Uudmlld3BvcnQgfHwgRU1QVFlfT0JKRUNUO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblZpZXdwb3J0ID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jb2x1bW5WaWV3cG9ydCB8fCBFTVBUWV9PQkpFQ1Q7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50U2Nyb2xsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0OiB0YXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiB0YXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFJvdzogcm93Vmlld3BvcnQuZmlyc3RJdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGVuZFJvdzogcm93Vmlld3BvcnQubGFzdEl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW46IGNvbHVtblZpZXdwb3J0LmZpcnN0SXRlbUluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmRDb2x1bW46IGNvbHVtblZpZXdwb3J0Lmxhc3RJdGVtSW5kZXhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUodGhpcy5kaXNwYXRjaGVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLnJlZ2lzdGVyRW1pdHRlcih0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBcImJvZHlcIik7XG4gICAgfVxuICAgIGNyZWF0ZVNjcm9sbGVyKCkge1xuICAgICAgICB0aGlzLmNsZWFudXBTY3JvbGxlcigpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5zY3JvbGxlclxuICAgICAgICAgICAgLmNyZWF0ZSh0aGlzLnJvd0hlaWdodFNlcnZpY2UsIHRoaXMuc2tpcCwgdGhpcy50YWtlLCB0aGlzLnRvdGFsKTtcbiAgICAgICAgdGhpcy5za2lwU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2Nyb2xsZXJTdWJzY3JpcHRpb24gPSBvYnNlcnZhYmxlLnBpcGUoZmlsdGVyKCh4KSA9PiB4IGluc3RhbmNlb2YgUGFnZUFjdGlvbiksIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5za2lwU2Nyb2xsO1xuICAgICAgICAgICAgdGhpcy5za2lwU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gIXRlbXA7XG4gICAgICAgIH0pLCB0YXAoKCkgPT4gdGhpcy5yZWJpbmQgPSB0cnVlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh4KSkpO1xuICAgICAgICB0aGlzLnNjcm9sbGVyU3Vic2NyaXB0aW9uLmFkZChvYnNlcnZhYmxlLnBpcGUoZmlsdGVyKCh4KSA9PiB4IGluc3RhbmNlb2YgU2Nyb2xsQWN0aW9uKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5zY3JvbGwuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnNjcm9sbGVyU3Vic2NyaXB0aW9uLmFkZChvYnNlcnZhYmxlLnBpcGUoZmlsdGVyKCh4KSA9PiB4IGluc3RhbmNlb2YgU2Nyb2xsQm90dG9tQWN0aW9uKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zY3JvbGxCb3R0b20uZW1pdCgpKSk7XG4gICAgfVxuICAgIHNjcm9sbCh7IG9mZnNldCA9IDAgfSkge1xuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWwpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBtYXliZU5hdGl2ZUVsZW1lbnQodGhpcy50YWJsZSksXG4gICAgICAgICAgICAgICAgbWF5YmVOYXRpdmVFbGVtZW50KHRoaXMubG9ja2VkVGFibGUpXG4gICAgICAgICAgICBdLmZpbHRlcihpc1ByZXNlbnQpLmZvckVhY2godHJhbnNsYXRlWSh0aGlzLnJlbmRlcmVyLCBvZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCk7XG4gICAgfVxuICAgIG9uQ29udGFpbmVyU2Nyb2xsKHsgc2Nyb2xsVG9wIH0pIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIGlmICh0aGlzLmxvY2tlZENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5sb2NrZWRDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlSW5pdGlhbFNjcm9sbFRvU2tpcCgpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gKCkgPT4gdGhpcy5pc1ZpcnR1YWwgJiYgdGhpcy5za2lwID4gMCAmJiB0aGlzLnRvdGFsID4gMDtcbiAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5jaGFuZ2VOb3RpZmljYXRpb24uY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHNob3VsZFNjcm9sbCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyh7IHJvdzogdGhpcy5za2lwIH0pO1xuICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVSb3dTeW5jKCkge1xuICAgICAgICBjb25zdCBpc0xvY2tlZCA9ICgpID0+IGlzUHJlc2VudCh0aGlzLmxvY2tlZENvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IG9uU3RhYmxlID0gKCkgPT4gdGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uLmNoYW5nZXMsIHRoaXMuZ3JvdXBzU2VydmljZS5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoaXNMb2NrZWQpLCBzd2l0Y2hNYXBUbyhvblN0YWJsZSgpKSksIHRoaXMuZWRpdFNlcnZpY2UuY2hhbmdlZCwgdGhpcy5yZXNpemVTZXJ2aWNlLmNoYW5nZXMsIHRoaXMuY29sdW1uUmVzaXppbmdTZXJ2aWNlLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcihjaGFuZ2UgPT4gY2hhbmdlLnR5cGUgPT09ICdlbmQnKSksIHRoaXMuc3VwcG9ydFNlcnZpY2UuY2hhbmdlcylcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLnJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCkpLCBmaWx0ZXIoaXNMb2NrZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICB0aGlzLnN5bmNSb3dzSGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLnN5bmNDb250YWluZXJIZWlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMubG9ja2VkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgICAgICAvLyBmaXhlcyBzY3JvbGwgbGVmdCBwb3NpdGlvbiBpbiBJRSB3aGVuIGVkaXRpbmdcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVNlbnNvcnMuZm9yRWFjaChzZW5zb3IgPT4gc2Vuc29yLmFjY2VwdFNpemUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVSb3dOYXZpZ2F0aW9uTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VzLnBpcGUoZmlsdGVyKCgpID0+IGlzUHJlc2VudCh0aGlzLmxvY2tlZENvbnRhaW5lcikpLCBkZWxheSgxMCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoIDw9IGFyZ3MucHJldkNvbEluZGV4ICYmIGFyZ3MuY29sSW5kZXggPCB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGl2ZUNlbGw7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwgJiYgY2VsbC5jb2xJbmRleCArIGNlbGwuY29sU3BhbiA8IGFyZ3MucHJldkNvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2Nyb2xsVG9WaXJ0dWFsUm93KGl0ZW1JbmRleCkge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuZGV0YWlsVGVtcGxhdGUpKSB7XG4gICAgICAgICAgICBpdGVtSW5kZXggPSBNYXRoLmZsb29yKGl0ZW1JbmRleCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uVmlld3BvcnQoKTtcbiAgICB9XG4gICAgc2Nyb2xsVG8oeyByb3csIGNvbHVtbiB9KSB7XG4gICAgICAgIGlmIChpc051bWJlcihyb3cpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlydHVhbFJvdyhyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJvd0F0KHJvdywgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnJvd3MpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjb2x1bW4pKSB7XG4gICAgICAgICAgICBjb2x1bW4gLT0gdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubGVhZkNvbHVtbnNUb1JlbmRlcjtcbiAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjb2x1bW47IGlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb2x1bW5zW2lkeF0ud2lkdGggfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCA/IDAgOiB0aGlzLmdyb3Vwcy5sZW5ndGggKiBHUk9VUF9DRUxMX1dJRFRIICsgKHRoaXMuZGV0YWlsVGVtcGxhdGUgJiYgY29sdW1uID4gMCA/IEdST1VQX0NFTExfV0lEVEggOiAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLm5vcm1hbGl6ZVNjcm9sbExlZnQob2Zmc2V0ICsgc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sdW1uID09PSAwICYmIHRoaXMuZGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLm5vcm1hbGl6ZVNjcm9sbExlZnQoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHJvd0F0KDAsIHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5yb3dzKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNlbGxBdChjb2x1bW4sIGZpcnN0Um93LmNlbGxzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudFNjcm9sbExlZnQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzZXROYXZpZ2F0aW9uVmlld3BvcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250YWluZXIgfHwgIXRoaXMubmF2aWdhdGlvblNlcnZpY2UuZW5hYmxlZCB8fFxuICAgICAgICAgICAgIXRoaXMubmF2aWdhdGlvblNlcnZpY2UubmVlZHNWaWV3cG9ydCgpIHx8IHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgb2Zmc2V0SGVpZ2h0IH0gPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSBzY3JvbGxUb3AgKyBvZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGZpcnN0SXRlbUluZGV4ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KHNjcm9sbFRvcCk7XG4gICAgICAgIGxldCBsYXN0SXRlbUluZGV4ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KHNjcm9sbEJvdHRvbSk7XG4gICAgICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChsYXN0SXRlbUluZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW1PdmVyZmxvd3MgPSBsYXN0SXRlbU9mZnNldCArIHRoaXMucm93SGVpZ2h0ID4gc2Nyb2xsQm90dG9tO1xuICAgICAgICBpZiAobGFzdEl0ZW1JbmRleCA+IDAgJiYgbGFzdEl0ZW1PdmVyZmxvd3MpIHtcbiAgICAgICAgICAgIGxhc3RJdGVtSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmlld3BvcnRTdGFydCA9IGZpcnN0SXRlbUluZGV4O1xuICAgICAgICBsZXQgdmlld3BvcnRFbmQgPSBsYXN0SXRlbUluZGV4O1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuZGV0YWlsVGVtcGxhdGUpKSB7XG4gICAgICAgICAgICB2aWV3cG9ydFN0YXJ0ICo9IDI7XG4gICAgICAgICAgICB2aWV3cG9ydEVuZCAqPSAyO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RJdGVtSGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChmaXJzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICBpZiAoZmlyc3RJdGVtSGVpZ2h0ICsgdGhpcy5yb3dIZWlnaHQgPCBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFN0YXJ0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbUhlaWdodCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5oZWlnaHQobGFzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbUV4cGFuZGVkID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmlzRXhwYW5kZWQobGFzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbURldGFpbE92ZXJmbG93cyA9IGxhc3RJdGVtT2Zmc2V0ICsgbGFzdEl0ZW1IZWlnaHQgPiBzY3JvbGxCb3R0b207XG4gICAgICAgICAgICBpZiAobGFzdEl0ZW1FeHBhbmRlZCAmJiAhbGFzdEl0ZW1EZXRhaWxPdmVyZmxvd3MpIHtcbiAgICAgICAgICAgICAgICB2aWV3cG9ydEVuZCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uuc2V0Vmlld3BvcnQodmlld3BvcnRTdGFydCwgdmlld3BvcnRFbmQpO1xuICAgIH1cbiAgICBjbGVhbnVwU2Nyb2xsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRSZXNpemVTZXJ2aWNlKCkge1xuICAgICAgICB0aGlzLnJlc2l6ZVNlcnZpY2UuY29ubmVjdChtZXJnZSguLi50aGlzLnJlc2l6ZVNlbnNvcnMubWFwKHNlbnNvciA9PiBzZW5zb3IucmVzaXplKSkpO1xuICAgIH1cbiAgICBzeW5jQ29udGFpbmVySGVpZ2h0KCkge1xuICAgICAgICBbbWF5YmVOYXRpdmVFbGVtZW50KHRoaXMubG9ja2VkQ29udGFpbmVyKV1cbiAgICAgICAgICAgIC5maWx0ZXIoaXNQcmVzZW50KVxuICAgICAgICAgICAgLm1hcChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGlmIChoYXNTY3JvbGxiYXIodGhpcy50YWJsZSwgdGhpcy5jb250YWluZXIpKSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0IC09IHRoaXMuc3VwcG9ydFNlcnZpY2Uuc2Nyb2xsYmFyV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlbCwgaGVpZ2h0IH07XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZm9yRWFjaChzZXRIZWlnaHQkMSh0aGlzLnJlbmRlcmVyKSk7XG4gICAgfVxuICAgIHVwZGF0ZVZpZXdwb3J0Q29sdW1ucyhyYW5nZSkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm5vbkxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKTtcbiAgICAgICAgbGV0IHsgc3RhcnRJZHgsIGVuZElkeCwgb2Zmc2V0IH0gPSByYW5nZSB8fCB0aGlzLmNhbGN1bGF0ZVZpZXdwb3J0Q29sdW1ucygpO1xuICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHN0YXJ0SWR4IC0gYnVmZmVyU2l6ZSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGVuZElkeCArIGJ1ZmZlclNpemUsIGNvbHVtbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGlmIChzdGFydCA8IHN0YXJ0SWR4KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSBzdGFydElkeCAtIDE7IGlkeCA+PSBzdGFydDsgaWR4LS0pIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgLT0gY29sdW1uc1tpZHhdLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1ucyA9IGNvbHVtbnMuc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0Q29sdW1uc1dpZHRoID0gY3VycmVudENvbHVtbnMucmVkdWNlKCh0b3RhbCwgY29sdW1uKSA9PiB0b3RhbCArIGNvbHVtbi53aWR0aCwgMCk7XG4gICAgICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldENvbHVtbiA9IG5ldyBDb2x1bW5CYXNlJDEoKTtcbiAgICAgICAgICAgIG9mZnNldENvbHVtbi53aWR0aCA9IG9mZnNldDtcbiAgICAgICAgICAgIGN1cnJlbnRDb2x1bW5zLnVuc2hpZnQob2Zmc2V0Q29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdwb3J0Q29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydENvbHVtbnMucmVzZXQoY3VycmVudENvbHVtbnMpO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGFydElkeCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmNvbHVtbnNFbmRJZHggPSBlbmQ7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mby5jb2x1bW5SYW5nZUNoYW5nZS5lbWl0KHsgc3RhcnQsIGVuZCwgb2Zmc2V0IH0pO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtblZpZXdwb3J0KHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUNvbHVtblNjcm9sbCgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmNhbGN1bGF0ZVZpZXdwb3J0Q29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5WaWV3cG9ydChyYW5nZS5zdGFydElkeCwgcmFuZ2UuZW5kSWR4KTtcbiAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydElkeCA8IHRoaXMuY29sdW1uc1N0YXJ0SWR4IHx8IHRoaXMuY29sdW1uc0VuZElkeCA8IHJhbmdlLmVuZElkeCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuY29sdW1uVXBkYXRlRnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uVXBkYXRlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydENvbHVtbnMocmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQ29sdW1uVmlld3BvcnQoc3RhcnRJZHgsIGVuZElkeCkge1xuICAgICAgICBjb25zdCBsb2NrZWRDb3VudCA9IHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBsZWFmQ29sdW1ucyQkMSA9IHRoaXMubm9uTG9ja2VkTGVhZkNvbHVtbnMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydFN0YXJ0ID0gbG9ja2VkQ291bnQgKyBzdGFydElkeCArICh0aGlzLmRldGFpbFRlbXBsYXRlICYmIHN0YXJ0SWR4ID4gMCA/IDEgOiAwKTtcbiAgICAgICAgbGV0IHZpZXdwb3J0RW5kID0gbG9ja2VkQ291bnQgKyBlbmRJZHggKyAodGhpcy5kZXRhaWxUZW1wbGF0ZSA/IDEgOiAwKTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGVhZkNvbHVtbnMkJDEubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gbGVhZkNvbHVtbnMkJDFbaWR4XTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgdmlld3BvcnRFbmQgKz0gY29sdW1uLmNoaWxkQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRDb2x1bW5WaWV3cG9ydCh2aWV3cG9ydFN0YXJ0LCB2aWV3cG9ydEVuZCk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZVZpZXdwb3J0Q29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBjbGllbnRXaWR0aCB9ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5ub25Mb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTY3JvbGxMZWZ0ID0gdGhpcy5ub3JtYWxpemVTY3JvbGxMZWZ0KHNjcm9sbExlZnQpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydEVuZCA9IG5vcm1hbGl6ZWRTY3JvbGxMZWZ0ICsgY2xpZW50V2lkdGg7XG4gICAgICAgIGxldCBzdGFydElkeDtcbiAgICAgICAgbGV0IGVuZElkeCA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50ID0gMDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGxldCBpZHg7XG4gICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgY29sdW1ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2lkeF07XG4gICAgICAgICAgICBjdXJyZW50ICs9IGNvbHVtbi53aWR0aCB8fCAwO1xuICAgICAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSB1bmRlZmluZWQgJiYgY3VycmVudCA+IG5vcm1hbGl6ZWRTY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJZHggPSBpZHg7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gY3VycmVudCAtIChjb2x1bW4ud2lkdGggfHwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudCA+PSB2aWV3cG9ydEVuZCkge1xuICAgICAgICAgICAgICAgIGVuZElkeCA9IGlkeDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuZElkeCAmJiBpZHggPiAwKSB7XG4gICAgICAgICAgICBlbmRJZHggPSBjb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhcnRJZHgsIGVuZElkeCwgb2Zmc2V0IH07XG4gICAgfVxuICAgIHZpZXdwb3J0V2lkdGhDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IHRoaXMudmlld3BvcnRDb2x1bW5zLnRvQXJyYXkoKS5yZWR1Y2UoKHRvdGFsLCBjb2x1bW4pID0+IHRvdGFsICsgY29sdW1uLndpZHRoLCAwKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRXaWR0aCAhPT0gdGhpcy52aWV3cG9ydENvbHVtbnNXaWR0aDtcbiAgICB9XG4gICAgbm9ybWFsaXplU2Nyb2xsTGVmdChwb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5ydGwgPyBydGxTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy5zdXBwb3J0U2VydmljZS5ydGxTY3JvbGxMZWZ0KSA6IHBvc2l0aW9uO1xuICAgIH1cbiAgICBlbGVtZW50U2Nyb2xsTGVmdChlbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnJ0bCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplU2Nyb2xsTGVmdCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIC0gZWxlbWVudC5vZmZzZXRMZWZ0IC0gZWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0TGVmdDtcbiAgICB9XG59XG5MaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFNDUk9MTEVSX0ZBQ1RPUllfVE9LRU4sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogREVGQVVMVF9TQ1JPTExFUl9GQUNUT1JZXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1saXN0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgI2xvY2tlZENvbnRhaW5lciBjbGFzcz1cImstZ3JpZC1jb250ZW50LWxvY2tlZFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAqbmdJZj1cImlzTG9ja2VkXCIgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAga2V5ZG93bjogbG9ja2VkS2V5ZG93bixcbiAgICAgICAgICAgIHNjcm9sbDogbG9ja2VkU2Nyb2xsLFxuICAgICAgICAgICAgbW91c2V3aGVlbDogbG9ja2VkTW91c2V3aGVlbCxcbiAgICAgICAgICAgIERPTU1vdXNlU2Nyb2xsOiBsb2NrZWRNb3VzZXdoZWVsXG4gICAgICAgIH1cIlxuICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgID5cbiAgICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJrLWdyaWQtdGFibGUtd3JhcFwiPlxuICAgICAgICAgICAgPHRhYmxlIFtsb2NrZWRdPVwidHJ1ZVwiICNsb2NrZWRUYWJsZSBjbGFzcz1cImstZ3JpZC10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbc3R5bGUud2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICAgIDx0Ym9keSBrZW5kb0dyaWRUYWJsZUJvZHlcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9ja2VkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW25vUmVjb3Jkc1RleHRdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbnNDb3VudF09XCJsZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0dyb3VwRm9vdGVyc109XCJzaG93Rm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJ0cmFja0J5XCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPGtlbmRvLXJlc2l6ZS1zZW5zb3I+PC9rZW5kby1yZXNpemUtc2Vuc29yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstaGVpZ2h0LWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj48ZGl2ICNjb250YWluZXJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWNvbnRlbnQgay12aXJ0dWFsLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgW2tlbmRvR3JpZFJlc2l6YWJsZUNvbnRhaW5lcl09XCJsb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgW2xvY2tlZFdpZHRoXT1cImxvY2tlZFdpZHRoICsgMVwiPlxuICAgICAgICA8ZGl2IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cImstZ3JpZC10YWJsZS13cmFwXCI+XG4gICAgICAgICAgICA8dGFibGUgW3N0eWxlLndpZHRoLnB4XT1cIm5vbkxvY2tlZFdpZHRoXCIgI3RhYmxlIFt2aXJ0dWFsQ29sdW1uc109XCJ2aXJ0dWFsQ29sdW1uc1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLXRhYmxlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgIDxjb2xncm91cCBrZW5kb0dyaWRDb2xHcm91cFxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJpc0xvY2tlZCA/IFtdIDogZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgICAgICA8dGJvZHkga2VuZG9HcmlkVGFibGVCb2R5XG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbc2tpcEdyb3VwRGVjb3JhdGlvbl09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93R3JvdXBGb290ZXJzXT1cInNob3dGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXJcIlxuICAgICAgICAgICAgICAgICAgICBbYWxsQ29sdW1uc109XCJub25Mb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub1JlY29yZHNUZW1wbGF0ZV09XCJub1JlY29yZHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrZWRDb2x1bW5zQ291bnRdPVwibG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ29sdW1uc0NvdW50XT1cImxlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtza2lwXT1cInNraXBcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbdmlydHVhbENvbHVtbnNdPVwidmlydHVhbENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxrZW5kby1yZXNpemUtc2Vuc29yICpuZ0lmPVwiaXNMb2NrZWRcIj48L2tlbmRvLXJlc2l6ZS1zZW5zb3I+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8a2VuZG8tcmVzaXplLXNlbnNvciAqbmdJZj1cImlzTG9ja2VkIHx8IHZpcnR1YWxDb2x1bW5zXCI+PC9rZW5kby1yZXNpemUtc2Vuc29yPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1oZWlnaHQtY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidmlydHVhbENvbHVtbnNcIiBjbGFzcz1cImstd2lkdGgtY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwidG90YWxXaWR0aFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGtlbmRvR3JpZExvYWRpbmc+XG4gICAgPC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5MaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtTQ1JPTExFUl9GQUNUT1JZX1RPS0VOLF0gfV0gfSxcbiAgICB7IHR5cGU6IERldGFpbHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VOb3RpZmljYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTdXNwZW5kU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IFNjcm9sbFN5bmNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZXNpemVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogQnJvd3NlclN1cHBvcnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogU2Nyb2xsUmVxdWVzdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlc2l6aW5nU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBERlNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH1cbl07XG5MaXN0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstZ3JpZC1jb250YWluZXJcIixdIH1dLFxuICAgIGhvc3RSb2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiYXR0ci5yb2xlXCIsXSB9XSxcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvdGFsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb3dIZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFJvd0hlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFrZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2tpcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vUmVjb3Jkc1RlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvd0NsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2FkaW5nOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0cmFja0J5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aXJ0dWFsQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNWaXJ0dWFsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb250ZW50U2Nyb2xsOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGFnZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNjcm9sbEJvdHRvbTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJjb250YWluZXJcIiwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGxvY2tlZENvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJsb2NrZWRDb250YWluZXJcIixdIH1dLFxuICAgIGxvY2tlZFRhYmxlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtcImxvY2tlZFRhYmxlXCIsXSB9XSxcbiAgICB0YWJsZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJ0YWJsZVwiLF0gfV0sXG4gICAgcmVzaXplU2Vuc29yczogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbUmVzaXplU2Vuc29yQ29tcG9uZW50LF0gfV1cbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBpbi1tZW1vcnkgaGFuZGxpbmcgb2YgZGF0YSBvcGVyYXRpb25zIHN1Y2ggYXMgW3BhZ2luZ10oeyUgc2x1ZyBwYWdpbmdfZ3JpZCAlfSksXG4gKiBbc29ydGluZ10oeyUgc2x1ZyBzb3J0aW5nX2dyaWQgJX0pLCBhbmQgW2dyb3VwaW5nXSh7JSBzbHVnIGdyb3VwaW5nYmFzaWNzX2dyaWQgJX0pXG4gKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzXSh7JSBzbHVnIGF1dG9tYXRpY29wZXJhdGlvbnNfZ3JpZCAlfSkpLlxuICovXG5jbGFzcyBEYXRhQmluZGluZ0RpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCwgY2hhbmdlRGV0ZWN0b3IsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc2tpcDogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFtdO1xuICAgICAgICBpZiAobG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMucmViaW5kLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG51bWJlciBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBza2lwcGVkIGJ5IHRoZSBwYWdlci5cbiAgICAgKi9cbiAgICBzZXQgc2tpcCh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuc2tpcCA9IHRoaXMuc3RhdGUuc2tpcCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBkZXNjcmlwdG9ycyBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIHNvcnRlZC5cbiAgICAgKi9cbiAgICBzZXQgc29ydCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmdyaWQuc29ydCA9IHRoaXMuc3RhdGUuc29ydCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBkZXNjcmlwdG9yIGJ5IHdoaWNoIHRoZSBkYXRhIHdpbGwgYmUgZmlsdGVyZWQuXG4gICAgICovXG4gICAgc2V0IGZpbHRlcih2YWx1ZSkge1xuICAgICAgICB0aGlzLmdyaWQuZmlsdGVyID0gdGhpcy5zdGF0ZS5maWx0ZXIgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgcGFnZSBzaXplIHVzZWQgYnkgdGhlIEdyaWQgcGFnZXIuXG4gICAgICovXG4gICAgc2V0IHBhZ2VTaXplKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5wYWdlU2l6ZSA9IHRoaXMuc3RhdGUudGFrZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZGVzY3JpcHRvcnMgYnkgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBncm91cGVkLlxuICAgICAqL1xuICAgIHNldCBncm91cCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmdyaWQuZ3JvdXAgPSB0aGlzLnN0YXRlLmdyb3VwID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBkYXRhIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgR3JpZC5cbiAgICAgKi9cbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHZhbHVlIHx8IFtdO1xuICAgICAgICBpZiAodGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZS5kYXRhID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hcHBseVN0YXRlKHRoaXMuc3RhdGUpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5ncmlkXG4gICAgICAgICAgICAuZGF0YVN0YXRlQ2hhbmdlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGFueUNoYW5nZWQoW1wicGFnZVNpemVcIiwgXCJza2lwXCIsIFwic29ydFwiLCBcImdyb3VwXCIsIFwiZmlsdGVyXCJdLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5yZWJpbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uU3RhdGVDaGFuZ2Uoc3RhdGUkJDEpIHtcbiAgICAgICAgdGhpcy5hcHBseVN0YXRlKHN0YXRlJCQxKTtcbiAgICAgICAgdGhpcy5yZWJpbmQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlYmluZCgpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZERhdGEoKTtcbiAgICAgICAgdGhpcy5ub3RpZnlEYXRhQ2hhbmdlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIHRoZSBHcmlkIHRoYXQgaXRzIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICovXG4gICAgbm90aWZ5RGF0YUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLm9uRGF0YUNoYW5nZSgpO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzKHN0YXRlJCQxKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzKHRoaXMub3JpZ2luYWxEYXRhLCBzdGF0ZSQkMSk7XG4gICAgfVxuICAgIGFwcGx5U3RhdGUoeyBza2lwLCB0YWtlOiB0YWtlJCQxLCBzb3J0LCBncm91cCwgZmlsdGVyOiBmaWx0ZXIkJDEgfSkge1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGFrZSQkMTtcbiAgICAgICAgdGhpcy5zb3J0ID0gc29ydDtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlciQkMTtcbiAgICB9XG4gICAgdXBkYXRlR3JpZERhdGEoKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5kYXRhID0gdGhpcy5wcm9jZXNzKHRoaXMuc3RhdGUpO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxufVxuRGF0YUJpbmRpbmdEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRCaW5kaW5nXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0YUJpbmRpbmdEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfVxuXTtcbkRhdGFCaW5kaW5nRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHNraXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZVNpemU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogW1wia2VuZG9HcmlkQmluZGluZ1wiLF0gfV1cbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggc3RvcmVzIHRoZSByb3cgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBHcmlkIGluIG1lbW9yeVxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2MtZHVyaW5nLWRhdGEtb3BlcmF0aW9ucykpLlxuICovXG5jbGFzcyBTZWxlY3Rpb25EaXJlY3RpdmUgZXh0ZW5kcyBTZWxlY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGNkKSB7XG4gICAgICAgIHN1cGVyKGdyaWQsIGNkKTtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0YWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvbkRpcmVjdGl2ZSA9IHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblNlbGVjdGlvbkRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFNlbGVjdEJ5XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU2VsZWN0aW9uRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBjb250cm9scyB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIG1hc3RlciBkZXRhaWwgcm93cy5cbiAqL1xuY2xhc3MgRXhwYW5kRGV0YWlsc0RpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgZXhwYW5kZWREZXRhaWxLZXlzIGFyZSBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRlZERldGFpbEtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xsZWN0aW9uIHRoYXQgd2lsbCBzdG9yZSB0aGUgZXhwYW5kZWQga2V5cy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGl0ZW1zIHNob3VsZCBiZSBpbml0aWFsbHkgZXhwYW5kZWQuXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluaXRpYWxseUV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5ncmlkLmlzRGV0YWlsRXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChtZXJnZSh0aGlzLmdyaWQuZGV0YWlsRXhwYW5kLnBpcGUobWFwKGUgPT4gKE9iamVjdC5hc3NpZ24oeyBleHBhbmQ6IHRydWUgfSwgZSkpKSksIHRoaXMuZ3JpZC5kZXRhaWxDb2xsYXBzZS5waXBlKG1hcChlID0+IChPYmplY3QuYXNzaWduKHsgZXhwYW5kOiBmYWxzZSB9LCBlKSkpKSkuc3Vic2NyaWJlKHRoaXMudG9nZ2xlU3RhdGUuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBpdGVtIGtleSB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIHRoZSBgZXhwYW5kZWREZXRhaWxLZXlzYCBjb2xsZWN0aW9uIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgbWFzdGVyX2RldGFpbF9leHBhbmRlZF9zdGF0ZV9ncmlkICV9I3RvYy1idWlsdC1pbi1kaXJlY3RpdmUpKS5cbiAgICAgKi9cbiAgICBnZXQgZXhwYW5kRGV0YWlsc0tleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZEJ5O1xuICAgIH1cbiAgICBzZXQgZXhwYW5kRGV0YWlsc0tleShrZXkpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZEJ5ID0gZ2V0dGVyKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRCeSA9IGtleTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBIGRlcHJlY2F0ZWQgYWxpYXMgZm9yIHNldHRpbmcgdGhlIGBleHBhbmREZXRhaWxzS2V5YCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBnZXQgZXhwYW5kRGV0YWlsQnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZERldGFpbHNLZXk7XG4gICAgfVxuICAgIHNldCBleHBhbmREZXRhaWxCeShrZXkpIHtcbiAgICAgICAgdGhpcy5leHBhbmREZXRhaWxzS2V5ID0ga2V5O1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGdldCBrZXlHZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRCeSB8fCBnZXR0ZXIodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzRXhwYW5kZWQoYXJncykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmtleUdldHRlcihhcmdzLmRhdGFJdGVtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzLmluZGV4T2Yoa2V5KSA+IC0xID8gIXRoaXMuaW5pdGlhbGx5RXhwYW5kZWQgOiB0aGlzLmluaXRpYWxseUV4cGFuZGVkO1xuICAgIH1cbiAgICB0b2dnbGVTdGF0ZShhcmdzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5R2V0dGVyKGFyZ3MuZGF0YUl0ZW0pO1xuICAgICAgICBpZiAoQm9vbGVhbih0aGlzLmluaXRpYWxseUV4cGFuZGVkKSAhPT0gYXJncy5leHBhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5leHBhbmRlZERldGFpbEtleXMuaW5kZXhPZihrZXkpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZERldGFpbEtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cGFuZGVkRGV0YWlsS2V5c0NoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzKTtcbiAgICB9XG59XG5FeHBhbmREZXRhaWxzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRXhwYW5kRGV0YWlsc0J5XScsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0dyaWRFeHBhbmREZXRhaWxzQnknXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkV4cGFuZERldGFpbHNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH1cbl07XG5FeHBhbmREZXRhaWxzRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGV4cGFuZGVkRGV0YWlsS2V5c0NoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGV4cGFuZERldGFpbHNLZXk6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2tlbmRvR3JpZEV4cGFuZERldGFpbHNCeScsXSB9XSxcbiAgICBleHBhbmREZXRhaWxCeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXhwYW5kZWREZXRhaWxLZXlzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbml0aWFsbHlFeHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbk1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGdyb3VwUGFuZWxFbXB0eTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm9SZWNvcmRzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlckZpcnN0UGFnZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZXJMYXN0UGFnZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZXJQcmV2aW91c1BhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyTmV4dFBhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyUGFnZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZXJJdGVtc1BlclBhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyT2Y6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VySXRlbXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyUGFnZU51bWJlcklucHV0VGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyRXFPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyTm90RXFPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVySXNOdWxsT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcklzTm90TnVsbE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJJc0VtcHR5T3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcklzTm90RW1wdHlPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyU3RhcnRzV2l0aE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJDb250YWluc09wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJOb3RDb250YWluc09wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJFbmRzV2l0aE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJHdGVPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyR3RPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyTHRlT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckx0T3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcklzVHJ1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVySXNGYWxzZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQm9vbGVhbkFsbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQWZ0ZXJPckVxdWFsT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckFmdGVyT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckJlZm9yZU9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJCZWZvcmVPckVxdWFsT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckZpbHRlckJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQ2xlYXJCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckFuZExvZ2ljOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJPckxvZ2ljOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2FkaW5nOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5NZW51OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB1bmxvY2s6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0QXNjZW5kaW5nOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0RGVzY2VuZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGVkQXNjZW5kaW5nOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0ZWREZXNjZW5kaW5nOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0ZWREZWZhdWx0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zQXBwbHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnNSZXNldDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsRXhwYW5kOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxDb2xsYXBzZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyRGF0ZVRvZGF5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJEYXRlVG9nZ2xlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJOdW1lcmljRGVjcmVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJOdW1lcmljSW5jcmVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5Mb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXNcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ2xvYmFsaXphdGlvbl9ncmlkICV9I3RvYy1sb2NhbGl6YXRpb24pKS5cbiAqL1xuY2xhc3MgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyUm93Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlclJvd0NsYXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maWx0ZXJMYWJlbCA9IHRoaXMubG9jYWxpemF0aW9uLmdldCgnZmlsdGVyJyk7XG4gICAgfVxufVxuRmlsdGVyUm93Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRmlsdGVyUm93XScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgIDx0ZFxuICAgICAgICAgW2NsYXNzLmstZ3JvdXAtY2VsbF09XCJ0cnVlXCJcbiAgICAgICAgICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiXG4gICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICA8L3RkPlxuICAgICAgPHRkXG4gICAgICAgICBbY2xhc3Muay1oaWVyYXJjaHktY2VsbF09XCJ0cnVlXCJcbiAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgY29sdW1uSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmaWx0ZXJMYWJlbFwiXG4gICAgICAgICAga2VuZG9HcmlkRmlsdGVyQ2VsbFxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleFwiXG4gICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImxvY2tlZENvbHVtbnNDb3VudCArIGNvbHVtbkluZGV4XCJcbiAgICAgID48L3RkPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyUm93Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuRmlsdGVyUm93Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWRDb2x1bW5zQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclJvd0NsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlci1yb3cnLF0gfV1cbn07XG5cbmNvbnN0IGFyZURpZmZlcmVudCA9IChhLCBiKSA9PiBhLmZpZWxkICE9PSBiLmZpZWxkIHx8IGEub3BlcmF0b3IgIT09IGIub3BlcmF0b3IgfHwgYS52YWx1ZSAhPT0gYi52YWx1ZTtcbmNvbnN0IGlzQ2hhbmdlZCQxID0gKGEsIGIpID0+IHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpZHggPSAwLCBsZW4gPSBhLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgICAgICBjb25zdCBwcmV2ID0gYVtpZHhdO1xuICAgICAgICBjb25zdCBjdXJyID0gYltpZHhdO1xuICAgICAgICBpZiAoaXNDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yKHByZXYpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gICAgICAgICAgICBpZiAoZGlmZkZpbHRlcnMocHJldiwgY3VycltpZHhdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZURpZmZlcmVudChwcmV2LCBjdXJyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IGNvcHlPYmplY3QgPSAob2JqKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIG9iaik7XG4gICAgaWYgKG9iai5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IHByb3RvID0gb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgIT09ICdjb25zdHJ1Y3RvcicgJiYgcHJvdG8uaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IG9ialtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNsb25lRmlsdGVyID0gKGZpbHRlciQkMSkgPT4gY29weU9iamVjdChmaWx0ZXIkJDEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNsb25lRmlsdGVycyA9IChmaWx0ZXIkJDEpID0+IHtcbiAgICBpZiAoIWZpbHRlciQkMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3IoZmlsdGVyJCQxKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsdGVyczogY2xvbmVGaWx0ZXJzKGZpbHRlciQkMS5maWx0ZXJzKSxcbiAgICAgICAgICAgIGxvZ2ljOiBmaWx0ZXIkJDEubG9naWNcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIkJDEpKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIkJDEubWFwKGNsb25lRmlsdGVycyk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZUZpbHRlcihmaWx0ZXIkJDEpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkaWZmRmlsdGVycyA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGlzUHJlc2VudChhKSAmJiAhaXNQcmVzZW50KGIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWlzUHJlc2VudChhKSAmJiBpc1ByZXNlbnQoYikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc1ByZXNlbnQoYSkgJiYgaXNQcmVzZW50KGIpICYmIGlzQ2hhbmdlZCQxKGEuZmlsdGVycywgYi5maWx0ZXJzKTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0ID0ge307XG4gICAgfVxuICAgIGdldCBmaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gICAgfVxuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gY2xvbmVGaWx0ZXJzKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHRlbXBsYXRlQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHQuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHRbXCIkaW1wbGljaXRcIl0gPSB0aGlzLmZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29udGV4dDtcbiAgICB9XG4gICAgZ2V0IGhhc1RlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuY29sdW1uLmZpbHRlckNlbGxUZW1wbGF0ZVJlZik7XG4gICAgfVxuICAgIGdldCBpc0ZpbHRlcmFibGUoKSB7XG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQodGhpcy5jb2x1bW4pICYmICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuY29sdW1uLmZpZWxkKSAmJiB0aGlzLmNvbHVtbi5maWx0ZXJhYmxlO1xuICAgIH1cbn1cbkZpbHRlckNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRGaWx0ZXJDZWxsXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzRmlsdGVyYWJsZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGFzVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvRmlsdGVyQ2VsbEhvc3QgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZpbHRlckNlbGxUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidGVtcGxhdGVDb250ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5GaWx0ZXJDZWxsQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuY29uc3QgbG9jYWxpemVPcGVyYXRvcnMgPSBvcGVyYXRvcnMgPT4gbG9jYWxpemF0aW9uID0+IE9iamVjdC5rZXlzKG9wZXJhdG9ycykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1tvcGVyYXRvcnNba2V5XV0gPSBsb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuY29uc3Qgb3BlcmF0b3JUZXh0cyA9IGxvY2FsaXplT3BlcmF0b3JzKHtcbiAgICBcImZpbHRlckVxT3BlcmF0b3JcIjogXCJlcVwiLFxuICAgIFwiZmlsdGVyTm90RXFPcGVyYXRvclwiOiBcIm5lcVwiLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbiAgICBcImZpbHRlckd0ZU9wZXJhdG9yXCI6IFwiZ3RlXCIsXG4gICAgXCJmaWx0ZXJHdE9wZXJhdG9yXCI6IFwiZ3RcIixcbiAgICBcImZpbHRlckx0ZU9wZXJhdG9yXCI6IFwibHRlXCIsXG4gICAgXCJmaWx0ZXJMdE9wZXJhdG9yXCI6IFwibHRcIixcbiAgICBcImZpbHRlcklzTnVsbE9wZXJhdG9yXCI6IFwiaXNudWxsXCIsXG4gICAgXCJmaWx0ZXJJc05vdE51bGxPcGVyYXRvclwiOiBcImlzbm90bnVsbFwiLFxuICAgIFwiZmlsdGVySXNFbXB0eU9wZXJhdG9yXCI6IFwiaXNlbXB0eVwiLFxuICAgIFwiZmlsdGVySXNOb3RFbXB0eU9wZXJhdG9yXCI6IFwiaXNub3RlbXB0eVwiLFxuICAgIFwiZmlsdGVyQ29udGFpbnNPcGVyYXRvclwiOiBcImNvbnRhaW5zXCIsXG4gICAgXCJmaWx0ZXJOb3RDb250YWluc09wZXJhdG9yXCI6IFwiZG9lc25vdGNvbnRhaW5cIixcbiAgICBcImZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvclwiOiBcInN0YXJ0c3dpdGhcIixcbiAgICBcImZpbHRlckVuZHNXaXRoT3BlcmF0b3JcIjogXCJlbmRzd2l0aFwiLFxuICAgIFwiZmlsdGVyQWZ0ZXJPckVxdWFsT3BlcmF0b3JcIjogXCJhZnRlci1lcVwiLFxuICAgIFwiZmlsdGVyQWZ0ZXJPcGVyYXRvclwiOiBcImFmdGVyXCIsXG4gICAgXCJmaWx0ZXJCZWZvcmVPckVxdWFsT3BlcmF0b3JcIjogXCJiZWZvcmUtZXFcIixcbiAgICBcImZpbHRlckJlZm9yZU9wZXJhdG9yXCI6IFwiYmVmb3JlXCJcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvSlNPTiA9ICh4cykgPT4geHMubWFwKHggPT4geC50b0pTT04oKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBvcGVyYXRvclRleHRzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5fdGV4dCA9IHRoaXMubWVzc2FnZXNbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMucmVmcmVzaFRleHQuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGRyb3AtZG93biBsaXN0LlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlck9mIEZpbHRlck9wZXJhdG9yQmFzZVxuICAgICAqL1xuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBzZXQgdGV4dCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl90ZXh0ID0gaXNOdWxsT3JFbXB0eVN0cmluZyh2YWx1ZSkgPyB0aGlzLm1lc3NhZ2VzW3RoaXMub3BlcmF0b3JdIDogdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5vcGVyYXRvclxuICAgICAgICB9O1xuICAgIH1cbiAgICByZWZyZXNoVGV4dCgpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gdGhpcy5fdGV4dCA9PT0gdGhpcy5tZXNzYWdlc1t0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG9wZXJhdG9yVGV4dHModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90ZXh0ID0gdGhpcy5tZXNzYWdlc1t0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkZpbHRlck9wZXJhdG9yQmFzZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuY29uc3QgaW5zZXJ0RGVmYXVsdEZpbHRlciA9IChpbmRleCwgcm9vdEZpbHRlciwgZmlsdGVyJCQxKSA9PiB7XG4gICAgcm9vdEZpbHRlciA9IChyb290RmlsdGVyIHx8IHsgZmlsdGVyczogW10sIGxvZ2ljOiBcImFuZFwiIH0pO1xuICAgIHJvb3RGaWx0ZXIuZmlsdGVyc1tpbmRleF0gPSBmaWx0ZXIkJDE7XG4gICAgcmV0dXJuIGZpbHRlciQkMTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc2V0RmlsdGVyID0gKGluZGV4LCBmaWx0ZXIkJDEsIGZpZWxkLCBkZWZhdWx0T3BlcmF0b3IpID0+IHtcbiAgICBpZiAoaXNQcmVzZW50KGZpbHRlciQkMSkgJiYgaXNQcmVzZW50KGZpbHRlciQkMS5maWx0ZXJzKSAmJiBmaWx0ZXIkJDEuZmlsdGVycy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyJCQxLmZpbHRlcnNbaW5kZXhdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc2VydERlZmF1bHRGaWx0ZXIoaW5kZXgsIGZpbHRlciQkMSwge1xuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogZGVmYXVsdE9wZXJhdG9yXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbG9naWNPcGVyYXRvcnMgPSAobG9jYWxpemF0aW9uKSA9PiBbXG4gICAgeyB0ZXh0OiBsb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyQW5kTG9naWNcIiksIHZhbHVlOiBcImFuZFwiIH0sXG4gICAgeyB0ZXh0OiBsb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyT3JMb2dpY1wiKSwgdmFsdWU6IFwib3JcIiB9XG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZsYXR0ZW4gPSAoZmlsdGVyJCQxKSA9PiB7XG4gICAgaWYgKGlzUHJlc2VudChmaWx0ZXIkJDEuZmlsdGVycykpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciQkMS5maWx0ZXJzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MuY29uY2F0KGlzQ29tcG9zaXRlRmlsdGVyRGVzY3JpcHRvcihjdXJyKSA/IGZsYXR0ZW4oY3VycikgOiBbY3Vycl0pLCBbXSk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn07XG5jb25zdCB0cmltRmlsdGVyQnlGaWVsZCA9IChmaWx0ZXIkJDEsIGZpZWxkKSA9PiB7XG4gICAgaWYgKGlzUHJlc2VudChmaWx0ZXIkJDEpICYmIGlzUHJlc2VudChmaWx0ZXIkJDEuZmlsdGVycykpIHtcbiAgICAgICAgZmlsdGVyJCQxLmZpbHRlcnMgPSBmaWx0ZXIkJDEuZmlsdGVycy5maWx0ZXIoeCA9PiB7XG4gICAgICAgICAgICBpZiAoaXNDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yKHgpKSB7XG4gICAgICAgICAgICAgICAgdHJpbUZpbHRlckJ5RmllbGQoeCwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB4LmZpbHRlcnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZmllbGQgIT09IGZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZpbHRlcnNCeUZpZWxkID0gKGZpbHRlciQkMSwgZmllbGQpID0+IGZsYXR0ZW4oZmlsdGVyJCQxIHx8IHt9KS5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZmlsdGVyQnlGaWVsZCA9IChmaWx0ZXIkJDEsIGZpZWxkKSA9PiB7XG4gICAgbGV0IFtjdXJyZW50RmlsdGVyXSA9IGZpbHRlcnNCeUZpZWxkKGZpbHRlciQkMSwgZmllbGQpO1xuICAgIHJldHVybiBjdXJyZW50RmlsdGVyO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCByZW1vdmVGaWx0ZXIgPSAoZmlsdGVyJCQxLCBmaWVsZCkgPT4ge1xuICAgIHRyaW1GaWx0ZXJCeUZpZWxkKGZpbHRlciQkMSwgZmllbGQpO1xuICAgIHJldHVybiBmaWx0ZXIkJDE7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGxvY2FsaXplT3BlcmF0b3JzJDEgPSBvcGVyYXRvcnMgPT4gbG9jYWxpemF0aW9uID0+IE9iamVjdC5rZXlzKG9wZXJhdG9ycykubWFwKGtleSA9PiAoe1xuICAgIHRleHQ6IGxvY2FsaXphdGlvbi5nZXQoa2V5KSxcbiAgICB2YWx1ZTogb3BlcmF0b3JzW2tleV1cbn0pKTtcbi8qKlxuICogQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGhlIGZpbHRlci1jZWxsIGNvbXBvbmVudCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJldXNhYmxlY3VzdG9tZmlsdGVyc19ncmlkICV9I3RvYy1maWx0ZXItcm93KSkuXG4gKi9cbmNsYXNzIEJhc2VGaWx0ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VydmljZSA9IGZpbHRlclNlcnZpY2U7XG4gICAgICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IG9wZXJhdG9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9ycy5sZW5ndGggPyB0aGlzLl9vcGVyYXRvcnMgOiB0aGlzLmRlZmF1bHRPcGVyYXRvcnM7XG4gICAgfVxuICAgIHNldCBvcGVyYXRvcnModmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX29wZXJhdG9ycyA9IHZhbHVlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRpb25MaXN0U3Vic2NyaXB0aW9uID0gb2JzZXJ2ZSh0aGlzLm9wZXJhdG9yTGlzdClcbiAgICAgICAgICAgIC5waXBlKG1hcChxID0+IHEudG9BcnJheSgpKSwgbWFwKHRvSlNPTikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB4O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbkxpc3RTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0aW9uTGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbHRlckJ5RmllbGQoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckJ5RmllbGQodGhpcy5maWx0ZXIsIGZpZWxkKTtcbiAgICB9XG4gICAgZmlsdGVyc0J5RmllbGQoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcnNCeUZpZWxkKHRoaXMuZmlsdGVyLCBmaWVsZCk7XG4gICAgfVxuICAgIHJlbW92ZUZpbHRlcihmaWVsZCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlRmlsdGVyKHRoaXMuZmlsdGVyLCBmaWVsZCk7XG4gICAgfVxuICAgIHVwZGF0ZUZpbHRlcihmaWx0ZXIkJDEpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmlsdGVyIHx8IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgbG9naWM6IFwiYW5kXCJcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IFtjdXJyZW50RmlsdGVyXSA9IGZsYXR0ZW4ocm9vdCkuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gZmlsdGVyJCQxLmZpZWxkKTtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoY3VycmVudEZpbHRlcikpIHtcbiAgICAgICAgICAgIHJvb3QuZmlsdGVycy5wdXNoKGZpbHRlciQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGN1cnJlbnRGaWx0ZXIsIGZpbHRlciQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuICAgIGFwcGx5RmlsdGVyKGZpbHRlciQkMSkge1xuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyKGZpbHRlciQkMSk7XG4gICAgfVxufVxuQmFzZUZpbHRlckNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbCcsXSB9XSxcbiAgICBvcGVyYXRvckxpc3Q6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0ZpbHRlck9wZXJhdG9yQmFzZSxdIH1dXG59O1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXJcbmNvbnN0IG51bWVyaWNPcGVyYXRvcnMgPSBsb2NhbGl6ZU9wZXJhdG9ycyQxKHtcbiAgICBcImZpbHRlckVxT3BlcmF0b3JcIjogXCJlcVwiLFxuICAgIFwiZmlsdGVyTm90RXFPcGVyYXRvclwiOiBcIm5lcVwiLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbiAgICBcImZpbHRlckd0ZU9wZXJhdG9yXCI6IFwiZ3RlXCIsXG4gICAgXCJmaWx0ZXJHdE9wZXJhdG9yXCI6IFwiZ3RcIixcbiAgICBcImZpbHRlckx0ZU9wZXJhdG9yXCI6IFwibHRlXCIsXG4gICAgXCJmaWx0ZXJMdE9wZXJhdG9yXCI6IFwibHRcIixcbiAgICBcImZpbHRlcklzTnVsbE9wZXJhdG9yXCI6IFwiaXNudWxsXCIsXG4gICAgXCJmaWx0ZXJJc05vdE51bGxPcGVyYXRvclwiOiBcImlzbm90bnVsbFwiXG59KTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGJhc2UgbnVtZXJpYyBmaWx0ZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBOdW1lcmljRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZpbHRlckNlbGxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3IuIERlZmF1bHRzIHRvIGBlcWAuXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gXCJlcVwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCB0aGUgY29tcG9uZW50IHZhbHVlLlxuICAgICAgICAgKiBAdHlwZSB7bnVtZXJpY31cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgKipVcCoqIGFuZCAqKkRvd24qKiBzcGluIGJ1dHRvbnMgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNwaW5uZXJzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gbnVtZXJpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIGZvcm1hdCB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgZm9jdXNlZC5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYGNvbHVtbi5mb3JtYXRgIHZhbHVlIGlzIHVzZWQgKGlmIHNldCkuXG4gICAgICovXG4gICAgc2V0IGZvcm1hdCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9mb3JtYXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgZm9ybWF0IHVzZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBmb2N1c2VkLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgY29sdW1uLmZvcm1hdGAgdmFsdWUgaXMgdXNlZCAoaWYgc2V0KS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IGZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuX2Zvcm1hdCkgPyB0aGlzLl9mb3JtYXQgOiB0aGlzLmNvbHVtbkZvcm1hdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge0ZpbHRlckRlc2NyaXB0b3J9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgb3BlcmF0b3IgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50T3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIgPyB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgOiB0aGlzLm9wZXJhdG9yO1xuICAgIH1cbiAgICBnZXQgY29sdW1uRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4gJiYgIWlzTnVsbE9yRW1wdHlTdHJpbmcodGhpcy5jb2x1bW4uZm9ybWF0KSA/XG4gICAgICAgICAgICBleHRyYWN0Rm9ybWF0KHRoaXMuY29sdW1uLmZvcm1hdCkgOiBcIm4yXCI7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIGxvY2FsaXphdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gbnVtZXJpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0gdG9KU09OKHRoaXMub3BlcmF0b3JMaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5OdW1lcmljRmlsdGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNwaW5uZXJzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZWNpbWFsczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbnVtZXJpYyBmaWx0ZXIgY2VsbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogIGBgYGh0bWwtbm8tcnVuXG4gKiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsXG4gKiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICogICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBOdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudCBleHRlbmRzIE51bWVyaWNGaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgdGhlIGRlbGF5IHRpbWUgKGluIG1pbGxpc2Vjb25kcykgYmVmb3JlIHRoZSBmaWx0ZXIgdmFsdWUgaXMgc3VibWl0dGVkLlxuICAgICAgICAgKiBBIHZhbHVlIG9mIGAwYCBpbmRpY2F0ZXMgbm8gZGVsYXkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA1MDBgLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyRGVsYXkgPSA1MDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBkcm9wLWRvd24gZmlsdGVyIG9wZXJhdG9ycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2hvd09wZXJhdG9ycyA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtZXNzYWdlRm9yKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgfVxufVxuTnVtZXJpY0ZpbHRlckNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbFxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2RlZmF1bHRPcGVyYXRvcl09XCJvcGVyYXRvclwiXG4gICAgICAgICAgICBbc2hvd09wZXJhdG9yc109XCJzaG93T3BlcmF0b3JzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94XG4gICAgICAgICAgICAgICAga2VuZG9HcmlkRm9jdXNhYmxlXG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtmaWx0ZXJEZWxheV09XCJmaWx0ZXJEZWxheVwiXG4gICAgICAgICAgICAgICAgW2F1dG9Db3JyZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCJkZWNpbWFsc1wiXG4gICAgICAgICAgICAgICAgW3NwaW5uZXJzXT1cInNwaW5uZXJzXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveC1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICBbaW5jcmVtZW50XT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlck51bWVyaWNJbmNyZW1lbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWNyZW1lbnRdPVwibWVzc2FnZUZvcignZmlsdGVyTnVtZXJpY0RlY3JlbWVudCcpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9rZW5kby1udW1lcmljdGV4dGJveC1tZXNzYWdlcz5cbiAgICAgICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTnVtZXJpY0ZpbHRlckNlbGxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5OdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWx0ZXJEZWxheTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJJbnB1dERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodmFsdWVBY2Nlc3NvcnMsIG5nWm9uZSwgZWxlbWVudCwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyRGVsYXkgPSA1MDA7XG4gICAgICAgIHRoaXMuY2hhbmdlUmVxdWVzdHMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmFjY2Vzc29yID0gdmFsdWVBY2Nlc3NvcnNbMF07XG4gICAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZVN0YXJ0ID0gcmVuZGVyZXIubGlzdGVuKGVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NvbXBvc2l0aW9uc3RhcnQnLCAoKSA9PiB0aGlzLmNvbXBvc2luZyA9IHRydWUpO1xuICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVFbmQgPSByZW5kZXJlci5saXN0ZW4oZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY29tcG9zaXRpb25lbmQnLCAoKSA9PiB0aGlzLmNvbXBvc2luZyA9IGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVFdmVudHMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdW5zdWJzY3JpYmVTdGFydCgpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlRW5kKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWNjZXNzb3Iud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUodmFsdWUpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZSh4ID0+IHRoaXMuZmlsdGVyRGVsYXkgPiAwID9cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUmVxdWVzdHMubmV4dCh4KSA6XG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDaGFuZ2VzKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCgnZmlsdGVyRGVsYXknLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZUNoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlQ2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuICAgIHN1YnNjcmliZUNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlUmVxdWVzdHNTdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVJlcXVlc3RzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5maWx0ZXJEZWxheSksIGZpbHRlcigoKSA9PiAhdGhpcy5jb21wb3NpbmcpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHRoaXMuY2hhbmdlLmVtaXQoeCkpO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZUNoYW5nZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZVJlcXVlc3RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVJlcXVlc3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5GaWx0ZXJJbnB1dERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRmlsdGVySW5wdXRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJJbnB1dERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEFycmF5LCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTZWxmIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbTkdfVkFMVUVfQUNDRVNTT1IsXSB9XSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcbkZpbHRlcklucHV0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGZpbHRlckRlbGF5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IEVNUFRZX1ZBTFVFX09QRVJBVE9SUyA9IG5ldyBTZXQoWydpc251bGwnLCAnaXNub3RudWxsJywgJ2lzZW1wdHknLCAnaXNub3RlbXB0eSddKTtcbmNvbnN0IGlzRW1wdHlWYWx1ZU9wZXJhdG9yID0gKG9wZXJhdG9yKSA9PiBFTVBUWV9WQUxVRV9PUEVSQVRPUlMuaGFzKG9wZXJhdG9yKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJJbnB1dFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSkge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudE9wZXJhdG9yKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIkJDEgPSB0aGlzLmN1cnJlbnRGaWx0ZXI7XG4gICAgICAgIGlmICghdGhpcy5fb3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yID0gZmlsdGVyJCQxID8gZmlsdGVyJCQxLm9wZXJhdG9yIDogdGhpcy5kZWZhdWx0T3BlcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdG9yO1xuICAgIH1cbiAgICBzZXQgY3VycmVudE9wZXJhdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX29wZXJhdG9yID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IGVtcHR5VmFsdWVPcGVyYXRvciA9IGlzRW1wdHlWYWx1ZU9wZXJhdG9yKHZhbHVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJJbnB1dERpc2FibGVkID0gZW1wdHlWYWx1ZU9wZXJhdG9yO1xuICAgICAgICBpZiAoZW1wdHlWYWx1ZU9wZXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Tm9WYWx1ZUZpbHRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWlzQmxhbmsodmFsdWUpICYmIGlzUHJlc2VudCh0aGlzLmN1cnJlbnRGaWx0ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY3VycmVudEZpbHRlci52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRlZmF1bHRPcGVyYXRvcigpIHtcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuX2RlZmF1bHRPcGVyYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0T3BlcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcGVyYXRvcnMgJiYgdGhpcy5vcGVyYXRvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRvcnNbMF0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiZXFcIjtcbiAgICB9XG4gICAgc2V0IGRlZmF1bHRPcGVyYXRvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0T3BlcmF0b3IgPSB2YWx1ZTtcbiAgICB9XG4gICAgc2V0IGZpbHRlcklucHV0RGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dC5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5pbnB1dCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnB1dC5jaGFuZ2Uuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcklucHV0RGlzYWJsZWQgPSBpc0VtcHR5VmFsdWVPcGVyYXRvcih0aGlzLmN1cnJlbnRPcGVyYXRvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHlTdHJpbmcodmFsdWUpIHx8IHRoaXMuZmlsdGVyQnlGaWVsZCh0aGlzLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlKGlzTnVsbE9yRW1wdHlTdHJpbmcodmFsdWUpID9cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbHRlcih0aGlzLmNvbHVtbi5maWVsZCkgOlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5jdXJyZW50T3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNsZWFyKCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB0aGlzLmZpbHRlcklucHV0RGlzYWJsZWQgPSBpc0VtcHR5VmFsdWVPcGVyYXRvcih0aGlzLmRlZmF1bHRPcGVyYXRvcik7XG4gICAgfVxuICAgIGFwcGx5Tm9WYWx1ZUZpbHRlcihvcGVyYXRvcikge1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZSh0aGlzLnVwZGF0ZUZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZChcImZpbHRlclwiLCBjaGFuZ2VzLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5wdXREaXNhYmxlZCA9IGlzRW1wdHlWYWx1ZU9wZXJhdG9yKHRoaXMuY3VycmVudE9wZXJhdG9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkZpbHRlcklucHV0V3JhcHBlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbnB1dDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbRmlsdGVySW5wdXREaXJlY3RpdmUsXSB9XSxcbiAgICBkZWZhdWx0T3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBFTVBUWV9GSUxURVJfT1BFUkFUT1JTID0gWydpc251bGwnLCAnaXNub3RudWxsJywgJ2lzZW1wdHknLCAnaXNub3RlbXB0eSddO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlckNlbGxXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVySW5wdXRXcmFwcGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgIH1cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGVCYXNlQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgc2hvd0J1dHRvbigpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyJCQxID0gdGhpcy5jdXJyZW50RmlsdGVyO1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KGZpbHRlciQkMSkgJiYgKCFpc051bGxPckVtcHR5U3RyaW5nKGZpbHRlciQkMS52YWx1ZSkgfHxcbiAgICAgICAgICAgIEVNUFRZX0ZJTFRFUl9PUEVSQVRPUlMuaW5kZXhPZihTdHJpbmcoZmlsdGVyJCQxLm9wZXJhdG9yKSkgPj0gMCk7XG4gICAgfVxuICAgIGZpbHRlckNoYW5nZShmaWx0ZXIkJDEpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIkJDEpO1xuICAgIH1cbn1cbkZpbHRlckNlbGxXcmFwcGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGtlbmRvLWdyaWQtZmlsdGVyLWNlbGwtb3BlcmF0b3JzXG4gICAgICAgICAgICBbc2hvd09wZXJhdG9yc109XCJzaG93T3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIChjbGVhcik9XCJvbkNsZWFyKClcIlxuICAgICAgICAgICAgW3Nob3dCdXR0b25dPVwic2hvd0J1dHRvblwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50T3BlcmF0b3JcIj5cbiAgICAgICAgPC9rZW5kby1ncmlkLWZpbHRlci1jZWxsLW9wZXJhdG9ycz5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlckNlbGxXcmFwcGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9XG5dO1xuRmlsdGVyQ2VsbFdyYXBwZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbC13cmFwcGVyJyxdIH1dLFxuICAgIG92ZXJyaWRlQmFzZUNsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbCcsXSB9XSxcbiAgICBzaG93T3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG5jb25zdCBzdHJpbmdPcGVyYXRvcnMgPSBsb2NhbGl6ZU9wZXJhdG9ycyQxKHtcbiAgICBcImZpbHRlckVxT3BlcmF0b3JcIjogXCJlcVwiLFxuICAgIFwiZmlsdGVyTm90RXFPcGVyYXRvclwiOiBcIm5lcVwiLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbiAgICBcImZpbHRlckNvbnRhaW5zT3BlcmF0b3JcIjogXCJjb250YWluc1wiLFxuICAgIFwiZmlsdGVyTm90Q29udGFpbnNPcGVyYXRvclwiOiBcImRvZXNub3Rjb250YWluXCIsXG4gICAgXCJmaWx0ZXJTdGFydHNXaXRoT3BlcmF0b3JcIjogXCJzdGFydHN3aXRoXCIsXG4gICAgXCJmaWx0ZXJFbmRzV2l0aE9wZXJhdG9yXCI6IFwiZW5kc3dpdGhcIixcbiAgICBcImZpbHRlcklzTnVsbE9wZXJhdG9yXCI6IFwiaXNudWxsXCIsXG4gICAgXCJmaWx0ZXJJc05vdE51bGxPcGVyYXRvclwiOiBcImlzbm90bnVsbFwiLFxuICAgIFwiZmlsdGVySXNFbXB0eU9wZXJhdG9yXCI6IFwiaXNlbXB0eVwiLFxuICAgIFwiZmlsdGVySXNOb3RFbXB0eU9wZXJhdG9yXCI6IFwiaXNub3RlbXB0eVwiXG59KTtcbi8qKlxuICogUmVwcmVzZW50cyBhIGJhc2Ugc3RyaW5nIGZpbHRlciBjb21wb25lbnQuXG4gKi9cbmNsYXNzIFN0cmluZ0ZpbHRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VGaWx0ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yLiBEZWZhdWx0cyB0byBgY29udGFpbnNgLlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IFwiY29udGFpbnNcIjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge0ZpbHRlckRlc2NyaXB0b3J9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5RmllbGQoKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBvcGVyYXRvciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlciA/IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA6IHRoaXMub3BlcmF0b3I7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIGxvY2FsaXphdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gc3RyaW5nT3BlcmF0b3JzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0b0pTT04odGhpcy5vcGVyYXRvckxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblN0cmluZ0ZpbHRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzdHJpbmctZmlsdGVyIGNlbGwgY29tcG9uZW50XG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1jb25maWd1cmF0aW9uLWNvbXBvbmVudHMtZm9yLWZpbHRlci10ZW1wbGF0ZXMpKS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsXG4gKiAgICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwiZmFsc2VcIlxuICogICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbD5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBTdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50IGV4dGVuZHMgU3RyaW5nRmlsdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgdGhlIGRlbGF5IHRpbWUgKGluIG1pbGxpc2Vjb25kcykgYmVmb3JlIHRoZSBmaWx0ZXIgdmFsdWUgaXMgc3VibWl0dGVkLlxuICAgICAgICAgKiBBIHZhbHVlIG9mIGAwYCBpbmRpY2F0ZXMgbm8gZGVsYXkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA1MDBgLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyRGVsYXkgPSA1MDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBkcm9wLWRvd24gZmlsdGVyIG9wZXJhdG9ycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2hvd09wZXJhdG9ycyA9IHRydWU7XG4gICAgfVxufVxuU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGxcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwic2hvd09wZXJhdG9yc1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLXRleHRib3hcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVySW5wdXRcbiAgICAgICAgICAgICAgICBbZmlsdGVyRGVsYXldPVwiZmlsdGVyRGVsYXlcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImN1cnJlbnRGaWx0ZXI/LnZhbHVlXCIgLz5cbiAgICAgICAgPC9rZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGw+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWx0ZXJEZWxheTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbXBvbmVudCB3aGljaCBhY2NvbW1vZGF0ZXMgdGhlIGZpbHRlciBvcGVyYXRvcnMuXG4gKi9cbmNsYXNzIEZpbHRlckNlbGxPcGVyYXRvcnNDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jbGVhclRleHQgPSAnQ2xlYXInO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGZpbHRlciBvcGVyYXRvcnMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0b3JzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBsaXN0IG9mIG9wZXJhdG9ycyB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgb3BlcmF0b3IgaXMgc2VsZWN0ZWQuXG4gICAgICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8c3RyaW5nPn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSAqKkNsZWFyKiogYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8e30+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNoYW5nZShkYXRhSXRlbSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZGF0YUl0ZW0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2xlYXJDbGljaygpIHtcbiAgICAgICAgdGhpcy5jbGVhci5lbWl0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsZWFyS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuRW50ZXIgfHwgYXJncy5rZXlDb2RlID09PSBLZXlzLlNwYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZHJvcGRvd25LZXlkb3duKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuRW50ZXIgJiYgIXRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZSh0cnVlKTtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGVhclRleHQgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJDbGVhckJ1dHRvblwiKSk7XG4gICAgfVxufVxuRmlsdGVyQ2VsbE9wZXJhdG9yc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1maWx0ZXItY2VsbC1vcGVyYXRvcnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3RcbiAgICAgICAgICAgICNkcm9wZG93blxuICAgICAgICAgICAgKm5nSWY9XCJzaG93T3BlcmF0b3JzXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgW2RhdGFdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1kcm9wZG93bi1vcGVyYXRvclwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgaWNvbkNsYXNzPVwiay1pLWZpbHRlclwiXG4gICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtwb3B1cFNldHRpbmdzXT1cInsgd2lkdGg6ICdhdXRvJyB9XCJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJkcm9wZG93bktleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydrLWNsZWFyLWJ1dHRvbi12aXNpYmxlJzogc2hvd0J1dHRvbn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjbGVhclRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyQ2xpY2soKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJjbGVhcktleWRvd24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWx0ZXItY2xlYXJcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyQ2VsbE9wZXJhdG9yc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkZpbHRlckNlbGxPcGVyYXRvcnNDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbC1vcGVyYXRvcicsXSB9XSxcbiAgICBkcm9wZG93bjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2Ryb3Bkb3duJyxdIH1dLFxuICAgIG9wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd0J1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xlYXI6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG5jb25zdCBzdHJpbmdPcGVyYXRvcnMkMSA9IGxvY2FsaXplT3BlcmF0b3JzJDEoe1xuICAgIFwiZmlsdGVyQ29udGFpbnNPcGVyYXRvclwiOiBcImNvbnRhaW5zXCIsXG4gICAgXCJmaWx0ZXJOb3RDb250YWluc09wZXJhdG9yXCI6IFwiZG9lc25vdGNvbnRhaW5cIixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG4gICAgXCJmaWx0ZXJFcU9wZXJhdG9yXCI6IFwiZXFcIixcbiAgICBcImZpbHRlck5vdEVxT3BlcmF0b3JcIjogXCJuZXFcIixcbiAgICBcImZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvclwiOiBcInN0YXJ0c3dpdGhcIixcbiAgICBcImZpbHRlckVuZHNXaXRoT3BlcmF0b3JcIjogXCJlbmRzd2l0aFwiLFxuICAgIFwiZmlsdGVySXNOdWxsT3BlcmF0b3JcIjogXCJpc251bGxcIixcbiAgICBcImZpbHRlcklzTm90TnVsbE9wZXJhdG9yXCI6IFwiaXNub3RudWxsXCIsXG4gICAgXCJmaWx0ZXJJc0VtcHR5T3BlcmF0b3JcIjogXCJpc2VtcHR5XCIsXG4gICAgXCJmaWx0ZXJJc05vdEVtcHR5T3BlcmF0b3JcIjogXCJpc25vdGVtcHR5XCJcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgY29sdW1uLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlZmF1bHRPcGVyYXRvcnMgPSBzdHJpbmdPcGVyYXRvcnMkMSh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgIH1cbiAgICBzZXQgdmFsdWVGaWVsZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl92YWx1ZUZpZWxkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB2YWx1ZUZpZWxkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVGaWVsZCA/IHRoaXMuX3ZhbHVlRmllbGQgOiB0aGlzLmNvbHVtbi5maWVsZDtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudE9wZXJhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyID8gdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yIDogXCJjb250YWluc1wiO1xuICAgIH1cbn1cbkF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtYXV0b2NvbXBsZXRlLWZpbHRlci1jZWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbc2hvd09wZXJhdG9yc109XCJzaG93T3BlcmF0b3JzXCI+XG4gICAgICAgICAgICA8a2VuZG8tYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiPlxuICAgICAgICAgICAgPC9rZW5kby1hdXRvY29tcGxldGU+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQXV0b0NvbXBsZXRlRmlsdGVyQ2VsbENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZpbHRlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkNvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQXV0b0NvbXBsZXRlRmlsdGVyQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBzaG93T3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVGaWVsZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlclxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJvb2xlYW5GaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLml0ZW1zID0gW1xuICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJJc1RydWVcIiksIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICB7IHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmdldChcImZpbHRlcklzRmFsc2VcIiksIHZhbHVlOiBmYWxzZSB9XG4gICAgICAgIF07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRlZmF1bHRJdGVtID0geyB0ZXh0OiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJCb29sZWFuQWxsXCIpLCB2YWx1ZTogbnVsbCB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge0ZpbHRlckRlc2NyaXB0b3J9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgb3BlcmF0b3IgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50T3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIgPyB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgOiB0aGlzLm9wZXJhdG9yO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXG4gICAgICAgICAgICB7IHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmdldChcImZpbHRlcklzVHJ1ZVwiKSwgdmFsdWU6IHRydWUgfSxcbiAgICAgICAgICAgIHsgdGV4dDogdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVySXNGYWxzZVwiKSwgdmFsdWU6IGZhbHNlIH1cbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IHsgdGV4dDogdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyQm9vbGVhbkFsbFwiKSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG59XG5Cb29sZWFuRmlsdGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwtYm9vbGVhbicsXSB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEJvb2xlYW4gZmlsdGVyLWNlbGwgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIGBgYGh0bWwtbm8tcnVuXG4gKiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsXG4gKiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICogICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbD5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyQ2VsbENvbXBvbmVudCBleHRlbmRzIEJvb2xlYW5GaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbiwgY2QpIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5jZCA9IGNkO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHN1cGVyLmxvY2FsaXphdGlvbkNoYW5nZSgpO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cbkJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGxcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtzaG93T3BlcmF0b3JzXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIj5cbiAgICAgICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3RcbiAgICAgICAgICAgICAgICBrZW5kb0ZpbHRlcklucHV0XG4gICAgICAgICAgICAgICAgW2RlZmF1bHRJdGVtXT1cImRlZmF1bHRJdGVtXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJpdGVtc1wiXG4gICAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcG9wdXBTZXR0aW5nc109XCJ7IHdpZHRoOiAnYXV0bycgfVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiPlxuICAgICAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXJcbmNvbnN0IGRhdGVPcGVyYXRvcnMgPSBsb2NhbGl6ZU9wZXJhdG9ycyQxKHtcbiAgICBcImZpbHRlckVxT3BlcmF0b3JcIjogXCJlcVwiLFxuICAgIFwiZmlsdGVyTm90RXFPcGVyYXRvclwiOiBcIm5lcVwiLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcbiAgICBcImZpbHRlckFmdGVyT3JFcXVhbE9wZXJhdG9yXCI6IFwiZ3RlXCIsXG4gICAgXCJmaWx0ZXJBZnRlck9wZXJhdG9yXCI6IFwiZ3RcIixcbiAgICBcImZpbHRlckJlZm9yZU9yRXF1YWxPcGVyYXRvclwiOiBcImx0ZVwiLFxuICAgIFwiZmlsdGVyQmVmb3JlT3BlcmF0b3JcIjogXCJsdFwiLFxuICAgIFwiZmlsdGVySXNOdWxsT3BlcmF0b3JcIjogXCJpc251bGxcIixcbiAgICBcImZpbHRlcklzTm90TnVsbE9wZXJhdG9yXCI6IFwiaXNub3RudWxsXCJcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvci4gRGVmYXVsdHMgdG8gYGNvbnRhaW5zYC5cbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBcImd0ZVwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aXZlIHZpZXcgdGhhdCB0aGUgY2FsZW5kYXIgaW5pdGlhbGx5IHJlbmRlcnMuXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBhY3RpdmUgdmlldyBpcyBgbW9udGhgLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFlvdSBoYXZlIHRvIHNldCBgYWN0aXZlVmlld2Agd2l0aGluIHRoZSBgdG9wVmlld2AtYGJvdHRvbVZpZXdgIHJhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gXCJtb250aFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgYm90dG9tbW9zdCBjYWxlbmRhciB2aWV3LCB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvdHRvbVZpZXcgPSBcIm1vbnRoXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSB0b3Btb3N0IGNhbGVuZGFyIHZpZXcsIHRvIHdoaWNoIHRoZSB1c2VyIGNhbiBuYXZpZ2F0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG9wVmlldyA9IFwiY2VudHVyeVwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSB3ZWVrIG51bWJlciBjb2x1bW4gaW4gdGhlIGBtb250aGAgdmlldyBvZiB0aGUgQ2FsZW5kYXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndlZWtOdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gZGF0ZU9wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCB0aGF0IGlzIHVzZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBmb2N1c2VkLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgY29sdW1uLmZvcm1hdGAgdmFsdWUgaXMgdXNlZCAoaWYgc2V0KS5cbiAgICAgKi9cbiAgICBzZXQgZm9ybWF0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IHRoYXQgaXMgdXNlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGZvY3VzZWQuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBjb2x1bW4uZm9ybWF0YCB2YWx1ZSBpcyB1c2VkIChpZiBzZXQpLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgZm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHlTdHJpbmcodGhpcy5fZm9ybWF0KSA/IHRoaXMuX2Zvcm1hdCA6IHRoaXMuY29sdW1uRm9ybWF0O1xuICAgIH1cbiAgICBnZXQgY29sdW1uRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4gJiYgIWlzTnVsbE9yRW1wdHlTdHJpbmcodGhpcy5jb2x1bW4uZm9ybWF0KSA/XG4gICAgICAgICAgICBleHRyYWN0Rm9ybWF0KHRoaXMuY29sdW1uLmZvcm1hdCkgOiBcImRcIjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIG9wZXJhdG9yIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudE9wZXJhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyID8gdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yIDogdGhpcy5vcGVyYXRvcjtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgbG9jYWxpemF0aW9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRPcGVyYXRvcnMgPSBkYXRlT3BlcmF0b3JzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0b0pTT04odGhpcy5vcGVyYXRvckxpc3QudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkRhdGVGaWx0ZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXRQbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJvdHRvbVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvcFZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdlZWtOdW1iZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkYXRlLWZpbHRlciBjZWxsIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJPcmRlckRhdGVcIiB0aXRsZT1cIk9yZGVyIERhdGVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsXG4gKiAgICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwiZmFsc2VcIlxuICogICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGw+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICBgYGBcbiAqL1xuY2xhc3MgRGF0ZUZpbHRlckNlbGxDb21wb25lbnQgZXh0ZW5kcyBEYXRlRmlsdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBkcm9wLWRvd24gZmlsdGVyIG9wZXJhdG9ycyB3aWxsIGJlIGRpc3BsYXllZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2hvd09wZXJhdG9ycyA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtZXNzYWdlRm9yKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgfVxufVxuRGF0ZUZpbHRlckNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbFxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2RlZmF1bHRPcGVyYXRvcl09XCJvcGVyYXRvclwiXG4gICAgICAgICAgICBbc2hvd09wZXJhdG9yc109XCJzaG93T3BlcmF0b3JzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLWRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICBrZW5kb0ZpbHRlcklucHV0XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXI/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgIFtib3R0b21WaWV3XT1cImJvdHRvbVZpZXdcIlxuICAgICAgICAgICAgICAgIFt0b3BWaWV3XT1cInRvcFZpZXdcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGtlbmRvLWRhdGVwaWNrZXItbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgW3RvZ2dsZV09XCJtZXNzYWdlRm9yKCdmaWx0ZXJEYXRlVG9nZ2xlJylcIlxuICAgICAgICAgICAgICAgICAgICBbdG9kYXldPVwibWVzc2FnZUZvcignZmlsdGVyRGF0ZVRvZGF5JylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLWRhdGVwaWNrZXItbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2tlbmRvLWRhdGVwaWNrZXI+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZUZpbHRlckNlbGxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5EYXRlRmlsdGVyQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBzaG93T3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbEdyb3VwQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgfVxuICAgIGdldCBjb2x1bW5zVG9SZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zVG9SZW5kZXIodGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgdHJhY2tCeShpbmRleCwgX2l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbn1cbkNvbEdyb3VwQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ29sR3JvdXBdJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0cnVlXCI+XG4gICAgICAgIDxjb2wgW2NsYXNzLmstZ3JvdXAtY29sXT1cInRydWVcIiAqbmdGb3I9XCJsZXQgZyBvZiBncm91cHNcIiAvPlxuICAgICAgICA8Y29sIFtjbGFzcy5rLWhpZXJhcmNoeS1jb2xdPVwidHJ1ZVwiICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCIvPlxuICAgICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1RvUmVuZGVyOyB0cmFja0J5OiB0cmFja0J5O1wiIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIi8+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5Db2xHcm91cENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvYWRpbmdDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICBnZXQgbG9hZGluZ1RleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ2xvYWRpbmcnKTtcbiAgICB9XG59XG5Mb2FkaW5nQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkTG9hZGluZ10nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiay1sb2FkaW5nLXRleHRcIj57eyBsb2FkaW5nVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstbG9hZGluZy1pbWFnZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1sb2FkaW5nLWNvbG9yXCI+PC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2FkaW5nQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuTG9hZGluZ0NvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstbG9hZGluZy1tYXNrJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihlbCwgcmVuZGVyZXIsIHJlc2l6ZVNlcnZpY2UsIGdyaWQpIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMucmVzaXplU2VydmljZSA9IHJlc2l6ZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBzZXQgbG9ja2VkV2lkdGgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9ja2VkV2lkdGggPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hSZXNpemUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGtlbmRvR3JpZFJlc2l6YWJsZUNvbnRhaW5lcihlbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2ggPSBlbmFibGVkICE9PSB0aGlzLmVuYWJsZWQ7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFJlc2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0dGFjaFJlc2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uICYmICF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMucmVzaXplLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQud3JhcHBlcikge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JpZC53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lckVsZW1lbnQuY2xpZW50V2lkdGggLSB0aGlzLl9sb2NrZWRXaWR0aCwgMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmIHdpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBcIndpZHRoXCIsIHdpZHRoICsgXCJweFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBcIndpZHRoXCIsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkUmVzaXphYmxlQ29udGFpbmVyXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBSZXNpemVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50LCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGxvY2tlZFdpZHRoOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydsb2NrZWRXaWR0aCcsXSB9XSxcbiAgICBrZW5kb0dyaWRSZXNpemFibGVDb250YWluZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih2aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IHZpZXdDb250YWluZXJSZWY7XG4gICAgfVxuICAgIHNldCB0ZW1wbGF0ZUNvbnRleHQoY29udGV4dCkge1xuICAgICAgICB0aGlzLnJlbW92ZVZpZXcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0ZWRWaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0LnRlbXBsYXRlUmVmLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWaWV3KCk7XG4gICAgfVxuICAgIHJlbW92ZVZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLmluc2VydGVkVmlld1JlZikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh0aGlzLnZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzLmluc2VydGVkVmlld1JlZikpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRlZFZpZXdSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5UZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1t0ZW1wbGF0ZUNvbnRleHRdJyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmIH1cbl07XG5UZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGVtcGxhdGVDb250ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZvY3VzR3JvdXAge1xuICAgIGNvbnN0cnVjdG9yKHJvb3QpIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMucm9vdC5yZWdpc3Rlckdyb3VwKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZm9jdXNhYmxlQ2hpbGRyZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlcihlbCA9PiBlbC5jYW5Gb2N1cygpKTtcbiAgICB9XG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJvb3QudW5yZWdpc3Rlckdyb3VwKHRoaXMpO1xuICAgIH1cbiAgICByZWdpc3RlckVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnVucmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICAgIHVucmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4uZmlsdGVyKGYgPT4gZiAhPT0gZWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIHZhbHVlIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZ3JvdXAgd2lsbCByZWNlaXZlIGZvY3VzIHdoZW4gdGhlIGNlbGwgaXMgZm9jdXNlZC5cbiAgICAgKiBSZXF1aXJlcyBhIHNpbmdsZSBcInNpbXBsZVwiIGZvY3VzYWJsZSBlbGVtZW50IHN1Y2ggYXMgYSBidXR0b24gb3IgYSBjaGVja2JveC5cbiAgICAgKi9cbiAgICBpc05hdmlnYWJsZSgpIHtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGVDaGlsZHJlbjtcbiAgICAgICAgcmV0dXJuIGZvY3VzYWJsZS5sZW5ndGggPT09IDEgJiYgZm9jdXNhYmxlWzBdLmlzTmF2aWdhYmxlKCk7XG4gICAgfVxuICAgIGNhbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2FibGVDaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuRm9jdXMoKSAmJiAhdGhpcy5oYXNGb2N1cygpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzYWJsZUNoaWxkcmVuWzBdLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU3RhdGUodHJ1ZSk7XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU3RhdGUoZmFsc2UpO1xuICAgIH1cbiAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ucmVkdWNlKChmb2N1c2VkLCBlbGVtZW50KSA9PiBmb2N1c2VkIHx8IGVsZW1lbnQuaGFzRm9jdXMoKSwgZmFsc2UpO1xuICAgIH1cbiAgICB0b2dnbGVTdGF0ZShhY3RpdmUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlICE9PSBhY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGYgPT4gZi50b2dnbGUoYWN0aXZlKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5Gb2N1c0dyb3VwLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Gb2N1c0dyb3VwLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRm9jdXNSb290IH1cbl07XG5cbmxldCBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gICAgcmV0dXJuIGlkKys7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9naWNhbENlbGxEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGZvY3VzR3JvdXAsIGVsZW1lbnQsIGNvbHVtbkluZm9TZXJ2aWNlLCBpZFNlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCByZW5kZXJlciwgem9uZSwgY2VsbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0dyb3VwID0gZm9jdXNHcm91cDtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZSA9IGNvbHVtbkluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLmlkU2VydmljZSA9IGlkU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuY2VsbENvbnRleHQgPSBjZWxsQ29udGV4dDtcbiAgICAgICAgdGhpcy5sb2dpY2FsU2xhdmVDZWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sU3BhbiA9IDE7XG4gICAgICAgIHRoaXMucm93U3BhbiA9IDE7XG4gICAgICAgIHRoaXMuZGF0YVJvd0luZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuZGV0YWlsRXhwYW5kQ2VsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVpZCA9IG5leHRJZCgpO1xuICAgIH1cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2dpY2FsU2xhdmVDZWxsICYmIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlkU2VydmljZS5jZWxsSWQodGhpcy5sb2dpY2FsUm93SW5kZXgsIHRoaXMubG9naWNhbENvbEluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYXJpYUNvbEluZGV4KCkge1xuICAgICAgICBpZiAodGhpcy5sb2dpY2FsU2xhdmVDZWxsIHx8IHRoaXMubG9naWNhbENvbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpY2FsQ29sSW5kZXggKyAxO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRpb25DaGFuZ2UgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKChlKSA9PiB0aGlzLm9uTmF2aWdhdGlvbkNoYW5nZShlKSk7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVuYWJsZWQgfHwgdGhpcy5sb2dpY2FsQ29sSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2VsbENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbENvbnRleHQuZm9jdXNHcm91cCA9IHRoaXMuZm9jdXNHcm91cDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ2lzdGVyTm9DaGFuZ2VzKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlcyk7XG4gICAgICAgIGlmICgoa2V5cy5sZW5ndGggPT09IDEgJiYga2V5c1swXSA9PT0gJ2dyb3VwSXRlbScpIHx8IHRoaXMubG9naWNhbENvbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gSWdub3JlIGdyb3VwSXRlbSBjaGFuZ2VzIGFzIHRoZSByZWZlcmVuY2UgaXMgbm90IHN0YWJsZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4Q2hhbmdlID0gY2hhbmdlcy5sb2dpY2FsQ29sSW5kZXg7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4Q2hhbmdlID0gY2hhbmdlcy5sb2dpY2FsUm93SW5kZXg7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhDaGFuZ2UgJiYgIWluZGV4Q2hhbmdlLmlzRmlyc3RDaGFuZ2UoKSA/IGluZGV4Q2hhbmdlLnByZXZpb3VzVmFsdWUgOiB0aGlzLmxvZ2ljYWxDb2xJbmRleDtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dJbmRleENoYW5nZSAmJiAhcm93SW5kZXhDaGFuZ2UuaXNGaXJzdENoYW5nZSgpID8gcm93SW5kZXhDaGFuZ2UucHJldmlvdXNWYWx1ZSA6IHRoaXMubG9naWNhbFJvd0luZGV4O1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnVucmVnaXN0ZXJDZWxsKGluZGV4LCByb3dJbmRleCwgdGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbkNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS51bnJlZ2lzdGVyQ2VsbCh0aGlzLmxvZ2ljYWxDb2xJbmRleCwgdGhpcy5sb2dpY2FsUm93SW5kZXgsIHRoaXMpO1xuICAgIH1cbiAgICBvbk5hdmlnYXRpb25DaGFuZ2UoZSkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmxvZ2ljYWxDb2xJbmRleCA9PT0gZS5jb2xJbmRleCAmJiB0aGlzLmxvZ2ljYWxSb3dJbmRleCA9PT0gZS5yb3dJbmRleDtcbiAgICAgICAgY29uc3Qgd2FzQWN0aXZlID0gdGhpcy5sb2dpY2FsQ29sSW5kZXggPT09IGUucHJldkNvbEluZGV4ICYmIHRoaXMubG9naWNhbFJvd0luZGV4ID09PSBlLnByZXZSb3dJbmRleDtcbiAgICAgICAgaWYgKGFjdGl2ZSB8fCB3YXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCAndGFiSW5kZXgnLCB0aGlzLmlzRm9jdXNhYmxlKCkgJiYgIXRoaXMubG9naWNhbFNsYXZlQ2VsbCA/ICcwJyA6ICctMScpO1xuICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNHcm91cC5pc05hdmlnYWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0dyb3VwLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9naWNhbFNsYXZlQ2VsbCAmJiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmF1dG9Gb2N1c0NlbGwodGhpcy5sb2dpY2FsQ29sSW5kZXgsIHRoaXMubG9naWNhbENvbEluZGV4ICsgdGhpcy5jb2xTcGFuIC0gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWNyb3Rhc2soKCkgPT4gdGhpcy5pc0ZvY3VzZWQoKSAmJiBlbC5mb2N1cygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1pY3JvdGFzayhjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oY2FsbGJhY2spKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJDaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9naWNhbFNsYXZlQ2VsbCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZWdpc3RlckNlbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVnaXN0ZXJOb0NoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2dpY2FsU2xhdmVDZWxsKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlZ2lzdGVyQ2VsbE9uQ3VycmVudFJvdyh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0ZvY3VzYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaXNDZWxsRm9jdXNhYmxlKHRoaXMpO1xuICAgIH1cbiAgICBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzQ2VsbEZvY3VzZWQodGhpcyk7XG4gICAgfVxufVxuTG9naWNhbENlbGxEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGb2N1c0dyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogW0ZvY3VzUm9vdF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VDbGFzczogRm9jdXNHcm91cFxuICAgICAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRMb2dpY2FsQ2VsbF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvZ2ljYWxDZWxsRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRm9jdXNHcm91cCB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogQ29sdW1uSW5mb1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IElkU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfVxuXTtcbkxvZ2ljYWxDZWxsRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGxvZ2ljYWxDb2xJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2dpY2FsU2xhdmVDZWxsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2xJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sU3BhbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93U3BhbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBJdGVtOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhUm93SW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGFJdGVtOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxFeHBhbmRDZWxsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5pZCcsXSB9XSxcbiAgICBhcmlhQ29sSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1jb2xpbmRleCcsXSB9XVxufTtcblxubGV0IGlkJDEgPSAwO1xuZnVuY3Rpb24gbmV4dElkJDEoKSB7XG4gICAgcmV0dXJuIGlkJDErKztcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2dpY2FsUm93RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihpZFNlcnZpY2UsIG5hdmlnYXRpb24pIHtcbiAgICAgICAgdGhpcy5pZFNlcnZpY2UgPSBpZFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgICAgIHRoaXMubG9naWNhbFNsYXZlUm93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9naWNhbFNsYXZlQ2VsbHNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuZGF0YVJvd0luZGV4ID0gLTE7XG4gICAgICAgIHRoaXMudWlkID0gbmV4dElkJDEoKTtcbiAgICB9XG4gICAgZ2V0IGhvc3RSb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2dpY2FsU2xhdmVSb3cgPyAncHJlc2VudGF0aW9uJyA6ICdyb3cnO1xuICAgIH1cbiAgICBnZXQgYXJpYVJvd0luZGV4KCkge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ2ljYWxSb3dJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFyaWFPd25zKCkge1xuICAgICAgICBpZiAoIXRoaXMubmF2aWdhdGlvbi5lbmFibGVkIHx8IHRoaXMubG9naWNhbFNsYXZlUm93IHx8IHRoaXMubG9naWNhbFNsYXZlQ2VsbHNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZHMgPSBbXTtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLmxvZ2ljYWxDZWxsc0NvdW50ICsgdGhpcy5sb2dpY2FsU2xhdmVDZWxsc0NvdW50O1xuICAgICAgICBmb3IgKGxldCBjZWxsSW5kZXggPSB0aGlzLmxvZ2ljYWxDZWxsc0NvdW50OyBjZWxsSW5kZXggPCB0b3RhbDsgY2VsbEluZGV4KyspIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKHRoaXMuaWRTZXJ2aWNlLmNlbGxJZCh0aGlzLmxvZ2ljYWxSb3dJbmRleCwgY2VsbEluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkcy5qb2luKCcgJyk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb24uZW5hYmxlZCB8fCB0aGlzLmxvZ2ljYWxTbGF2ZVJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4Q2hhbmdlID0gY2hhbmdlcy5sb2dpY2FsUm93SW5kZXg7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxTbGF2ZVJvd0NoYW5nZSA9IGNoYW5nZXMubG9naWNhbFNsYXZlUm93O1xuICAgICAgICBpZiAoaW5kZXhDaGFuZ2UgfHwgbG9naWNhbFNsYXZlUm93Q2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4Q2hhbmdlICYmICFpbmRleENoYW5nZS5pc0ZpcnN0Q2hhbmdlKCkgPyBpbmRleENoYW5nZS5wcmV2aW91c1ZhbHVlIDogdGhpcy5sb2dpY2FsUm93SW5kZXg7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24udW5yZWdpc3RlclJvdyhpbmRleCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24ucmVnaXN0ZXJSb3codGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYW55Q2hhbmdlZChbJ2RhdGFSb3dJbmRleCcsICdkYXRhSXRlbSddLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLnVwZGF0ZVJvdyh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLnVucmVnaXN0ZXJSb3codGhpcy5sb2dpY2FsUm93SW5kZXgsIHRoaXMpO1xuICAgIH1cbn1cbkxvZ2ljYWxSb3dEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRMb2dpY2FsUm93XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTG9naWNhbFJvd0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IElkU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfVxuXTtcbkxvZ2ljYWxSb3dEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgbG9naWNhbFJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2dpY2FsU2xhdmVSb3c6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvZ2ljYWxDZWxsc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2dpY2FsU2xhdmVDZWxsc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhUm93SW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGFJdGVtOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBob3N0Um9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGFyaWFSb3dJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLXJvd2luZGV4JyxdIH1dLFxuICAgIGFyaWFPd25zOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtb3ducycsXSB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6cGlwZS1uYW1pbmcgKi9cbmNvbnN0IEZPUk1BVF9SRUdFWCA9IC9cXHtcXGQrOj8vO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpZWxkQWNjZXNzb3JQaXBlIHtcbiAgICBjb25zdHJ1Y3RvcihpbnRsU2VydmljZSkge1xuICAgICAgICB0aGlzLmludGxTZXJ2aWNlID0gaW50bFNlcnZpY2U7XG4gICAgfVxuICAgIHRyYW5zZm9ybShkYXRhSXRlbSwgZmllbGROYW1lLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5U3RyaW5nKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0dGVyKGZpZWxkTmFtZSkoZGF0YUl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFpc051bGxPckVtcHR5U3RyaW5nKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWx1ZShmb3JtYXQsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YUl0ZW07XG4gICAgfVxuICAgIGZvcm1hdFZhbHVlKGZvcm1hdCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaW50bCA9IHRoaXMuaW50bFNlcnZpY2U7XG4gICAgICAgIGlmIChpc1N0cmluZyhmb3JtYXQpICYmIGZvcm1hdC5tYXRjaChGT1JNQVRfUkVHRVgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW50bC5mb3JtYXQoZm9ybWF0LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludGwudG9TdHJpbmcodmFsdWUsIGZvcm1hdCk7XG4gICAgfVxufVxuRmllbGRBY2Nlc3NvclBpcGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IFBpcGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlT2YnLFxuICAgICAgICAgICAgICAgIHB1cmU6IGZhbHNlXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpZWxkQWNjZXNzb3JQaXBlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNvbHVtbnNUb1Jlc2l6ZSA9ICh7IGNvbHVtbnMgfSkgPT4gTWF0aC5tYXgoMSwgcmVzaXphYmxlQ29sdW1ucyhjb2x1bW5zKS5sZW5ndGgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJvdyA9IHNlbGVjdG9yID0+IGVsZW1lbnQgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoZWFkZXJSb3cgPSBpbmRleCA9PiBlbGVtZW50ID0+IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGhlYWQ+dHInKVtpbmRleF07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2VsbCA9IChpbmRleCwgc2VsZWN0b3IgPSAndGQnKSA9PiBlbGVtZW50ID0+IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgJHtzZWxlY3Rvcn06bm90KC5rLWdyb3VwLWNlbGwpOm5vdCguay1oaWVyYXJjaHktY2VsbClgKVtpbmRleF07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgb2Zmc2V0V2lkdGggPSBlbGVtZW50ID0+IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcGlwZSA9ICguLi5mbnMpID0+IGRhdGEgPT4gZm5zLnJlZHVjZSgoc3RhdGUkJDEsIGZuKSA9PiBzdGF0ZSQkMSA/IGZuKHN0YXRlJCQxKSA6IDAsIGRhdGEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRhYmxlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCByZW5kZXJlciwgc2VydmljZSwgem9uZSwgY2RyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyc3RSZXNpemUgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IG1pbldpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maXJzdFJlc2l6ZSA/IDAgOiBudWxsO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3Qgb2JzID0gdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuY2hhbmdlcy5waXBlKGZpbHRlcihlID0+IHRoaXMubG9ja2VkID09PSBlLmxvY2tlZCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG9icy5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3N0YXJ0JyksIHRhcCh0aGlzLmluaXRTdGF0ZS5iaW5kKHRoaXMpKSwgbWFwKGNvbHVtbnNUb1Jlc2l6ZSksIHN3aXRjaE1hcCgodGFrZSQkMSkgPT4gb2JzLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAncmVzaXplVGFibGUnKSwgbWFwKGUgPT4gZS5kZWx0YSksIGJ1ZmZlckNvdW50KHRha2UkJDEpKSkpLnN1YnNjcmliZSh0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hdXRvRml0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAucmVnaXN0ZXJUYWJsZSh7XG4gICAgICAgICAgICBhdXRvRml0OiB0aGlzLmF1dG9GaXRPYnNlcnZhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgICBsb2NrZWQ6IHRoaXMubG9ja2VkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF1dG9GaXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpdFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hdXRvRml0U3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0U3RhdGUoKSB7XG4gICAgICAgIHRoaXMuZmlyc3RSZXNpemUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMudmlydHVhbENvbHVtbnMgfHwgdGhpcy5sb2NrZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxXaWR0aCA9IG9mZnNldFdpZHRoKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNpemUoZGVsdGFzKSB7XG4gICAgICAgIGlmICghdGhpcy52aXJ0dWFsQ29sdW1ucyB8fCB0aGlzLmxvY2tlZCkge1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBkZWx0YXMucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGl0ZW0sIDApO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9yaWdpbmFsV2lkdGggKyBkZWx0YTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBhdXRvRml0T2JzZXJ2YWJsZShjb2x1bW5JbmZvKSB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdrLWF1dG9maXR0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRocyA9IGNvbHVtbkluZm8ubWFwKHRoaXMubWVhc3VyZUNvbHVtbi5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnay1hdXRvZml0dGluZycpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQod2lkdGhzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWVhc3VyZUNvbHVtbihpbmZvKSB7XG4gICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBwaXBlKGhlYWRlclJvdyhpbmZvLmxldmVsKSwgY2VsbChpbmZvLmhlYWRlckluZGV4LCAndGgnKSwgb2Zmc2V0V2lkdGgpKGRvbSk7XG4gICAgICAgIGxldCBkYXRhID0gMDtcbiAgICAgICAgaWYgKCFpbmZvLmlzUGFyZW50U3BhbiB8fCAoaW5mby5pc1BhcmVudFNwYW4gJiYgaW5mby5pc0xhc3RJblNwYW4pKSB7XG4gICAgICAgICAgICBkYXRhID0gcGlwZShyb3coJ3Rib2R5PnRyOm5vdCguay1ncm91cGluZy1yb3cpOm5vdCguay1ncmlkLW5vcmVjb3JkcyknKSwgY2VsbChpbmZvLmluZGV4KSwgb2Zmc2V0V2lkdGgpKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9vdGVyID0gcGlwZShyb3coJ3Rmb290PnRyJyksIGNlbGwoaW5mby5pbmRleCksIG9mZnNldFdpZHRoKShkb20pO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoaGVhZGVyLCBkYXRhLCBmb290ZXIpO1xuICAgIH1cbn1cblRhYmxlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICd0YWJsZScgLy8gdHNsaW50OmRpc2FibGUtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGFibGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlc2l6aW5nU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuVGFibGVEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgbG9ja2VkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aXJ0dWFsQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluV2lkdGg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLm1pbi13aWR0aCcsXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzID0gW1xuICAgIENvbHVtbkNvbXBvbmVudCxcbiAgICBDb2x1bW5Hcm91cENvbXBvbmVudCxcbiAgICBMb2dpY2FsQ2VsbERpcmVjdGl2ZSxcbiAgICBMb2dpY2FsUm93RGlyZWN0aXZlLFxuICAgIEZvY3VzYWJsZURpcmVjdGl2ZSxcbiAgICBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDb2xHcm91cENvbXBvbmVudCxcbiAgICBSZXNpemFibGVDb250YWluZXJEaXJlY3RpdmUsXG4gICAgVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIEZpZWxkQWNjZXNzb3JQaXBlLFxuICAgIERldGFpbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFNwYW5Db2x1bW5Db21wb25lbnQsXG4gICAgVGFibGVEaXJlY3RpdmUsXG4gICAgTG9hZGluZ0NvbXBvbmVudFxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTaGFyZWRNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQ29sdW1uQ29tcG9uZW50LFxuICAgICAgICAgICAgU3BhbkNvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbkdyb3VwQ29tcG9uZW50LFxuICAgICAgICAgICAgRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIEZvY3VzYWJsZURpcmVjdGl2ZVxuICAgICAgICBdO1xuICAgIH1cbn1cblNoYXJlZE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZXhwb3J0ZWRNb2R1bGVzXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzLCBEcmFnZ2FibGVNb2R1bGUsIEV2ZW50c01vZHVsZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgQ29udGFpbnNgICgqKkNvbnRhaW5zKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgQ29udGFpbnNGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiY29udGFpbnNcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuQ29udGFpbnNGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb250YWluc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbnRhaW5zRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYERvZXNOb3RDb250YWluYCAoKipEb2VzIG5vdCBjb250YWluKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgRG9lc05vdENvbnRhaW5GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiZG9lc25vdGNvbnRhaW5cIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuRG9lc05vdENvbnRhaW5GaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEb2VzTm90Q29udGFpbkZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1ub3QtY29udGFpbnMtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Eb2VzTm90Q29udGFpbkZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBFbmRzV2l0aGAgKCoqRW5kcyB3aXRoKiopIHN0cmluZyBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIEVuZHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImVuZHN3aXRoXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbkVuZHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRW5kc1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FbmRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBFcXVhbGAgKCoqSXMgZXF1YWwgdG8qKikgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJlcVwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5FcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVxdWFsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgSXNFbXB0eWAgKCoqSXMgZW1wdHkqKikgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBJc0VtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImlzZW1wdHlcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuSXNFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElzRW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItaXNlbXB0eS1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbklzRW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgSXNOb3RFbXB0eWAgKCoqSXMgbm90IGVtcHR5KiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgSXNOb3RFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJpc25vdGVtcHR5XCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbklzTm90RW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJc05vdEVtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWlzbm90ZW1wdHktb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Jc05vdEVtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYElzTm90TnVsbGAgKCoqSXMgbm90IG51bGwqKikgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBJc05vdE51bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiaXNub3RudWxsXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbklzTm90TnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElzTm90TnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Jc05vdE51bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgSXNOdWxsYCAoKipJcyBudWxsKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgSXNOdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImlzbnVsbFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5Jc051bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJc051bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSXNOdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYE5vdEVxdWFsYCAoKipJcyBub3QgZXF1YWwgdG8qKikgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBOb3RFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJuZXFcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOb3RFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Ob3RFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBTdGFydHNXaXRoYCAoKipTdGFydHMgd2l0aCoqKSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIFN0YXJ0c1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwic3RhcnRzd2l0aFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5TdGFydHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU3RhcnRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3RhcnRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgYEdyZWF0ZXJgICgqKklzIGdyZWF0ZXIgdGhhbioqKSBudW1lcmljIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgR3JlYXRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJndFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5HcmVhdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR3JlYXRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyZWF0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgR3JlYXRlck9yRXF1YWxUb2AgKCoqSXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvKiopIG51bWVyaWMgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBHcmVhdGVyT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImd0ZVwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5HcmVhdGVyT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR3JlYXRlck9yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5HcmVhdGVyT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBgTGVzc2AgKCoqSXMgbGVzcyB0aGFuKiopIG51bWVyaWMgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBMZXNzRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImx0XCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbkxlc3NGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMZXNzRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTGVzc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgYExlc3NPckVxdWFsVG9gICgqKklzIGxlc3MgdGhhbiBvciBlcXVhbCB0byoqKSBudW1lcmljIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgTGVzc09yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJsdGVcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuTGVzc09yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTGVzc09yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgYEdyZWF0ZXJgICgqKklzIGFmdGVyKiopIGRhdGUgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBBZnRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJhZnRlclwiLCBsb2NhbGl6YXRpb24pOyB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBcImd0XCJcbiAgICAgICAgfTtcbiAgICB9XG59XG5BZnRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFmdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWFmdGVyLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQWZ0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGBHcmVhdGVyT3JFcXVhbFRvYCAoKipJcyBhZnRlciBvciBlcXVhbCB0byoqKSBkYXRlIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgQWZ0ZXJFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJhZnRlci1lcVwiLCBsb2NhbGl6YXRpb24pOyB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBcImd0ZVwiXG4gICAgICAgIH07XG4gICAgfVxufVxuQWZ0ZXJFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFmdGVyRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItYWZ0ZXItZXEtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5BZnRlckVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBgTGVzc09yRXF1YWxUb2AgKCoqSXMgYmVmb3JlIG9yIGVxdWFsIHRvKiopIGRhdGUgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBCZWZvcmVFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJiZWZvcmUtZXFcIiwgbG9jYWxpemF0aW9uKTsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogXCJsdGVcIlxuICAgICAgICB9O1xuICAgIH1cbn1cbkJlZm9yZUVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQmVmb3JlRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItYmVmb3JlLWVxLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQmVmb3JlRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGBMZXNzIHRoZW5gICgqKklzIGJlZm9yZSoqKSBkYXRlIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImJlZm9yZVwiLCBsb2NhbGl6YXRpb24pOyB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiBcImx0XCJcbiAgICAgICAgfTtcbiAgICB9XG59XG5CZWZvcmVGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCZWZvcmVGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItYmVmb3JlLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbmNvbnN0IEZJTFRFUl9PUEVSQVRPUlMgPSBbXG4gICAgRmlsdGVyQ2VsbE9wZXJhdG9yc0NvbXBvbmVudCxcbiAgICBDb250YWluc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIERvZXNOb3RDb250YWluRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgRW5kc1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIElzRW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBJc05vdEVtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgSXNOb3ROdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgSXNOdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBTdGFydHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgR3JlYXRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEdyZWF0ZXJPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBMZXNzRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgTGVzc09yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEFmdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgQWZ0ZXJFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEJlZm9yZUVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnRcbl07XG5jb25zdCBpbXBvcnRlZE1vZHVsZXMgPSBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJvcERvd25MaXN0TW9kdWxlLFxuICAgIEF1dG9Db21wbGV0ZU1vZHVsZSxcbiAgICBJbnB1dHNNb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgICBQb3B1cE1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGVcbl07XG5jb25zdCBDT01QT05FTlRTID0gW1xuICAgIEZpbHRlcklucHV0RGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNoYXJlZEZpbHRlck1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5GSUxURVJfT1BFUkFUT1JTXG4gICAgICAgIF07XG4gICAgfVxufVxuU2hhcmVkRmlsdGVyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtGSUxURVJfT1BFUkFUT1JTLCBDT01QT05FTlRTXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbRklMVEVSX09QRVJBVE9SUywgaW1wb3J0ZWRNb2R1bGVzLCBDT01QT05FTlRTXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbLi4uaW1wb3J0ZWRNb2R1bGVzXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVySG9zdERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoaG9zdCwgcmVzb2x2ZXIpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSB0aGlzLmhvc3QuY3JlYXRlQ29tcG9uZW50KHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRUeXBlKCkpKTtcbiAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVyXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoYW55Q2hhbmdlZChbXCJjb2x1bW5cIiwgXCJmaWx0ZXJcIl0sIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnQoe1xuICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdENvbXBvbmVudCh7IGNvbHVtbiwgZmlsdGVyOiBmaWx0ZXIkJDEgfSkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIGluc3RhbmNlLmZpbHRlciA9IGZpbHRlciQkMTtcbiAgICB9XG59XG5GaWx0ZXJIb3N0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogPiBMaXN0IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBpbiB0aGUgR3JpZE1vZHVsZSBhcyBgZW50cnlDb21wb25lbnRzYC5cbiAqL1xuY29uc3QgZmlsdGVyQ29tcG9uZW50RmFjdG9yeSA9ICh0eXBlKSA9PiAoe1xuICAgIFwiYm9vbGVhblwiOiBCb29sZWFuRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICBcImRhdGVcIjogRGF0ZUZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgXCJudW1lcmljXCI6IE51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIFwidGV4dFwiOiBTdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50XG59W3R5cGVdKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlckNlbGxIb3N0RGlyZWN0aXZlIGV4dGVuZHMgRmlsdGVySG9zdERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoaG9zdCwgcmVzb2x2ZXIpIHtcbiAgICAgICAgc3VwZXIoaG9zdCwgcmVzb2x2ZXIpO1xuICAgIH1cbiAgICBjb21wb25lbnRUeXBlKCkge1xuICAgICAgICBpZiAoIWlzTnVsbE9yRW1wdHlTdHJpbmcodGhpcy5jb2x1bW4uZmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlckNvbXBvbmVudEZhY3RvcnkodGhpcy5jb2x1bW4uZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudDtcbiAgICB9XG59XG5GaWx0ZXJDZWxsSG9zdERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRmlsdGVyQ2VsbEhvc3RdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJDZWxsSG9zdERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFZpZXdDb250YWluZXJSZWYgfSxcbiAgICB7IHR5cGU6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9XG5dO1xuXG5jb25zdCBJTlRFUk5BTF9DT01QT05FTlRTID0gW1xuICAgIEZpbHRlclJvd0NvbXBvbmVudCxcbiAgICBGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIEZpbHRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBTdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIE51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIEF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgRmlsdGVyQ2VsbEhvc3REaXJlY3RpdmUsXG4gICAgRmlsdGVyQ2VsbFdyYXBwZXJDb21wb25lbnQsXG4gICAgRGF0ZUZpbHRlckNlbGxDb21wb25lbnRcbl07XG5jb25zdCBFTlRSWV9DT01QT05FTlRTID0gW1xuICAgIFN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgTnVtZXJpY0ZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgRGF0ZUZpbHRlckNlbGxDb21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUm93RmlsdGVyTW9kdWxlIHtcbiAgICBzdGF0aWMgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEZpbHRlclJvd0NvbXBvbmVudCxcbiAgICAgICAgICAgIEZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgICAgICAgICBGaWx0ZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBGaWx0ZXJDZWxsT3BlcmF0b3JzQ29tcG9uZW50LFxuICAgICAgICAgICAgU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICAgICAgICAgIE51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgICAgICAgICAgQXV0b0NvbXBsZXRlRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICAgICAgICAgIEJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgICAgICAgICAgRGF0ZUZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgICAgICAgICBTaGFyZWRGaWx0ZXJNb2R1bGUuZXhwb3J0cygpXG4gICAgICAgIF07XG4gICAgfVxufVxuUm93RmlsdGVyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtJTlRFUk5BTF9DT01QT05FTlRTXSxcbiAgICAgICAgICAgICAgICBlbnRyeUNvbXBvbmVudHM6IEVOVFJZX0NPTVBPTkVOVFMsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0lOVEVSTkFMX0NPTVBPTkVOVFMsIFNoYXJlZEZpbHRlck1vZHVsZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW1NoYXJlZEZpbHRlck1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZVNldHRpbmdzID0gKHsgYnV0dG9uQ291bnQgPSAxMCwgaW5mbyA9IHRydWUsIHR5cGUgPSAnbnVtZXJpYycsIHBhZ2VTaXplcyA9IGZhbHNlLCBwcmV2aW91c05leHQgPSB0cnVlIH0pID0+ICh7XG4gICAgYnV0dG9uQ291bnQsXG4gICAgaW5mbyxcbiAgICBwYWdlU2l6ZXM6IHBhZ2VTaXplcyA9PT0gdHJ1ZSA/IFs1LCAxMCwgMjBdIDogcGFnZVNpemVzLFxuICAgIHByZXZpb3VzTmV4dCxcbiAgICB0eXBlXG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub3JtYWxpemUgPSAoc2V0dGluZ3MpID0+IG5vcm1hbGl6ZVNldHRpbmdzKHNldHRpbmdzID09PSB0cnVlID8ge30gOiBzZXR0aW5ncyk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQYWdlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocGFnZXJDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0ID0gcGFnZXJDb250ZXh0O1xuICAgICAgICB0aGlzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5za2lwID0gMTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gbm9ybWFsaXplKHt9KTtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0ID0ge307XG4gICAgfVxuICAgIHNldCBvcHRpb25zKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBub3JtYWxpemUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcGFnZXJXcmFwQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZ3JpZFBhZ2VyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgd2lkZ2V0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgdG90YWxQYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgodGhpcy50b3RhbCB8fCAwKSAvIHRoaXMucGFnZVNpemUpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCh0aGlzLnNraXAgfHwgMCkgLyB0aGlzLnBhZ2VTaXplKSArIDE7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl90ZW1wbGF0ZUNvbnRleHQ7XG4gICAgICAgIGNvbnRleHQudG90YWxQYWdlcyA9IHRoaXMudG90YWxQYWdlcztcbiAgICAgICAgY29udGV4dC50b3RhbCA9IHRoaXMudG90YWw7XG4gICAgICAgIGNvbnRleHQuc2tpcCA9IHRoaXMuc2tpcDtcbiAgICAgICAgY29udGV4dC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICAgIGNvbnRleHQuY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMucGFnZXJDb250ZXh0LnBhZ2VDaGFuZ2Uuc3Vic2NyaWJlKHRoaXMuY2hhbmdlUGFnZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoYW55Q2hhbmdlZChbJ3BhZ2VTaXplJywgJ3NraXAnLCAndG90YWwnXSwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dC5ub3RpZnlDaGFuZ2VzKHtcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBza2lwOiB0aGlzLnNraXAsXG4gICAgICAgICAgICAgICAgdG90YWw6IHRoaXMudG90YWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGFuZ2VQYWdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG59XG5QYWdlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwidGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItcHJldi1idXR0b25zICpuZ0lmPVwic2V0dGluZ3MucHJldmlvdXNOZXh0XCI+PC9rZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZXR0aW5ncy50eXBlID09PSAnbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgIFtidXR0b25Db3VudF09XCJzZXR0aW5ncy5idXR0b25Db3VudFwiPlxuICAgICAgICAgICAgPC9rZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnM+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItaW5wdXQgKm5nSWY9XCJzZXR0aW5ncy50eXBlID09PSAnaW5wdXQnXCI+PC9rZW5kby1wYWdlci1pbnB1dD5cbiAgICAgICAgICAgIDxrZW5kby1wYWdlci1uZXh0LWJ1dHRvbnMgKm5nSWY9XCJzZXR0aW5ncy5wcmV2aW91c05leHRcIj48L2tlbmRvLXBhZ2VyLW5leHQtYnV0dG9ucz5cbiAgICAgICAgICAgIDxrZW5kby1wYWdlci1pbmZvICpuZ0lmPSdzZXR0aW5ncy5pbmZvJz48L2tlbmRvLXBhZ2VyLWluZm8+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItcGFnZS1zaXplcyAqbmdJZj1cInNldHRpbmdzLnBhZ2VTaXplc1wiIFtwYWdlU2l6ZXNdPVwic2V0dGluZ3MucGFnZVNpemVzXCI+PC9rZW5kby1wYWdlci1wYWdlLXNpemVzPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYWdlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfVxuXTtcblBhZ2VyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvdGFsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBza2lwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlU2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3B0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBwYWdlcldyYXBDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1wYWdlci13cmFwJyxdIH1dLFxuICAgIGdyaWRQYWdlckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtcGFnZXInLF0gfV0sXG4gICAgd2lkZ2V0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZXJFbGVtZW50Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0ID0gcGFnZXJDb250ZXh0O1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIHRoaXMudG90YWwgPSB0aGlzLnBhZ2VyQ29udGV4dC50b3RhbDtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5wYWdlckNvbnRleHQuc2tpcDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnZXJDb250ZXh0LnBhZ2VTaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQYWdlckVsZW1lbnRDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCh0aGlzLnNraXAgfHwgMCkgLyB0aGlzLnBhZ2VTaXplKSArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBhZ2VyRWxlbWVudENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCB0b3RhbFBhZ2VzKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKCh0aGlzLnRvdGFsIHx8IDApIC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQG1lbWJlck9mIFBhZ2VyRWxlbWVudENvbXBvbmVudFxuICAgICAqL1xuICAgIHRleHRGb3Ioa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBQYWdlckVsZW1lbnRDb21wb25lbnRcbiAgICAgKi9cbiAgICBjaGFuZ2VQYWdlKHBhZ2UpIHtcbiAgICAgICAgdGhpcy5wYWdlckNvbnRleHQuY2hhbmdlUGFnZShwYWdlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJFbGVtZW50Q29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMucGFnZXJDb250ZXh0LmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMub25DaGFuZ2VzLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXJcbi8qKlxuICogRGlzcGxheXMgYnV0dG9ucyBmb3IgbmF2aWdhdGluZyB0byB0aGUgZmlyc3QgYW5kIHRvIHRoZSBwcmV2aW91cyBwYWdlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0jdG9jLXBhZ2VyLXRlbXBsYXRlcykpLlxuICovXG5jbGFzcyBQYWdlclByZXZCdXR0b25zQ29tcG9uZW50IGV4dGVuZHMgUGFnZXJFbGVtZW50Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIFBhZ2VyUHJldkJ1dHRvbnNDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID09PSAxIHx8ICF0aGlzLnRvdGFsO1xuICAgIH1cbiAgICBvbkNoYW5nZXMoeyB0b3RhbCwgc2tpcCwgcGFnZVNpemUgfSkge1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuc2tpcCA9IHNraXA7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5QYWdlclByZXZCdXR0b25zQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYWdlci1wcmV2LWJ1dHRvbnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxhICBocmVmPVwiI1wiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0Rm9yKCdwYWdlckZpcnN0UGFnZScpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSAhPT0gMSA/IGNoYW5nZVBhZ2UoMCkgOiBmYWxzZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2stbGluayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stcGFnZXItbmF2JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnay1zdGF0ZS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICdrLXBhZ2VyLWZpcnN0JzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Rm9yKCdwYWdlckZpcnN0UGFnZScpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdrLWljb24nOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICdrLWktc2Vlay13JzogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcigncGFnZXJQcmV2aW91c1BhZ2UnKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgIT09IDEgPyBjaGFuZ2VQYWdlKGN1cnJlbnRQYWdlLTIpIDogZmFsc2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdrLWxpbmsnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXBhZ2VyLW5hdic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stc3RhdGUtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnJzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Rm9yKCdwYWdlclByZXZpb3VzUGFnZScpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdrLWljb24nOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICdrLWktYXJyb3ctdyc6IHRydWVcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhZ2VyUHJldkJ1dHRvbnNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTogbm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG4vKipcbiAqIERpc3BsYXlzIGJ1dHRvbnMgZm9yIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgYW5kIHRvIHRoZSBsYXN0IHBhZ2UgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwYWdpbmdfZ3JpZCAlfSN0b2MtcGFnZXItdGVtcGxhdGUpKS5cbiAqL1xuY2xhc3MgUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudCBleHRlbmRzIFBhZ2VyRWxlbWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKSB7XG4gICAgICAgIHN1cGVyKGxvY2FsaXphdGlvbiwgcGFnZXJDb250ZXh0LCBjZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBQYWdlck5leHRCdXR0b25zQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzIHx8ICF0aGlzLnRvdGFsO1xuICAgIH1cbiAgICBvbkNoYW5nZXMoeyB0b3RhbCwgc2tpcCwgcGFnZVNpemUgfSkge1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuc2tpcCA9IHNraXA7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5QYWdlck5leHRCdXR0b25zQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYWdlci1uZXh0LWJ1dHRvbnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxhICBocmVmPVwiI1wiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0Rm9yKCdwYWdlck5leHRQYWdlJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRQYWdlICE9PSB0b3RhbFBhZ2VzID8gY2hhbmdlUGFnZShjdXJyZW50UGFnZSkgOiBmYWxzZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2stbGluayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stcGFnZXItbmF2JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnay1zdGF0ZS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICcnOiB0cnVlXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8c3BhbiBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHRGb3IoJ3BhZ2VyTmV4dFBhZ2UnKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnay1pY29uJzp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnay1pLWFycm93LWUnOiB0cnVlXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhICBocmVmPVwiI1wiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0Rm9yKCdwYWdlckxhc3RQYWdlJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRQYWdlICE9PSB0b3RhbFBhZ2VzID8gY2hhbmdlUGFnZSh0b3RhbFBhZ2VzLTEpIDogZmFsc2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdrLWxpbmsnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXBhZ2VyLW5hdic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stc3RhdGUtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnay1wYWdlci1sYXN0JzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Rm9yKCdwYWdlckxhc3RQYWdlJylcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2staWNvbic6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2staS1zZWVrLWUnOiB0cnVlXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYWdlck5leHRCdXR0b25zQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUGFnZXJDb250ZXh0U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblxuLyoqXG4gKiBEaXNwbGF5cyBudW1lcmljIGJ1dHRvbnMgdG8gZW5hYmxlIG5hdmlnYXRpb24gYmV0d2VlbiB0aGUgcGFnZXMuXG4gKi9cbmNsYXNzIFBhZ2VyTnVtZXJpY0J1dHRvbnNDb21wb25lbnQgZXh0ZW5kcyBQYWdlckVsZW1lbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgY2QsIHBhZ2VyQ29udGV4dCkge1xuICAgICAgICBzdXBlcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dCA9IHBhZ2VyQ29udGV4dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge251bWJlcltdfVxuICAgICAqIEBtZW1iZXJPZiBQYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGJ1dHRvbnMoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gdGhpcy5zdGFydDsgaWR4IDw9IHRoaXMuZW5kOyBpZHgrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaWR4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKCh0aGlzLnN0YXJ0ICsgdGhpcy5idXR0b25Db3VudCkgLSAxLCB0aGlzLnRvdGFsUGFnZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHN0YXJ0KCkge1xuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgY29uc3QgYnV0dG9uQ291bnQgPSB0aGlzLmJ1dHRvbkNvdW50O1xuICAgICAgICBpZiAocGFnZSA+IGJ1dHRvbkNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCByZW1pbmRlciA9IChwYWdlICUgYnV0dG9uQ291bnQpO1xuICAgICAgICAgICAgcmV0dXJuIChyZW1pbmRlciA9PT0gMCkgPyAocGFnZSAtIGJ1dHRvbkNvdW50KSArIDEgOiAocGFnZSAtIHJlbWluZGVyKSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwYWdlTGFiZWwobnVtKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VUZXh0ID0gdGhpcy50ZXh0Rm9yKCdwYWdlclBhZ2UnKTtcbiAgICAgICAgaWYgKHBhZ2VUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFnZVRleHQgKyAnICcgKyBudW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpO1xuICAgIH1cbiAgICBvbkNoYW5nZXMoeyB0b3RhbCwgc2tpcCwgcGFnZVNpemUgfSkge1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuc2tpcCA9IHNraXA7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5QYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgPHVsIFtuZ0NsYXNzXT1cInsnay1wYWdlci1udW1iZXJzJzogdHJ1ZSwgJ2stcmVzZXQnOiB0cnVlfVwiPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwic3RhcnQgPiAxXCI+XG4gICAgICAgICAgICAgICAgPGEgIGNsYXNzPVwiay1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwYWdlTGFiZWwoc3RhcnQgLSAxKVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKHN0YXJ0IC0gMilcIj4uLi48L2E+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBudW0gb2YgYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxhICBocmVmPVwiI1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGFnZUxhYmVsKG51bSlcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydrLWxpbmsnOiB0cnVlLCAnay1zdGF0ZS1zZWxlY3RlZCc6Y3VycmVudFBhZ2UgPT0gbnVtfVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKG51bSAtIDEpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bnVtfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiZW5kIDwgdG90YWxQYWdlc1wiPlxuICAgICAgICAgICAgICAgIDxhICBjbGFzcz1cImstbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGFnZUxhYmVsKGVuZCArIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVBhZ2UoZW5kKVwiPi4uLjwvYT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfVxuXTtcblBhZ2VyTnVtZXJpY0J1dHRvbnNDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYnV0dG9uQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIERpc3BsYXlzIGFuIGlucHV0IGVsZW1lbnQgd2hpY2ggYWxsb3dzIHRoZSB0eXBpbmcgYW5kIHJlbmRlcmluZyBvZiBwYWdlIG51bWJlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgIDxrZW5kby1ncmlkXG4gKiAgICAgICAgW2tlbmRvR3JpZEJpbmRpbmddPVwiZ3JpZERhdGFcIlxuICogICAgICAgIFtwYWdlU2l6ZV09XCIxXCJcbiAqICAgICAgICBbcGFnZWFibGVdPVwidHJ1ZVwiXG4gKiAgICAgID5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiSURcIiB3aWR0aD1cIjQwXCI+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIk5hbWVcIiB3aWR0aD1cIjI1MFwiPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiUHJpY2VcIiB3aWR0aD1cIjgwXCIgZm9ybWF0PVwiezA6Y31cIj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKlxuICogICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvUGFnZXJUZW1wbGF0ZSBsZXQtdG90YWxQYWdlcz1cInRvdGFsUGFnZXNcIiBsZXQtY3VycmVudFBhZ2U9XCJjdXJyZW50UGFnZVwiPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz48L2tlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucz5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnMgW2J1dHRvbkNvdW50XT1cIjEwXCI+PC9rZW5kby1wYWdlci1udW1lcmljLWJ1dHRvbnM+XG4gKiAgICAgICAgICA8a2VuZG8tcGFnZXItbmV4dC1idXR0b25zPjwva2VuZG8tcGFnZXItbmV4dC1idXR0b25zPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLWlucHV0Pjwva2VuZG8tcGFnZXItaW5wdXQ+XG4gKiAgICAgICAgICA8a2VuZG8tcGFnZXItaW5mbz48L2tlbmRvLXBhZ2VyLWluZm8+XG4gKiAgICAgICA8L25nLXRlbXBsYXRlPlxuICpcbiAqICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBQYWdlcklucHV0Q29tcG9uZW50IGV4dGVuZHMgUGFnZXJFbGVtZW50Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgem9uZSwgY2QpIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKTtcbiAgICAgICAgdGhpcy5wYWdlckNvbnRleHQgPSBwYWdlckNvbnRleHQ7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWVtYmVyT2YgUGFnZXJJbnB1dENvbXBvbmVudFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5jb21pbmdWYWx1ZSA9IHRoaXMubnVtZXJpY0lucHV0LnZhbHVlIHx8IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLkVudGVyKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdWYWx1ZSAhPT0gdGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKGluY29taW5nVmFsdWUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIFBhZ2VySW5wdXRDb21wb25lbnRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLm51bWVyaWNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubnVtZXJpY0lucHV0LndyaXRlVmFsdWUodGhpcy5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZSAhPT0gdGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShpbnB1dFZhbHVlIC0gMSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUGFnZXMgPyB0aGlzLmN1cnJlbnRQYWdlIDogMDtcbiAgICB9XG4gICAgZ2V0IGhhc1BhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbFBhZ2VzICE9PSAwO1xuICAgIH1cbiAgICBvbkNoYW5nZXMoeyB0b3RhbCwgc2tpcCwgcGFnZVNpemUgfSkge1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMuc2tpcCA9IHNraXA7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5QYWdlcklucHV0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYWdlci1pbnB1dCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydrLXBhZ2VyLWlucHV0JzogdHJ1ZSwgJ2stbGFiZWwnOiB0cnVlfVwiPlxuICAgICAgICB7e3RleHRGb3IoJ3BhZ2VyUGFnZScpfX1cbiAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94XG4gICAgICAgICAgICBbc3Bpbm5lcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2RlY2ltYWxzXT1cIjBcIlxuICAgICAgICAgICAgZm9ybWF0PVwibjBcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNQYWdlc1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudFwiXG4gICAgICAgICAgICBbbWluXT1cImhhc1BhZ2VzID8gMSA6IDBcIlxuICAgICAgICAgICAgW21heF09XCJ0b3RhbFBhZ2VzXCJcbiAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0ZXh0Rm9yKCdwYWdlclBhZ2VOdW1iZXJJbnB1dFRpdGxlJylcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIGtleWRvd246IGhhbmRsZUtleURvd24sXG4gICAgICAgICAgICAgICAgZm9jdXNvdXQ6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XG4gICAgICAgIHt7dGV4dEZvcigncGFnZXJPZicpfX0ge3t0b3RhbFBhZ2VzfX1cbiAgICAgPC9zcGFuPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJJbnB1dENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblBhZ2VySW5wdXRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgbnVtZXJpY0lucHV0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtOdW1lcmljVGV4dEJveENvbXBvbmVudCxdIH1dXG59O1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXJcbi8qKlxuICogRGlzcGxheXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0jdG9jLXBhZ2VyLXRlbXBsYXRlcykpLlxuICovXG5jbGFzcyBQYWdlckluZm9Db21wb25lbnQgZXh0ZW5kcyBQYWdlckVsZW1lbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgY2QsIHBhZ2VyQ29udGV4dCkge1xuICAgICAgICBzdXBlcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dCA9IHBhZ2VyQ29udGV4dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJJbmZvQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IG1heEl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucGFnZVNpemUsIHRoaXMudG90YWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQYWdlckluZm9Db21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgY3VycmVudFBhZ2VUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b3RhbCA/XG4gICAgICAgICAgICAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDEgOlxuICAgICAgICAgICAgMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIFBhZ2VySW5mb0NvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBjbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJJbmZvQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYWdlci1pbmZvJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYHt7Y3VycmVudFBhZ2VUZXh0fX0gLSB7e21heEl0ZW1zfX0ge3t0ZXh0Rm9yKCdwYWdlck9mJyl9fSB7e3RvdGFsfX0ge3t0ZXh0Rm9yKCdwYWdlckl0ZW1zJyl9fWBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJJbmZvQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfVxuXTtcblBhZ2VySW5mb0NvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1wYWdlci1pbmZvXCIsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWxhYmVsXCIsXSB9XVxufTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG4vKipcbiAqIERpc3BsYXlzIGEgZHJvcC1kb3duIGxpc3QgZm9yIHRoZSBwYWdlIHNpemUgc2VsZWN0aW9uIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0jdG9jLXBhZ2VyLXRlbXBsYXRlcykpLlxuICovXG5jbGFzcyBQYWdlclBhZ2VTaXplc0NvbXBvbmVudCBleHRlbmRzIFBhZ2VyRWxlbWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBjZCwgcGFnZXJDb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKGxvY2FsaXphdGlvbiwgcGFnZXJDb250ZXh0LCBjZCk7XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0ID0gcGFnZXJDb250ZXh0O1xuICAgICAgICB0aGlzLl9wYWdlU2l6ZXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IHBhZ2VTaXplcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHBhZ2Ugc2l6ZXMgY29sbGVjdGlvbi4gQ2FuIGJlIGFuIEFycmF5IG9mIG51bWJlcnMgYW5kL29yIFBhZ2VTaXplSXRlbSBvYmplY3RzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0cy1wcmV2aWV3XG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAqICAgICAgICA8a2VuZG8tZ3JpZCBba2VuZG9HcmlkQmluZGluZ109XCJncmlkRGF0YVwiIFtoZWlnaHRdPVwiMjAwXCJcbiAgICAgKiAgICAgICAgICAgW3BhZ2VhYmxlXT1cInRydWVcIlxuICAgICAqICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCI+XG4gICAgICogICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9QYWdlclRlbXBsYXRlIGxldC10b3RhbFBhZ2VzPVwidG90YWxQYWdlc1wiIGxldC1jdXJyZW50UGFnZT1cImN1cnJlbnRQYWdlXCI+XG4gICAgICogICAgICAgICAgICAgICAgPGtlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXMgW3BhZ2VTaXplc109XCJwYWdlc2l6ZXNcIj48L2tlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXM+XG4gICAgICogICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gICAgICogICAgYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdID0gcHJvZHVjdHM7XG4gICAgICogICAgcHVibGljIHBhZ2VTaXplID0gMjtcbiAgICAgKiAgICBwdWJsaWMgcGFnZXNpemVzID0gW3t0ZXh0OiAnT25lJywgdmFsdWU6IDF9LCB7dGV4dDogJ1R3bycsIHZhbHVlOiAyfSwge3RleHQ6ICdBbGwnLCB2YWx1ZSA6ICdhbGwnfV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICAgICAqICAgJ1Byb2R1Y3RJRCcgOiAxLFxuICAgICAqICAgJ1Byb2R1Y3ROYW1lJyA6IFwiQ2hhaVwiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMSxcbiAgICAgKiAgICdDYXRlZ29yeUlEJyA6IDEsXG4gICAgICogICAnUXVhbnRpdHlQZXJVbml0JyA6IFwiMTAgYm94ZXMgeCAyMCBiYWdzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDE4LjAwMDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDM5LFxuICAgICAqICAgJ1VuaXRzT25PcmRlcicgOiAwLFxuICAgICAqICAgJ1Jlb3JkZXJMZXZlbCcgOiAxMCxcbiAgICAgKiAgICdEaXNjb250aW51ZWQnIDogZmFsc2VcbiAgICAgKlxuICAgICAqIH0sIHtcbiAgICAgKiAgICdQcm9kdWN0SUQnIDogMixcbiAgICAgKiAgICdQcm9kdWN0TmFtZScgOiBcIkNoYW5nXCIsXG4gICAgICogICAnU3VwcGxpZXJJRCcgOiAxLFxuICAgICAqICAgJ0NhdGVnb3J5SUQnIDogMSxcbiAgICAgKiAgICdRdWFudGl0eVBlclVuaXQnIDogXCIyNCAtIDEyIG96IGJvdHRsZXNcIixcbiAgICAgKiAgICdVbml0UHJpY2UnIDogMTkuMDAwMCxcbiAgICAgKiAgICdVbml0c0luU3RvY2snIDogMTcsXG4gICAgICogICAnVW5pdHNPbk9yZGVyJyA6IDQwLFxuICAgICAqICAgJ1Jlb3JkZXJMZXZlbCcgOiAyNSxcbiAgICAgKiAgICdEaXNjb250aW51ZWQnIDogZmFsc2VcbiAgICAgKiB9LCB7XG4gICAgICogICAnUHJvZHVjdElEJyA6IDMsXG4gICAgICogICAnUHJvZHVjdE5hbWUnIDogXCJBbmlzZWVkIFN5cnVwXCIsXG4gICAgICogICAnU3VwcGxpZXJJRCcgOiAxLFxuICAgICAqICAgJ0NhdGVnb3J5SUQnIDogMixcbiAgICAgKiAgICdRdWFudGl0eVBlclVuaXQnIDogXCIxMiAtIDU1MCBtbCBib3R0bGVzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDEwLjAwMDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDEzLFxuICAgICAqICAgJ1VuaXRzT25PcmRlcicgOiA3MCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMjUsXG4gICAgICogICAnRGlzY29udGludWVkJyA6IGZhbHNlXG4gICAgICogfSwge1xuICAgICAqICAgJ1Byb2R1Y3RJRCcgOiA0LFxuICAgICAqICAgJ1Byb2R1Y3ROYW1lJyA6IFwiQ2hlZiBBbnRvblxcJ3MgQ2FqdW4gU2Vhc29uaW5nXCIsXG4gICAgICogICAnU3VwcGxpZXJJRCcgOiAyLFxuICAgICAqICAnQ2F0ZWdvcnlJRCcgOiAyLFxuICAgICAqICAgJ1F1YW50aXR5UGVyVW5pdCcgOiBcIjQ4IC0gNiBveiBqYXJzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDIyLjAwMDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDUzLFxuICAgICAqICAgJ1VuaXRzT25PcmRlcicgOiAwLFxuICAgICAqICAgJ1Jlb3JkZXJMZXZlbCcgOiAwLFxuICAgICAqICAgJ0Rpc2NvbnRpbnVlZCcgOiBmYWxzZVxuICAgICAqIH0sIHtcbiAgICAgKiAgICdQcm9kdWN0SUQnIDogNSxcbiAgICAgKiAgICdQcm9kdWN0TmFtZScgOiBcIkNoZWYgQW50b25cXCdzIEd1bWJvIE1peFwiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMixcbiAgICAgKiAgICdDYXRlZ29yeUlEJyA6IDIsXG4gICAgICogICAnUXVhbnRpdHlQZXJVbml0JyA6IFwiMzYgYm94ZXNcIixcbiAgICAgKiAgICdVbml0UHJpY2UnIDogMjEuMzUwMCxcbiAgICAgKiAgICdVbml0c0luU3RvY2snIDogMCxcbiAgICAgKiAgICdVbml0c09uT3JkZXInIDogMCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMCxcbiAgICAgKiAgICdEaXNjb250aW51ZWQnIDogdHJ1ZVxuICAgICAqIH0sIHtcbiAgICAgKiAgICdQcm9kdWN0SUQnIDogNixcbiAgICAgKiAgICdQcm9kdWN0TmFtZScgOiBcIkdyYW5kbWFcXCdzIEJveXNlbmJlcnJ5IFNwcmVhZFwiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMyxcbiAgICAgKiAgICdDYXRlZ29yeUlEJyA6IDIsXG4gICAgICogICAnUXVhbnRpdHlQZXJVbml0JyA6IFwiMTIgLSA4IG96IGphcnNcIixcbiAgICAgKiAgICdVbml0UHJpY2UnIDogMjUuMDAwMCxcbiAgICAgKiAgICdVbml0c0luU3RvY2snIDogMTIwLFxuICAgICAqICAgJ1VuaXRzT25PcmRlcicgOiAwLFxuICAgICAqICAgJ1Jlb3JkZXJMZXZlbCcgOiAyNSxcbiAgICAgKiAgICdEaXNjb250aW51ZWQnIDogZmFsc2VcbiAgICAgKiB9XTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXQgcGFnZVNpemVzKHBhZ2VTaXplcykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkSXRlbXMgPSBbXTtcbiAgICAgICAgcGFnZVNpemVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BhZ2VTaXplcyA9IG5vcm1hbGl6ZWRJdGVtcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IGNsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKi9cbiAgICBnZXQgc2hvd0luaXRpYWxQYWdlU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZVNpemVzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b3RhbCA9PT0gTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHBhZ2VTaXplQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dC5jaGFuZ2VQYWdlU2l6ZSh0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldFZhbHVlKHBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYWdlLnZhbHVlID09PSAnbnVtYmVyJyA/IHBhZ2UudmFsdWUgOiB0aGlzLnRvdGFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0U2VsZWN0ZWRTdGF0ZShwYWdlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFnZS52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBwYWdlLnZhbHVlID09PSB0aGlzLnBhZ2VTaXplID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZSA9PT0gdGhpcy50b3RhbDtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gdHlwZW9mIHBhZ2VTaXplID09PSAnbnVtYmVyJyA/IHBhZ2VTaXplIDogdGhpcy50b3RhbDtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5QYWdlclBhZ2VTaXplc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItcGFnZS1zaXplcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHNlbGVjdCAjc2VsZWN0XG4gICAgICAgICAgICAoY2hhbmdlKT1cInBhZ2VTaXplQ2hhbmdlKHNlbGVjdC52YWx1ZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Rm9yKCdwYWdlckl0ZW1zUGVyUGFnZScpXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0lmPVwic2hvd0luaXRpYWxQYWdlU2l6ZVwiIFt2YWx1ZV09XCJwYWdlU2l6ZVwiPnt7cGFnZVNpemV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcGFnZSBvZiBwYWdlU2l6ZXNcIiBbdmFsdWVdPVwiZ2V0VmFsdWUocGFnZSlcIiBbc2VsZWN0ZWRdPVwiZ2V0U2VsZWN0ZWRTdGF0ZShwYWdlKVwiPlxuICAgICAgICAgICAgICAgIHt7cGFnZVsndGV4dCddfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAge3sgdGV4dEZvcigncGFnZXJJdGVtc1BlclBhZ2UnKSB9fVxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogUGFnZXJDb250ZXh0U2VydmljZSB9XG5dO1xuUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgcGFnZVNpemVzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXBhZ2VyLXNpemVzJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1sYWJlbCcsXSB9XVxufTtcblxuY29uc3QgaW1wb3J0ZWRNb2R1bGVzJDEgPSBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElucHV0c01vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGVcbl07XG5jb25zdCBJTlRFUk5BTF9DT01QT05FTlRTJDEgPSBbXG4gICAgUGFnZXJDb21wb25lbnQsXG4gICAgUGFnZXJQcmV2QnV0dG9uc0NvbXBvbmVudCxcbiAgICBQYWdlck5leHRCdXR0b25zQ29tcG9uZW50LFxuICAgIFBhZ2VyTnVtZXJpY0J1dHRvbnNDb21wb25lbnQsXG4gICAgUGFnZXJJbnB1dENvbXBvbmVudCxcbiAgICBQYWdlckluZm9Db21wb25lbnQsXG4gICAgUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQsXG4gICAgUGFnZXJUZW1wbGF0ZURpcmVjdGl2ZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQYWdlck1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBQYWdlckNvbXBvbmVudCxcbiAgICAgICAgICAgIFBhZ2VyUHJldkJ1dHRvbnNDb21wb25lbnQsXG4gICAgICAgICAgICBQYWdlck5leHRCdXR0b25zQ29tcG9uZW50LFxuICAgICAgICAgICAgUGFnZXJOdW1lcmljQnV0dG9uc0NvbXBvbmVudCxcbiAgICAgICAgICAgIFBhZ2VySW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICBQYWdlckluZm9Db21wb25lbnQsXG4gICAgICAgICAgICBQYWdlclBhZ2VTaXplc0NvbXBvbmVudCxcbiAgICAgICAgICAgIFBhZ2VyVGVtcGxhdGVEaXJlY3RpdmVcbiAgICAgICAgXTtcbiAgICB9XG59XG5QYWdlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbSU5URVJOQUxfQ09NUE9ORU5UUyQxXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbSU5URVJOQUxfQ09NUE9ORU5UUyQxXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbLi4uaW1wb3J0ZWRNb2R1bGVzJDFdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBHcm91cEhlYWRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZ3JvdXBzU2VydmljZSwgZ3JvdXBJbmZvU2VydmljZSkge1xuICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UgPSBncm91cHNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmdyb3VwSW5mb1NlcnZpY2UgPSBncm91cEluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLnNraXBHcm91cERlY29yYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG90YWxDb2x1bW5zQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGdyb3VwSXRlbUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuaXNFeHBhbmRlZCh0aGlzLml0ZW0uaW5kZXgpO1xuICAgIH1cbiAgICBwcmVmaXhHcm91cENlbGwoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KGl0ZW0ubGV2ZWwpO1xuICAgIH1cbiAgICB0b2dnbGVHcm91cChpdGVtKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS50b2dnbGVSb3coaXRlbS5pbmRleCwgaXRlbS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBncm91cFNwYW4oaXRlbSkge1xuICAgICAgICBjb25zdCBncm91cENvdW50ID0gKHRoaXMuZ3JvdXBzIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRldGFpbE9mZnNldCA9IHRoaXMuaGFzRGV0YWlscyA/IDEgOiAwO1xuICAgICAgICBpZiAodGhpcy5oYXNHcm91cEhlYWRlckNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGdyb3VwQ291bnQgKyAxICsgZGV0YWlsT2Zmc2V0IC0gaXRlbS5sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29sdW1uQ291bnQgPSBjb2x1bW5zU3Bhbih0aGlzLmNvbHVtbnMpO1xuICAgICAgICBpZiAodGhpcy5za2lwR3JvdXBEZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyb3VwQ291bnQgKyBjb2x1bW5Db3VudCArIGRldGFpbE9mZnNldCAtIGl0ZW0ubGV2ZWw7XG4gICAgfVxuICAgIGxvZ2ljYWxDb2xTcGFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5za2lwR3JvdXBEZWNvcmF0aW9uID8gMSA6IHRoaXMudG90YWxDb2x1bW5zQ291bnQ7XG4gICAgfVxuICAgIGFyaWFSb2xlKCkge1xuICAgICAgICBpZiAodGhpcy5za2lwR3JvdXBEZWNvcmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3ByZXNlbnRhdGlvbic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdncmlkY2VsbCc7XG4gICAgfVxuICAgIGZvcm1hdEZvckdyb3VwKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBJbmZvU2VydmljZS5mb3JtYXRGb3JHcm91cChpdGVtKTtcbiAgICB9XG4gICAgZ3JvdXBUaXRsZShpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwSW5mb1NlcnZpY2UuZ3JvdXBUaXRsZShpdGVtKTtcbiAgICB9XG4gICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZShpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwSW5mb1NlcnZpY2UuZ3JvdXBIZWFkZXJUZW1wbGF0ZShpdGVtKTtcbiAgICB9XG59XG5Hcm91cEhlYWRlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEdyb3VwSGVhZGVyXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFza2lwR3JvdXBEZWNvcmF0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWdyb3VwLWNlbGxcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBnIG9mIHByZWZpeEdyb3VwQ2VsbChpdGVtKVwiPjwvdGQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImdyb3VwU3BhbihpdGVtKVwiICpuZ0lmPVwiIShza2lwR3JvdXBEZWNvcmF0aW9uICYmIGhhc0dyb3VwSGVhZGVyQ29sdW1uKVwiXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cImFyaWFSb2xlKClcIlxuICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXhcIlxuICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVDZWxsXT1cInNraXBHcm91cERlY29yYXRpb25cIlxuICAgICAgICAgICAgW2dyb3VwSXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgIFtjb2xTcGFuXT1cImxvZ2ljYWxDb2xTcGFuKClcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiay1yZXNldFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2tpcEdyb3VwRGVjb3JhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwidG9nZ2xlR3JvdXAoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnay1pLWNvbGxhcHNlJzogaXNFeHBhbmRlZCwgJ2staS1leHBhbmQnOiAhaXNFeHBhbmRlZCB9XCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhZ3JvdXBIZWFkZXJUZW1wbGF0ZShpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2dyb3VwVGl0bGUoaXRlbSl9fToge3tpdGVtLmRhdGEgfCB2YWx1ZU9mOlwidmFsdWVcIjogZm9ybWF0Rm9yR3JvdXAoaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiBncm91cEhlYWRlclRlbXBsYXRlKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiBpdGVtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlczogaXRlbS5kYXRhPy5hZ2dyZWdhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmRhdGE/LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBpdGVtLmRhdGE/LmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBpc0V4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbS5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNHcm91cEhlYWRlckNvbHVtblwiPlxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ3JvdXBIZWFkZXJDb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwiaW5kZXggKyAxXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2dyb3VwSXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbY29sU3Bhbl09XCIxXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cDogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlczogaXRlbS5kYXRhPy5hZ2dyZWdhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uZGF0YT8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogaXRlbS5kYXRhPy5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBIZWFkZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcm91cHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBHcm91cEluZm9TZXJ2aWNlIH1cbl07XG5Hcm91cEhlYWRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICByb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpdGVtOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBza2lwR3JvdXBEZWNvcmF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoYXNEZXRhaWxzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3RhbENvbHVtbnNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGFzR3JvdXBIZWFkZXJDb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwSGVhZGVyQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEl0ZW1DbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncm91cGluZy1yb3cnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEcm9wVGFyZ2V0RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB0aGlzLmVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRyb3AgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hZGQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnNlcnZpY2UuY2hhbmdlcy5waXBlKGZpbHRlcigoeyB0YXJnZXQgfSkgPT4gdGFyZ2V0ID09PSB0aGlzKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoY2hhbmdlcy5waXBlKGZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdsZWF2ZScpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIHRoaXMubGVhdmUubmV4dCh0aGlzLmV2ZW50QXJncyhlKSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChjaGFuZ2VzLnBpcGUoZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ2VudGVyJykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnRlci5uZXh0KHRoaXMuZXZlbnRBcmdzKGUpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGNoYW5nZXMucGlwZShmaWx0ZXIoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnZHJvcCcpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIHRoaXMuZHJvcC5uZXh0KHRoaXMuZXZlbnRBcmdzKGUpKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXZlbnRBcmdzKGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgIG1vdXNlRXZlbnQ6IGUubW91c2VFdmVudCxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogZS5kcmFnZ2FibGVcbiAgICAgICAgfTtcbiAgICB9XG59XG5Ecm9wVGFyZ2V0RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9Ecm9wVGFyZ2V0XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRHJvcFRhcmdldERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IERyYWdBbmREcm9wU2VydmljZSB9XG5dO1xuRHJvcFRhcmdldERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb250ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBlbnRlcjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGxlYXZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZHJvcDogW3sgdHlwZTogT3V0cHV0IH1dXG59O1xuXG5jb25zdCB3aXRob3V0RmllbGQgPSAoeyBmaWVsZCB9KSA9PiBpc051bGxPckVtcHR5U3RyaW5nKGZpZWxkKTtcbmNvbnN0IGFscmVhZHlHcm91cGVkID0gKHsgZ3JvdXBzLCBmaWVsZCB9KSA9PiBncm91cHMuc29tZShncm91cCA9PiBncm91cC5maWVsZCA9PT0gZmllbGQpO1xuY29uc3Qgb3ZlclNhbWVUYXJnZXQgPSAoeyB0YXJnZXQsIGZpZWxkIH0pID0+IHRhcmdldC5maWVsZCA9PT0gZmllbGQ7XG5jb25zdCBvdmVyTGFzdFRhcmdldCA9ICh7IHRhcmdldCB9KSA9PiB0YXJnZXQubGFzdFRhcmdldDtcbmNvbnN0IGlzTGFzdEdyb3VwID0gKHsgZ3JvdXBzLCBmaWVsZCB9KSA9PiBncm91cHMubWFwKGdyb3VwID0+IGdyb3VwLmZpZWxkKS5pbmRleE9mKGZpZWxkKSA9PT0gZ3JvdXBzLmxlbmd0aCAtIDE7XG5jb25zdCBpc05vdEdyb3VwYWJsZSA9IChncm91cHNTZXJ2aWNlKSA9PiAoeyBmaWVsZCB9KSA9PiAhZ3JvdXBzU2VydmljZS5pc0dyb3VwYWJsZShmaWVsZCk7XG5jb25zdCBjb2x1bW5SdWxlcyA9IChncm91cFNlcnZpY2UpID0+IG9yKHdpdGhvdXRGaWVsZCwgYWxyZWFkeUdyb3VwZWQsIGlzTm90R3JvdXBhYmxlKGdyb3VwU2VydmljZSkpO1xuY29uc3QgaW5kaWNhdG9yUnVsZXMgPSBvcihvdmVyU2FtZVRhcmdldCwgYW5kKG92ZXJMYXN0VGFyZ2V0LCBpc0xhc3RHcm91cCkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyb3VwUGFuZWxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGhpbnQsIGN1ZSwgZ3JvdXBJbmZvU2VydmljZSwgbG9jYWxpemF0aW9uLCBjZCkge1xuICAgICAgICB0aGlzLmhpbnQgPSBoaW50O1xuICAgICAgICB0aGlzLmN1ZSA9IGN1ZTtcbiAgICAgICAgdGhpcy5ncm91cEluZm9TZXJ2aWNlID0gZ3JvdXBJbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2QgPSBjZDtcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIHRoaXMuZHJvcFRhcmdldHMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMuZ3JvdXBUaXRsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIGdldCBncm91cEhlYWRlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2V0IHRleHQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5lbXB0eVRleHQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcHR5VGV4dCA/IHRoaXMuZW1wdHlUZXh0IDogdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdncm91cFBhbmVsRW1wdHknKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQob2JzZXJ2ZSh0aGlzLmRyb3BUYXJnZXRzKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmF0dGFjaFRhcmdldHMuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VGl0bGVzID0gdGhpcy5ncm91cHMubWFwKGdyb3VwID0+IHRoaXMuZ3JvdXBJbmZvU2VydmljZS5ncm91cFRpdGxlKGdyb3VwKSk7XG4gICAgICAgIGlmIChjdXJyZW50VGl0bGVzLmxlbmd0aCAhPT0gdGhpcy5ncm91cFRpdGxlcy5sZW5ndGggfHwgY3VycmVudFRpdGxlcy5zb21lKChjdXJyZW50LCBpZHgpID0+IGN1cnJlbnQgIT09IHRoaXMuZ3JvdXBUaXRsZXNbaWR4XSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBUaXRsZXMgPSBjdXJyZW50VGl0bGVzO1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhcmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXJlY3Rpb25DaGFuZ2UoZ3JvdXApIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdyb3Vwcy5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09PSBncm91cC5maWVsZCk7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IFsuLi50aGlzLmdyb3Vwcy5zbGljZSgwLCBpbmRleCksIGdyb3VwLCAuLi50aGlzLmdyb3Vwcy5zbGljZShpbmRleCArIDEpXTtcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChncm91cHMpO1xuICAgIH1cbiAgICBpbnNlcnQoZmllbGQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IGZpZWxkKTtcbiAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGggfHwgdGhpcy5ncm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KFsuLi5ncm91cHMuc2xpY2UoMCwgaW5kZXgpLCB7IGZpZWxkOiBmaWVsZCB9LCAuLi5ncm91cHMuc2xpY2UoaW5kZXgpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlKGdyb3VwKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5ncm91cHMuZmlsdGVyKHggPT4geC5maWVsZCAhPT0gZ3JvdXAuZmllbGQpKTtcbiAgICB9XG4gICAgY2FuRHJvcChkcmFnZ2FibGUsIHRhcmdldCkge1xuICAgICAgICBjb25zdCBpc0luZGljYXRvciA9IGRyYWdnYWJsZS50eXBlID09PSAnZ3JvdXBJbmRpY2F0b3InO1xuICAgICAgICBjb25zdCBydWxlcyA9IGlzSW5kaWNhdG9yXG4gICAgICAgICAgICA/IGluZGljYXRvclJ1bGVzXG4gICAgICAgICAgICA6IGNvbHVtblJ1bGVzKHRoaXMuZ3JvdXBJbmZvU2VydmljZSk7XG4gICAgICAgIHJldHVybiAhcnVsZXMoe1xuICAgICAgICAgICAgZmllbGQ6IGRyYWdnYWJsZS5maWVsZCxcbiAgICAgICAgICAgIGdyb3VwczogdGhpcy5ncm91cHMsXG4gICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGF0dGFjaFRhcmdldHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhcmdldFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgY29uc3QgZW50ZXJTdHJlYW0gPSB0aGlzLmRyb3BUYXJnZXRzXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHRhcmdldCkgPT4gbWVyZ2UoYWNjLCB0YXJnZXQuZW50ZXIpLCBmcm9tKFtdKSk7XG4gICAgICAgIGNvbnN0IGxlYXZlU3RyZWFtID0gdGhpcy5kcm9wVGFyZ2V0c1xuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB0YXJnZXQpID0+IG1lcmdlKGFjYywgdGFyZ2V0LmxlYXZlKSwgZnJvbShbXSkpO1xuICAgICAgICBjb25zdCBkcm9wU3RyZWFtID0gdGhpcy5kcm9wVGFyZ2V0c1xuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB0YXJnZXQpID0+IG1lcmdlKGFjYywgdGFyZ2V0LmRyb3ApLCBmcm9tKFtdKSk7XG4gICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uLmFkZChlbnRlclN0cmVhbS5waXBlKHRhcChfID0+IHRoaXMuaGludC5yZW1vdmVMb2NrKCkpLCBmaWx0ZXIoKHsgZHJhZ2dhYmxlLCB0YXJnZXQgfSkgPT4gdGhpcy5jYW5Ecm9wKGRyYWdnYWJsZS5jb250ZXh0LCB0YXJnZXQuY29udGV4dCkpLCB0YXAodGhpcy5lbnRlci5iaW5kKHRoaXMpKSwgc3dpdGNoTWFwVG8oZHJvcFN0cmVhbS5waXBlKHRha2VVbnRpbChsZWF2ZVN0cmVhbS5waXBlKHRhcCh0aGlzLmxlYXZlLmJpbmQodGhpcykpKSkpKSkuc3Vic2NyaWJlKHRoaXMuZHJvcC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIGVudGVyKHsgZHJhZ2dhYmxlLCB0YXJnZXQgfSkge1xuICAgICAgICB0aGlzLmhpbnQuZW5hYmxlKCk7XG4gICAgICAgIGxldCBiZWZvcmUgPSB0YXJnZXQuY29udGV4dC5sYXN0VGFyZ2V0IHx8IGlzVGFyZ2V0QmVmb3JlKGRyYWdnYWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRhcmdldC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb24ucnRsKSB7XG4gICAgICAgICAgICBiZWZvcmUgPSAhYmVmb3JlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VlLnBvc2l0aW9uKHBvc2l0aW9uKHRhcmdldC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGJlZm9yZSkpO1xuICAgIH1cbiAgICBsZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5oaW50LmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5jdWUuaGlkZSgpO1xuICAgIH1cbiAgICBkcm9wKHsgdGFyZ2V0LCBkcmFnZ2FibGUgfSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGRyYWdnYWJsZS5jb250ZXh0LmZpZWxkO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZHJvcFRhcmdldHMudG9BcnJheSgpLmluZGV4T2YodGFyZ2V0KTtcbiAgICAgICAgdGhpcy5pbnNlcnQoZmllbGQsIGluZGV4KTtcbiAgICB9XG59XG5Hcm91cFBhbmVsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWdyb3VwLXBhbmVsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiZ3JvdXBzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1pbmRpY2F0b3ItY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RUYXJnZXQ6IHRydWVcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBrZW5kb0Ryb3BUYXJnZXQ+XG4gICAgICAgICAgICAgICAge3sgdGV4dCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwczsgbGV0IGluZGV4ID0gaW5kZXg7XCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1pbmRpY2F0b3ItY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtjb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBmaWVsZDogZ3JvdXAuZmllbGRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAga2VuZG9Ecm9wVGFyZ2V0PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgW2VuYWJsZURyYWddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogZ3JvdXAuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdncm91cEluZGljYXRvcicsXG4gICAgICAgICAgICAgICAgICAgIGhpbnQ6ICBncm91cFRpdGxlc1tpbmRleF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyb3VwSW5kaWNhdG9yXG4gICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVcbiAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgIFtncm91cFRpdGxlXT1cImdyb3VwVGl0bGVzW2luZGV4XVwiXG4gICAgICAgICAgICAgICAgKGRpcmVjdGlvbkNoYW5nZSk9XCJkaXJlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1pbmRpY2F0b3ItY29udGFpbmVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aCAhPT0gMFwiXG4gICAgICAgICAgICBbY29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgbGFzdFRhcmdldDogdHJ1ZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBrZW5kb0Ryb3BUYXJnZXQ+Jm5ic3A7PC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Hcm91cFBhbmVsQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRHJhZ0hpbnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEcm9wQ3VlU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBJbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcbkdyb3VwUGFuZWxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZ3JvdXBIZWFkZXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstZ3JvdXBpbmctaGVhZGVyXCIsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWdyb3VwaW5nLWhlYWRlci1mbGV4XCIsXSB9XSxcbiAgICB0ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRyb3BUYXJnZXRzOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtEcm9wVGFyZ2V0RGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBHcm91cEluZGljYXRvckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgZ2V0IGdyb3VwSW5kaWNhdG9yQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cC5kaXIgPyB0aGlzLmdyb3VwLmRpciA6IFwiYXNjXCI7XG4gICAgfVxuICAgIHRvZ2dsZURpcmVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBkaXI6IHRoaXMuZGlyID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiLFxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ3JvdXAuZmllbGRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVtb3ZlRGVzY3JpcHRvcigpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICBkaXI6IHRoaXMuZ3JvdXAuZGlyLFxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ3JvdXAuZmllbGRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5Hcm91cEluZGljYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JvdXBJbmRpY2F0b3JdJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiay1saW5rXCIgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJ0b2dnbGVEaXJlY3Rpb24oKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLWktc29ydC1hc2Mtc21dPVwiZGlyID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstaS1zb3J0LWRlc2Mtc21dPVwiZGlyID09PSAnZGVzYydcIj48L3NwYW4+XG4gICAgICAgICAgICB7e2dyb3VwVGl0bGV9fTwvYT5cbiAgICAgICAgPGEgY2xhc3M9XCJrLWJ1dHRvbiBrLWJ1dHRvbi1pY29uIGstYmFyZVwiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwicmVtb3ZlRGVzY3JpcHRvcigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZ3JvdXAtZGVsZXRlXCI+PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuR3JvdXBJbmRpY2F0b3JDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGlyZWN0aW9uQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcmVtb3ZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZ3JvdXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwSW5kaWNhdG9yQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWdyb3VwLWluZGljYXRvclwiLF0gfV1cbn07XG5cbi8vIFRPRE9cbi8vIHRzbGludDpkaXNhYmxlOnJ4anMtbm8tdW5zYWZlLXRha2V1bnRpbFxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHByZXZlbnRPbkRibENsaWNrID0gcmVsZWFzZSA9PiBtb3VzZURvd24gPT4gb2YobW91c2VEb3duKS5waXBlKGRlbGF5KDE1MCksIHRha2VVbnRpbChyZWxlYXNlKSk7XG5jb25zdCBoYXNDbGFzcyA9IGNsYXNzTmFtZSA9PiBlbCA9PiBuZXcgUmVnRXhwKGAoXnwgKSR7Y2xhc3NOYW1lfSggfCQpYCkudGVzdChlbC5jbGFzc05hbWUpO1xuY29uc3QgaXNEZWxldGVCdXR0b24gPSBvcihoYXNDbGFzcyhcImstaS1ncm91cC1kZWxldGVcIiksIGhhc0NsYXNzKFwiay1idXR0b24taWNvblwiKSk7XG5jb25zdCBpc1NvcnRJY29uID0gb3IoaGFzQ2xhc3MoXCJrLWktc29ydC1hc2Mtc21cIiksIGhhc0NsYXNzKFwiay1pLXNvcnQtZGVzYy1zbVwiKSk7XG5jb25zdCBza2lwQnV0dG9ucyA9IGFuZChub3QoaXNEZWxldGVCdXR0b24pLCBub3QoaXNTb3J0SWNvbiksIG5vdChpc0ZvY3VzYWJsZVdpdGhUYWJLZXkpLCBub3QobWF0Y2hlc05vZGVOYW1lKFwibGFiZWxcIikpKTtcbmNvbnN0IGVsZW1lbnRVbmRlckN1cnNvciA9ICh7IGNsaWVudFgsIGNsaWVudFkgfSkgPT4gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbmNvbnN0IGhpZGVUaGVuU2hvdyA9IChlbGVtZW50LCBjb250KSA9PiB7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnQoKTtcbiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYWdnYWJsZUNvbHVtbkRpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZHJhZ2dhYmxlLCBlbGVtZW50LCB6b25lLCBzZXJ2aWNlLCBoaW50LCBjdWUsIG5hdiwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuaGludCA9IGhpbnQ7XG4gICAgICAgIHRoaXMuY3VlID0gY3VlO1xuICAgICAgICB0aGlzLm5hdiA9IG5hdjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICAgICAgdGhpcy5kcmFnID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIHNldCBlbmFibGVEcmFnKGVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICAgICAgdGhpcy51cGRhdGVUb3VjaEFjdGlvbigpO1xuICAgIH1cbiAgICBnZXQgaG9zdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5kcmFnZ2FibGUua2VuZG9QcmVzcy5waXBlKGZpbHRlcihfID0+IHRoaXMuZW5hYmxlZCksIGZpbHRlcigoeyBvcmlnaW5hbEV2ZW50OiB7IHRhcmdldCB9IH0pID0+IHRhcmdldCA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgfHwgc2tpcEJ1dHRvbnModGFyZ2V0KSksIHRhcCgoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxFdmVudCA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgICAgICAgIGlmICghZS5pc1RvdWNoKSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uYXYubmF2aWdhdGVUbyhvcmlnaW5hbEV2ZW50LnRhcmdldCk7XG4gICAgICAgIH0pLCBzd2l0Y2hNYXAocHJldmVudE9uRGJsQ2xpY2sodGhpcy5kcmFnZ2FibGUua2VuZG9SZWxlYXNlKSksIHRhcChkb3duID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGludC5jcmVhdGUoZG93biwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuY29udGV4dC5oaW50KTtcbiAgICAgICAgICAgIHRoaXMuY3VlLmNyZWF0ZSgpO1xuICAgICAgICB9KSwgc3dpdGNoTWFwKGRvd24gPT4gdGhpcy5kcmFnZ2FibGUua2VuZG9EcmFnLnBpcGUodGFwKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5pc1RvdWNoKSB7XG4gICAgICAgICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCB0YXAodGhpcy5oaW50LmF0dGFjaCgpKSwgdGFwKHRoaXMuY3VlLmF0dGFjaCgpKSwgdGFrZVVudGlsKHRoaXMuZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZSksIG1hcChtb3ZlID0+ICh7IG1vdmUsIGRvd24gfSkpKSksIHRhcCh0aGlzLnBlcmZvcm1EcmFnLmJpbmQodGhpcykpLCBzd2l0Y2hNYXBUbyh0aGlzLmRyYWdnYWJsZS5rZW5kb1JlbGVhc2UpKS5zdWJzY3JpYmUodGhpcy5kcm9wLmJpbmQodGhpcykpKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkcm9wKHVwRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oaW50LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmN1ZS5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLm5vdGlmeURyb3AodGhpcywgdXBFdmVudCk7XG4gICAgfVxuICAgIHBlcmZvcm1EcmFnKHsgbW92ZSB9KSB7XG4gICAgICAgIHRoaXMuaGludC5tb3ZlKG1vdmUpO1xuICAgICAgICBjb25zdCBjdXJzb3JFbGVtZW50ID0gdGhpcy5lbGVtZW50VW5kZXJDdXJzb3IobW92ZSk7XG4gICAgICAgIGlmIChjdXJzb3JFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uubm90aWZ5RHJhZyh0aGlzLCBjdXJzb3JFbGVtZW50LCBtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyYWcuZW1pdCh7XG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRoaXMsXG4gICAgICAgICAgICBtb3VzZUV2ZW50OiBtb3ZlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbGVtZW50VW5kZXJDdXJzb3IobW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmhpbnQuaGlkZSgpO1xuICAgICAgICBsZXQgdGFyZ2V0ID0gZWxlbWVudFVuZGVyQ3Vyc29yKG1vdXNlRXZlbnQpO1xuICAgICAgICBpZiAodGFyZ2V0ICYmIC9rLWdyb3VwaW5nLWRyb3BjbHVlLy50ZXN0KHRhcmdldC5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSBoaWRlVGhlblNob3codGFyZ2V0LCBlbGVtZW50VW5kZXJDdXJzb3IuYmluZCh0aGlzLCBtb3VzZUV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaW50LnNob3coKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG4gICAgdXBkYXRlVG91Y2hBY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RvdWNoLWFjdGlvbicsIHRoaXMuZW5hYmxlZCA/ICdub25lJyA6ICcnKTtcbiAgICB9XG59XG5EcmFnZ2FibGVDb2x1bW5EaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RyYWdnYWJsZUNvbHVtbl0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyYWdnYWJsZUNvbHVtbkRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYWdnYWJsZURpcmVjdGl2ZSwgZGVjb3JhdG9yczogW3sgdHlwZTogSG9zdCB9XSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBEcmFnQW5kRHJvcFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERyYWdIaW50U2VydmljZSB9LFxuICAgIHsgdHlwZTogRHJvcEN1ZVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcbkRyYWdnYWJsZUNvbHVtbkRpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb250ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBlbmFibGVEcmFnOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkcmFnOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtZHJhZ2dhYmxlLWhlYWRlcicsXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWQgPSBbXG4gICAgRHJhZ2dhYmxlQ29sdW1uRGlyZWN0aXZlLFxuICAgIERyb3BUYXJnZXREaXJlY3RpdmVcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRHJhZ0FuZERyb3BNb2R1bGUge1xufVxuRHJhZ0FuZERyb3BNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2V4cG9ydGVkXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQxID0gW1xuICAgIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBHcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEdyb3VwSGVhZGVyQ29tcG9uZW50LFxuICAgIEdyb3VwUGFuZWxDb21wb25lbnQsXG4gICAgR3JvdXBJbmRpY2F0b3JDb21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBHcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgIF07XG4gICAgfVxufVxuR3JvdXBNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2V4cG9ydGVkTW9kdWxlcyQxXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzJDFdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNoYXJlZE1vZHVsZSwgRHJhZ0FuZERyb3BNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgICBhbGxvd1Vuc29ydDogdHJ1ZSxcbiAgICBtb2RlOiAnc2luZ2xlJyxcbiAgICBzaG93SW5kZXhlczogdHJ1ZSxcbiAgICBpbml0aWFsRGlyZWN0aW9uOiAnYXNjJ1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub3JtYWxpemUkMSA9ICguLi5zZXR0aW5ncykgPT4gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVFMsIC4uLnNldHRpbmdzKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0ZpbHRlciA9IChzZXR0aW5ncywgY29sdW1uKSA9PiBzZXR0aW5ncy5maWx0ZXIgIT09IGZhbHNlICYmIGNvbHVtbi5maWVsZCAmJiBjb2x1bW4uZmlsdGVyYWJsZTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNTb3J0ID0gKHNldHRpbmdzLCBjb2x1bW4pID0+IHNldHRpbmdzLnNvcnQgIT09IGZhbHNlICYmIGNvbHVtbi5maWVsZCAmJiBjb2x1bW4uc29ydGFibGU7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzTG9jayA9IChzZXR0aW5ncywgY29sdW1uKSA9PiBzZXR0aW5ncy5sb2NrICYmIGNvbHVtbi5sb2NrYWJsZSAmJiAhKGNvbHVtbi5wYXJlbnQgJiYgIWNvbHVtbi5wYXJlbnQuaXNTcGFuQ29sdW1uKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNDb2x1bW5DaG9vc2VyID0gKHNldHRpbmdzKSA9PiBzZXR0aW5ncy5jb2x1bW5DaG9vc2VyICE9PSBmYWxzZTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNJdGVtcyA9IChzZXR0aW5ncywgY29sdW1uKSA9PiBoYXNDb2x1bW5DaG9vc2VyKHNldHRpbmdzKSB8fCBoYXNMb2NrKHNldHRpbmdzLCBjb2x1bW4pIHx8IGhhc1NvcnQoc2V0dGluZ3MsIGNvbHVtbikgfHwgaGFzRmlsdGVyKHNldHRpbmdzLCBjb2x1bW4pO1xuXG5jb25zdCBtZXJnZU9iamVjdHMgPSAoLi4uYXJncykgPT4gT2JqZWN0LmFzc2lnbi5hcHBseShudWxsLCBbe31dLmNvbmNhdChhcmdzKSk7XG5jb25zdCBkaXJlY3Rpb25zID0gaW5pdGlhbERpcmVjdGlvbiA9PiBpbml0aWFsRGlyZWN0aW9uID09PSBcImFzY1wiID8gW1wiYXNjXCIsIFwiZGVzY1wiXSA6IFtcImRlc2NcIiwgXCJhc2NcIl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNSb290TGV2ZWwgPSAoeyBwYXJlbnQgfSkgPT4gIWlzVHJ1dGh5KHBhcmVudCk7XG5jb25zdCBvZkNvbHVtblR5cGUgPSAoeyBkcmFnZ2FibGUgfSkgPT4gWydjb2x1bW4nLCAnY29sdW1uR3JvdXAnXVxuICAgIC5pbmRleE9mKGRyYWdnYWJsZS5jb250ZXh0LnR5cGUpID49IDA7XG5jb25zdCBub3RTYW1lRWxlbWVudCA9ICh7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pID0+IGRyYWdnYWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgIT09IHRhcmdldC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5jb25zdCBpblNhbWVQYXJlbnQgPSAoeCwgeSkgPT4geC5wYXJlbnQgPT09IHkucGFyZW50IHx8XG4gICAgKGlzSW5TcGFuQ29sdW1uKHkpICYmIGluU2FtZVBhcmVudCh4LCB5LnBhcmVudCkpO1xuY29uc3Qgc2FtZVBhcmVudCA9ICh7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pID0+IGluU2FtZVBhcmVudChkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4sIHRhcmdldC5jb250ZXh0LmNvbHVtbik7XG5jb25zdCBsYXN0Tm9uTG9ja2VkID0gKHsgZHJhZ2dhYmxlIH0pID0+ICFpc1RydXRoeShkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4ubG9ja2VkKSAmJlxuICAgIGlzUm9vdExldmVsKGRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbikgJiZcbiAgICBkcmFnZ2FibGUuY29udGV4dC5sYXN0Q29sdW1uO1xuY29uc3Qgbm90SW5TcGFuQ29sdW1uID0gKHsgZHJhZ2dhYmxlIH0pID0+ICFpc0luU3BhbkNvbHVtbihkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4pO1xuY29uc3QgcmVvcmRlcmFibGUgPSAoeyBkcmFnZ2FibGUgfSkgPT4gZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLnJlb3JkZXJhYmxlO1xuY29uc3QgbG9ja2FibGUgPSAoeyBkcmFnZ2FibGUsIHRhcmdldCB9KSA9PiBkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4ubG9ja2FibGUgIT09IGZhbHNlIHx8XG4gICAgZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLmlzTG9ja2VkID09PSB0YXJnZXQuY29udGV4dC5jb2x1bW4uaXNMb2NrZWQ7XG5jb25zdCBydWxlcyA9IGFuZChvZkNvbHVtblR5cGUsIHJlb3JkZXJhYmxlLCBub3RJblNwYW5Db2x1bW4sIG5vdFNhbWVFbGVtZW50LCBzYW1lUGFyZW50LCBub3QobGFzdE5vbkxvY2tlZCksIGxvY2thYmxlKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgaGludCwgY3VlLCByZW9yZGVyU2VydmljZSwgaWRTZXJ2aWNlLCBzb3J0U2VydmljZSwgbG9jYWxpemF0aW9uLCBjZCkge1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5oaW50ID0gaGludDtcbiAgICAgICAgdGhpcy5jdWUgPSBjdWU7XG4gICAgICAgIHRoaXMucmVvcmRlclNlcnZpY2UgPSByZW9yZGVyU2VydmljZTtcbiAgICAgICAgdGhpcy5pZFNlcnZpY2UgPSBpZFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc29ydFNlcnZpY2UgPSBzb3J0U2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2QgPSBjZDtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIHRoaXMuc29ydCA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5yZXNpemFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW9yZGVyYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbk1lbnUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b3RhbENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc29ydGVkRmllbGRzID0ge307XG4gICAgICAgIHRoaXMuZHJvcFRhcmdldHMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICBnZXQgaGVhZGVyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zY3JvbGxhYmxlO1xuICAgIH1cbiAgICBnZXQgc29ydGFibGVMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldCgnc29ydGFibGUnKTtcbiAgICB9XG4gICAgLy8gTnVtYmVyIG9mIHVubG9ja2VkIGNvbHVtbnMgaW4gdGhlIG5leHQgdGFibGUsIGlmIGFueVxuICAgIGdldCB1bmxvY2tlZENvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxDb2x1bW5zQ291bnQgLSB0aGlzLmxvY2tlZENvbHVtbnNDb3VudCAtIHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgfVxuICAgIHNvcnRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHRoaXMuc29ydFNlcnZpY2Uuc29ydCh0aGlzLnRvZ2dsZVNvcnQoY29sdW1uKSk7XG4gICAgfVxuICAgIG9uU29ydENsaWNrKGNvbHVtbiwgZXZlbnQsIGxpbmspIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmICYmIHRhcmdldCAhPT0gbGluaykge1xuICAgICAgICAgICAgY29uc3QgaGFzRm9jdXNhYmxlUGFyZW50ID0gQm9vbGVhbihjbG9zZXN0SW5TY29wZSh0YXJnZXQsIGlzRm9jdXNhYmxlLCBsaW5rKSk7XG4gICAgICAgICAgICBpZiAoaGFzRm9jdXNhYmxlUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHNvcnQgd2hlbiBjbGlja2luZyBmb2N1c2FibGUgdGVtcGxhdGUgZWxlbWVudHMuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydENvbHVtbihjb2x1bW4pO1xuICAgIH1cbiAgICBvbkhlYWRlcktleWRvd24oY29sdW1uLCBhcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCBhcmdzLmRlZmF1bHRQcmV2ZW50ZWQgfHwgY29sdW1uLnNvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuRW50ZXIgJiYgaXNQcmVzZW50KGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydFNlcnZpY2Uuc29ydCh0aGlzLnRvZ2dsZVNvcnQoY29sdW1uKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvd1NvcnROdW1iZXJpbmcoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IHsgc2hvd0luZGV4ZXMgfSA9IG5vcm1hbGl6ZSQxKHRoaXMuc29ydGFibGUpO1xuICAgICAgICByZXR1cm4gc2hvd0luZGV4ZXNcbiAgICAgICAgICAgICYmIHRoaXMuc29ydFxuICAgICAgICAgICAgJiYgdGhpcy5zb3J0LmZpbHRlcigoeyBkaXIgfSkgPT4gaXNQcmVzZW50KGRpcikpLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICYmIHRoaXMuc29ydE9yZGVyKGNvbHVtbi5maWVsZCkgPiAwO1xuICAgIH1cbiAgICBzb3J0T3JkZXIoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydFxuICAgICAgICAgICAgLmZpbHRlcigoeyBkaXIgfSkgPT4gaXNQcmVzZW50KGRpcikpXG4gICAgICAgICAgICAuZmluZEluZGV4KHggPT4geC5maWVsZCA9PT0gZmllbGQpXG4gICAgICAgICAgICArIDE7XG4gICAgfVxuICAgIHNvcnRJY29uKGZpZWxkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5zb3J0RGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnay1pY29uJzogaXNQcmVzZW50KHN0YXRlJCQxLmRpciksXG4gICAgICAgICAgICAnay1pLXNvcnQtZGVzYy1zbSc6IHN0YXRlJCQxLmRpciA9PT0gXCJkZXNjXCIsXG4gICAgICAgICAgICAnay1pLXNvcnQtYXNjLXNtJzogc3RhdGUkJDEuZGlyID09PSBcImFzY1wiXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNvcnRTdGF0ZShjb2x1bW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU29ydGFibGUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5zb3J0RGVzY3JpcHRvcihjb2x1bW4uZmllbGQpO1xuICAgICAgICBpZiAoc3RhdGUkJDEuZGlyID09PSAnYXNjJykge1xuICAgICAgICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZSQkMS5kaXIgPT09ICdkZXNjJykge1xuICAgICAgICAgICAgcmV0dXJuICdkZXNjZW5kaW5nJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBzb3J0U3RhdHVzKGNvbHVtbikge1xuICAgICAgICBpZiAoIXRoaXMuc29ydGVkRmllbGRzW2NvbHVtbi5maWVsZF0gfHwgIXRoaXMuaXNTb3J0YWJsZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1zZyA9ICdzb3J0ZWREZWZhdWx0JztcbiAgICAgICAgY29uc3Qgc3RhdGUkJDEgPSB0aGlzLnNvcnREZXNjcmlwdG9yKGNvbHVtbi5maWVsZCk7XG4gICAgICAgIGlmIChzdGF0ZSQkMS5kaXIgPT09ICdhc2MnKSB7XG4gICAgICAgICAgICBtc2cgPSAnc29ydGVkQXNjZW5kaW5nJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZSQkMS5kaXIgPT09ICdkZXNjJykge1xuICAgICAgICAgICAgbXNnID0gJ3NvcnRlZERlc2NlbmRpbmcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQobXNnKTtcbiAgICB9XG4gICAgdG9nZ2xlU29ydChjb2x1bW4pIHtcbiAgICAgICAgY29uc3QgeyBhbGxvd1Vuc29ydCwgbW9kZSwgaW5pdGlhbERpcmVjdGlvbiB9ID0gbm9ybWFsaXplJDEodGhpcy5zb3J0YWJsZSwgY29sdW1uLnNvcnRhYmxlKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMudG9nZ2xlRGlyZWN0aW9uKGNvbHVtbi5maWVsZCwgYWxsb3dVbnNvcnQsIGluaXRpYWxEaXJlY3Rpb24pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiBbZGVzY3JpcHRvcl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnNvcnQuZmlsdGVyKGRlc2MgPT4gZGVzYy5maWVsZCAhPT0gY29sdW1uLmZpZWxkKSwgZGVzY3JpcHRvcl07XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKG9ic2VydmUodGhpcy5kcm9wVGFyZ2V0cylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5hdHRhY2hUYXJnZXRzLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aGlzLl9sZWFmQ29sdW1ucyA9IGNvbHVtbnNUb1JlbmRlcih0aGlzLmNvbHVtbnMgfHwgW10pLmZpbHRlcih4ID0+ICFpc0NvbHVtbkdyb3VwQ29tcG9uZW50KHgpKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBjb25zdCBzb3J0Q2hhbmdlID0gY2hhbmdlcy5zb3J0O1xuICAgICAgICBpZiAoc29ydENoYW5nZSAmJiAhc29ydENoYW5nZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHNvcnRDaGFuZ2UuY3VycmVudFZhbHVlLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEZpZWxkc1tjaGFuZ2UuZmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkLm1hcmtGb3JDaGVjaygpKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9wdXBTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc2VsZWN0QWxsQ2hlY2tib3hJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWRTZXJ2aWNlLnNlbGVjdEFsbENoZWNrYm94SWQoKTtcbiAgICB9XG4gICAgaXNGaXJzdE9uUm93KGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgaXNUYWlsaW5nID0gKGMpID0+IGMgJiZcbiAgICAgICAgICAgICh0aGlzLmNvbHVtbnNGb3JMZXZlbChjLmxldmVsKS5pbmRleE9mKGMpID4gMCB8fCBpc1RhaWxpbmcoYy5wYXJlbnQpKTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwICYmICF0aGlzLmdyb3Vwcy5sZW5ndGggJiYgIXRoaXMuZGV0YWlsVGVtcGxhdGUgJiYgaXNUYWlsaW5nKGNvbHVtbi5wYXJlbnQpO1xuICAgIH1cbiAgICBsb2dpY2FsQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uLmxlYWZJbmRleDtcbiAgICAgICAgaWYgKGlzUHJlc2VudChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCArIChpc1ByZXNlbnQodGhpcy5kZXRhaWxUZW1wbGF0ZSkgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBnZXQgc2hvd0ZpbHRlck1lbnUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2x1bW5NZW51ICYmIGhhc0ZpbHRlck1lbnUodGhpcy5maWx0ZXJhYmxlKTtcbiAgICB9XG4gICAgZ2V0IHNob3dGaWx0ZXJSb3coKSB7XG4gICAgICAgIHJldHVybiBoYXNGaWx0ZXJSb3codGhpcy5maWx0ZXJhYmxlKTtcbiAgICB9XG4gICAgc2hvd0NvbHVtbk1lbnUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbk1lbnUgJiYgY29sdW1uLmNvbHVtbk1lbnUgJiZcbiAgICAgICAgICAgICh0aGlzLmNvbHVtbk1lbnVUZW1wbGF0ZSB8fCBjb2x1bW4uY29sdW1uTWVudVRlbXBsYXRlcy5sZW5ndGggfHwgaGFzSXRlbXModGhpcy5jb2x1bW5NZW51LCBjb2x1bW4pKTtcbiAgICB9XG4gICAgaXNGaWx0ZXJhYmxlKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHlTdHJpbmcoY29sdW1uLmZpZWxkKSAmJiBjb2x1bW4uZmlsdGVyYWJsZSA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgY2FuRHJvcChkcmFnZ2FibGUsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW9yZGVyYWJsZSAmJiBydWxlcyh7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pO1xuICAgIH1cbiAgICBzaG91bGRBY3RpdmF0ZShjb2x1bW4pIHtcbiAgICAgICAgY29uc3QgY2FuUmVvcmRlciA9IHRoaXMucmVvcmRlcmFibGUgJiYgY29sdW1uLnJlb3JkZXJhYmxlO1xuICAgICAgICBpZiAoIWNhblJlb3JkZXIgJiYgIWlzQ29sdW1uQ29tcG9uZW50KGNvbHVtbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cGFibGUgPSB0aGlzLmdyb3VwYWJsZSAmJiBpc0NvbHVtbkNvbXBvbmVudChjb2x1bW4pICYmIGNvbHVtbi5ncm91cGFibGUgIT09IGZhbHNlO1xuICAgICAgICByZXR1cm4gZ3JvdXBhYmxlIHx8IGNhblJlb3JkZXI7XG4gICAgfVxuICAgIGlzU29ydGFibGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eVN0cmluZyhjb2x1bW4uZmllbGQpXG4gICAgICAgICAgICAmJiBpc1RydXRoeSh0aGlzLnNvcnRhYmxlKSAmJiBpc1RydXRoeShjb2x1bW4uc29ydGFibGUpO1xuICAgIH1cbiAgICBpc0NoZWNrYm94Q29sdW1uKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gaXNDaGVja2JveENvbHVtbihjb2x1bW4pICYmICFjb2x1bW4udGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIHRyYWNrQnlJbmRleChpbmRleCwgX2l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgICB0b2dnbGVEaXJlY3Rpb24oZmllbGQsIGFsbG93VW5zb3J0LCBpbml0aWFsRGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLnNvcnREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgY29uc3QgW2ZpcnN0LCBzZWNvbmRdID0gZGlyZWN0aW9ucyhpbml0aWFsRGlyZWN0aW9uKTtcbiAgICAgICAgbGV0IGRpciA9IGZpcnN0O1xuICAgICAgICBpZiAoZGVzY3JpcHRvci5kaXIgPT09IGZpcnN0KSB7XG4gICAgICAgICAgICBkaXIgPSBzZWNvbmQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGVzY3JpcHRvci5kaXIgPT09IHNlY29uZCAmJiBhbGxvd1Vuc29ydCkge1xuICAgICAgICAgICAgZGlyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRpciwgZmllbGQgfTtcbiAgICB9XG4gICAgY29sdW1uc0ZvckxldmVsKGxldmVsKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ubGV2ZWwgPT09IGxldmVsKSA6IFtdO1xuICAgICAgICByZXR1cm4gc29ydENvbHVtbnMoY29sdW1uc1RvUmVuZGVyKGNvbHVtbnMpKTtcbiAgICB9XG4gICAgaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGlzQ29sdW1uR3JvdXBDb21wb25lbnQoY29sdW1uKTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbkxldmVscygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheSgodGhpcy50b3RhbENvbHVtbkxldmVscyB8fCAwKSArIDEpO1xuICAgIH1cbiAgICBzb3J0RGVzY3JpcHRvcihmaWVsZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3J0LmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkID09PSBmaWVsZCkgfHwgeyBmaWVsZCB9O1xuICAgIH1cbiAgICBnZXQgbGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFmQ29sdW1ucztcbiAgICB9XG4gICAgYXR0YWNoVGFyZ2V0cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBjb25zdCBlbnRlclN0cmVhbSA9IG1lcmdlKC4uLnRoaXMuZHJvcFRhcmdldHMubWFwKHRhcmdldCA9PiB0YXJnZXQuZW50ZXIpKTtcbiAgICAgICAgY29uc3QgbGVhdmVTdHJlYW0gPSBtZXJnZSguLi50aGlzLmRyb3BUYXJnZXRzLm1hcCh0YXJnZXQgPT4gdGFyZ2V0LmxlYXZlKSk7XG4gICAgICAgIGNvbnN0IGRyb3BTdHJlYW0gPSBtZXJnZSguLi50aGlzLmRyb3BUYXJnZXRzLm1hcCh0YXJnZXQgPT4gdGFyZ2V0LmRyb3ApKTtcbiAgICAgICAgdGhpcy50YXJnZXRTdWJzY3JpcHRpb24uYWRkKGVudGVyU3RyZWFtLnBpcGUodGFwKCh7IHRhcmdldCwgZHJhZ2dhYmxlIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChkcmFnZ2FibGUuY29udGV4dC50eXBlID09PSAnZ3JvdXBJbmRpY2F0b3InKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0TG9ja2VkID0gaXNUcnV0aHkodGFyZ2V0LmNvbnRleHQuY29sdW1uLmlzTG9ja2VkKTtcbiAgICAgICAgICAgIGNvbnN0IGRyYWdnYWJsZUxvY2tlZCA9IGlzVHJ1dGh5KGRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbi5pc0xvY2tlZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2NrZWRDb2x1bW5zQ291bnQgPiAwIHx8IHRhcmdldExvY2tlZCB8fCBkcmFnZ2FibGVMb2NrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpbnQudG9nZ2xlTG9jayh0YXJnZXRMb2NrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZmlsdGVyKCh7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pID0+IHRoaXMuY2FuRHJvcChkcmFnZ2FibGUsIHRhcmdldCkpLCBzd2l0Y2hNYXAodGhpcy50cmFja01vdmUuYmluZCh0aGlzLCBsZWF2ZVN0cmVhbSwgZHJvcFN0cmVhbSkpLCBtYXAoKGUpID0+IG1lcmdlT2JqZWN0cyhlLCB7IGJlZm9yZTogdGhpcy5jYWxjdWxhdGVCZWZvcmUoZSksIGNoYW5nZUNvbnRhaW5lcjogZS5jaGFuZ2VDb250YWluZXIgfSkpLCBtYXAodGhpcy5ub3JtYWxpemVUYXJnZXQuYmluZCh0aGlzKSksIHRhcCh0aGlzLmVudGVyLmJpbmQodGhpcykpLCBzd2l0Y2hNYXAoKGFyZ3MpID0+IGRyb3BTdHJlYW0ucGlwZShtYXAoKCkgPT4gYXJncyksIHRha2VVbnRpbChsZWF2ZVN0cmVhbS5waXBlKHRhcCh0aGlzLmxlYXZlLmJpbmQodGhpcykpKSkpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5kcm9wLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgbm9ybWFsaXplVGFyZ2V0KGUpIHtcbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXQuY29udGV4dC5jb2x1bW4ucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMuZHJvcFRhcmdldHMudG9BcnJheSgpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RTcGFuID0gYXJyLmZpbmQodCA9PiB0LmNvbnRleHQuY29sdW1uLnBhcmVudCA9PT0gcGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyLmluZGV4T2YoZmlyc3RTcGFuKTtcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdCA9IGUuYmVmb3JlID8gMCA6IHBhcmVudC5jaGlsZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHRhcmdldCA9IGFycltpbmRleCArIGFkanVzdF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhlLCB7IHRhcmdldCB9KTtcbiAgICB9XG4gICAgdHJhY2tNb3ZlKGxlYXZlU3RyZWFtLCBkcm9wU3RyZWFtLCBlKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGUudGFyZ2V0LmNvbnRleHQuY29sdW1uO1xuICAgICAgICBjb25zdCBsZXZlbENvbHVtbnMgPSB0aGlzLmNvbHVtbnNGb3JMZXZlbChjb2x1bW4ubGV2ZWwpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGxldmVsQ29sdW1ucy5pbmRleE9mKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSAoY29sdW1uLmxvY2tlZCA/IGluZGV4ID09PSBsZXZlbENvbHVtbnMubGVuZ3RoIC0gMSA6IGluZGV4ID09PSAwKTtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IGUuZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLmlzTG9ja2VkICE9PSBjb2x1bW4uaXNMb2NrZWQ7XG4gICAgICAgIGlmIChjaGFuZ2VkICYmIGlzRmlyc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBlLmRyYWdnYWJsZS5kcmFnXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKGxlYXZlU3RyZWFtKSwgdGFrZVVudGlsKGRyb3BTdHJlYW0pLCBtYXAoKHsgbW91c2VFdmVudCB9KSA9PiBtZXJnZU9iamVjdHMoeyBjaGFuZ2VDb250YWluZXI6IHRydWUgfSwgZSwgeyBtb3VzZUV2ZW50IH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG1lcmdlT2JqZWN0cyh7IGNoYW5nZUNvbnRhaW5lcjogY2hhbmdlZCB9LCBlKSk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUJlZm9yZSh7IGRyYWdnYWJsZSwgdGFyZ2V0LCBtb3VzZUV2ZW50LCBjaGFuZ2VDb250YWluZXIgPSBmYWxzZSB9KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0YXJnZXQuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgYmVmb3JlID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGFuZ2VDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbGVmdCB9ID0gb2Zmc2V0KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaGFsZldpZHRoID0gdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBtaWRkbGUgPSBsZWZ0ICsgaGFsZldpZHRoO1xuICAgICAgICAgICAgYmVmb3JlID0gbWlkZGxlID4gbW91c2VFdmVudC5wYWdlWDtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbi5ydGwpIHtcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSAhYmVmb3JlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYmVmb3JlID0gaXNUYXJnZXRCZWZvcmUoZHJhZ2dhYmxlLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJlZm9yZTtcbiAgICB9XG4gICAgZW50ZXIoeyB0YXJnZXQsIGJlZm9yZSB9KSB7XG4gICAgICAgIHRoaXMuaGludC5lbmFibGUoKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uLnJ0bCkge1xuICAgICAgICAgICAgYmVmb3JlID0gIWJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1ZS5wb3NpdGlvbihwb3NpdGlvbih0YXJnZXQuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBiZWZvcmUpKTtcbiAgICB9XG4gICAgbGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaGludC5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuY3VlLmhpZGUoKTtcbiAgICB9XG4gICAgZHJvcCh7IGRyYWdnYWJsZSwgdGFyZ2V0LCBiZWZvcmUsIGNoYW5nZUNvbnRhaW5lciB9KSB7XG4gICAgICAgIHRoaXMucmVvcmRlclNlcnZpY2UucmVvcmRlcih7XG4gICAgICAgICAgICBiZWZvcmUsXG4gICAgICAgICAgICBjaGFuZ2VDb250YWluZXIsXG4gICAgICAgICAgICBzb3VyY2U6IGRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbixcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LmNvbnRleHQuY29sdW1uXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkhlYWRlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEhlYWRlcl0nLFxuICAgICAgICAgICAgICAgIHN0eWxlczogW2BcbiAgICAgICAgLmstY29sdW1uLXJlc2l6ZXIge1xuICAgICAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMDAlO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgd2lkdGg6IC41ZW07XG4gICAgICAgIH1cbiAgICBgXSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0cnVlXCI+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaSBvZiBjb2x1bW5MZXZlbHM7IGxldCBsZXZlbEluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbFJvd1xuICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibGV2ZWxJbmRleFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZVJvd109XCJsb2NrZWRDb2x1bW5zQ291bnQgPiAwXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbENlbGxzQ291bnRdPVwiY29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVDZWxsc0NvdW50XT1cInVubG9ja2VkQ29sdW1uc0NvdW50XCI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstZ3JvdXAtY2VsbCBrLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGcgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiay1oaWVyYXJjaHktY2VsbCBrLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibGV2ZWxJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2x1bW4gW25nRm9yT2ZdPVwiY29sdW1uc0ZvckxldmVsKGxldmVsSW5kZXgpXCIgW25nRm9yVHJhY2tCeV09XCJ0cmFja0J5SW5kZXhcIiBsZXQtY29sdW1uSW5kZXg9XCJpbmRleFwiIGxldC1sYXN0PVwibGFzdFwiPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc0NvbHVtbkdyb3VwQ29tcG9uZW50KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbCBbbG9naWNhbFJvd0luZGV4XT1cImxldmVsSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImxvZ2ljYWxDb2x1bW5JbmRleChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93U3Bhbl09XCJjb2x1bW4ucm93c3Bhbih0b3RhbENvbHVtbkxldmVscylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRTdGF0ZShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25IZWFkZXJLZXlkb3duKGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJvcFRhcmdldFxuICAgICAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZVxuICAgICAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZUNvbHVtblxuICAgICAgICAgICAgICAgICAgICBbZW5hYmxlRHJhZ109XCJzaG91bGRBY3RpdmF0ZShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiBjb2x1bW4udGl0bGUgfHwgY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENvbHVtbjogbGFzdCAmJiBjb2x1bW5JbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWZpbHRlcmFibGVdPVwiKHNob3dGaWx0ZXJNZW51ICYmIGlzRmlsdGVyYWJsZShjb2x1bW4pKSB8fCBzaG93Q29sdW1uTWVudShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstZmlyc3RdPVwiaXNGaXJzdE9uUm93KGNvbHVtbiwgY29sdW1uSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLmhlYWRlclN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJjb2x1bW4ucm93c3Bhbih0b3RhbENvbHVtbkxldmVscylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbi5jb2xzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJNZW51ICYmIGlzRmlsdGVyYWJsZShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLW1lbnUgKm5nSWY9XCJzaG93Q29sdW1uTWVudShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nc109XCJjb2x1bW5NZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51VGVtcGxhdGVdPVwiY29sdW1uTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4tbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc1NvcnRhYmxlKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uLmxlYWZJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+e3tjb2x1bW4uZGlzcGxheVRpdGxlfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAjbGluayBjbGFzcz1cImstbGlua1wiIChjbGljayk9XCJvblNvcnRDbGljayhjb2x1bW4sICRldmVudCwgbGluaylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlQ29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbi5sZWFmSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmXCI+e3tjb2x1bW4uZGlzcGxheVRpdGxlfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmFyaWEtbGFiZWxdPVwic29ydGFibGVMYWJlbFwiIFtuZ0NsYXNzXT1cInNvcnRJY29uKGNvbHVtbi5maWVsZClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93U29ydE51bWJlcmluZyhjb2x1bW4pXCIgY2xhc3M9XCJrLXNvcnQtb3JkZXJcIj57e3NvcnRPcmRlcihjb2x1bW4uZmllbGQpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiByb2xlPVwic3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1zb3J0LXN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogLTEwMDAwcHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwic29ydFN0YXR1cyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc0NoZWNrYm94Q29sdW1uKGNvbHVtbikgJiYgIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZiAmJiBjb2x1bW4uc2hvd1NlbGVjdEFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJzZWxlY3RBbGxDaGVja2JveElkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZFNlbGVjdEFsbENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkRm9jdXNhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1jaGVja2JveC1sYWJlbFwiIFthdHRyLmZvcl09XCJzZWxlY3RBbGxDaGVja2JveElkKClcIj48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZW5kb0dyaWRDb2x1bW5IYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstY29sdW1uLXJlc2l6ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNpemFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJpc0NvbHVtbkdyb3VwQ29tcG9uZW50KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbCBbbG9naWNhbFJvd0luZGV4XT1cImxldmVsSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImxvZ2ljYWxDb2x1bW5JbmRleChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NwYW5dPVwiY29sdW1uLnJvd3NwYW4odG90YWxDb2x1bW5MZXZlbHMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbFNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxuICAgICAgICAgICAgICAgICAgICBrZW5kb0Ryb3BUYXJnZXRcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZURyYWddPVwic2hvdWxkQWN0aXZhdGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2x1bW5Hcm91cCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQ6IGNvbHVtbi50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb2x1bW46IGxhc3QgJiYgY29sdW1uSW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1maXJzdF09XCJpc0ZpcnN0T25Sb3coY29sdW1uLCBjb2x1bW5JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1maWx0ZXJhYmxlXT1cInNob3dDb2x1bW5NZW51KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uaGVhZGVyU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cImNvbHVtbi5yb3dzcGFuKHRvdGFsQ29sdW1uTGV2ZWxzKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbi1tZW51ICpuZ0lmPVwic2hvd0NvbHVtbk1lbnUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXR0aW5nc109XCJjb2x1bW5NZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbk1lbnVUZW1wbGF0ZV09XCJjb2x1bW5NZW51VGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4tbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogY29sdW1uLmhlYWRlclRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogbG9ja2VkQ29sdW1uc0NvdW50ICsgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPnt7Y29sdW1uLmRpc3BsYXlUaXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtlbmRvR3JpZENvbHVtbkhhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWNvbHVtbi1yZXNpemVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICBrZW5kb0dyaWRGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtsb2NrZWRDb2x1bW5zQ291bnRdPVwibG9ja2VkQ29sdW1uc0NvdW50XCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cInRvdGFsQ29sdW1uTGV2ZWxzICsgMVwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZVJvd109XCJsb2NrZWRDb2x1bW5zQ291bnQgPiAwXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbENlbGxzQ291bnRdPVwiY29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVDZWxsc0NvdW50XT1cInVubG9ja2VkQ29sdW1uc0NvdW50XCJcbiAgICAgICAgPjwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkhlYWRlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFNpbmdsZVBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogRHJhZ0hpbnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEcm9wQ3VlU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ29sdW1uUmVvcmRlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IElkU2VydmljZSB9LFxuICAgIHsgdHlwZTogU29ydFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5IZWFkZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdG90YWxDb2x1bW5MZXZlbHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNjcm9sbGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9ja2VkQ29sdW1uc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXNpemFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlb3JkZXJhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5NZW51OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5NZW51VGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvdGFsQ29sdW1uc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWhlYWRlcicsXSB9XSxcbiAgICBkcm9wVGFyZ2V0czogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbRHJvcFRhcmdldERpcmVjdGl2ZSxdIH1dXG59O1xuXG4vLyBUT0RPXG4vLyB0c2xpbnQ6ZGlzYWJsZTpyeGpzLW5vLXVuc2FmZS10YWtldW50aWxcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmcm9tUGVyY2VudGFnZSA9ICh2YWx1ZSwgcGVyY2VudCkgPT4ge1xuICAgIGNvbnN0IHNpZ24gPSBwZXJjZW50IDwgMCA/IC0xIDogMTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChNYXRoLmFicyhwZXJjZW50KSAvIDEwMCkgKiB2YWx1ZSkgKiBzaWduO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB0b1BlcmNlbnRhZ2UgPSAodmFsdWUsIHdob2xlKSA9PiAodmFsdWUgLyB3aG9sZSkgKiAxMDA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGVhZGVyV2lkdGggPSAoaGFuZGxlKSA9PiBoYW5kbGUubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGFsbExlYWZDb2x1bW5zID0gY29sdW1ucyA9PiBleHBhbmRDb2x1bW5zKGNvbHVtbnMpXG4gICAgLmZpbHRlcihjID0+ICFjLmlzQ29sdW1uR3JvdXApO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHN0b3BQcm9wYWdhdGlvbiA9ICh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjcmVhdGVNb3ZlU3RyZWFtID0gKHNlcnZpY2UsIGRyYWdnYWJsZSkgPT4gbW91c2VEb3duID0+IGRyYWdnYWJsZS5rZW5kb0RyYWcucGlwZSh0YWtlVW50aWwoZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZS5waXBlKHRhcCgoKSA9PiBzZXJ2aWNlLmVuZCgpKSkpLCBtYXAoKHsgcGFnZVggfSkgPT4gKHtcbiAgICBvcmlnaW5hbFg6IG1vdXNlRG93bi5wYWdlWCxcbiAgICBwYWdlWFxufSkpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBwcmV2ZW50T25EYmxDbGljayQxID0gcmVsZWFzZSA9PiBtb3VzZURvd24gPT4gb2YobW91c2VEb3duKS5waXBlKGRlbGF5KDE1MCksIHRha2VVbnRpbChyZWxlYXNlKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNJblNwYW5Db2x1bW4kMSA9IGNvbHVtbiA9PiAhIShjb2x1bW4ucGFyZW50ICYmIGNvbHVtbi5wYXJlbnQuaXNTcGFuQ29sdW1uKTtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbHVtbiBpbmRleC4gSWYgdGhlIGNvbHVtbiBpcyBzdGF0ZWQgaW4gYFNwYW5Db2x1bW5gLFxuICogdGhlIGluZGV4IGZvciBhbGwgY2hpbGQgY29sdW1ucyBlcXVhbHMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGlsZC5cbiAqL1xuY29uc3QgaW5kZXhPZiA9ICh0YXJnZXQsIGxpc3QpID0+IHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBpZ25vcmUgPSAwO1xuICAgIGxldCBza2lwID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gbGlzdFtpbmRleF07XG4gICAgICAgIGNvbnN0IGlzUGFyZW50U3BhbkNvbHVtbiA9IGlzSW5TcGFuQ29sdW1uJDEoY3VycmVudCk7XG4gICAgICAgIGlmIChjdXJyZW50ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaWdub3JlLS0gPD0gMCkgJiYgaXNQYXJlbnRTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICBpZ25vcmUgPSBjdXJyZW50LnBhcmVudC5jaGlsZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHNraXAgKz0gaWdub3JlO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleCAtIHNraXA7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbkhhbmRsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZHJhZ2dhYmxlLCBlbGVtZW50LCBzZXJ2aWNlLCB6b25lLCBjZHIsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmRyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLnJ0bCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnJlc2l6YWJsZSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICAgIGdldCBsZWZ0U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiBpc1RydXRoeSh0aGlzLnJ0bCkgPyAwIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IHJpZ2h0U3R5bGUoKSB7XG4gICAgICAgIHJldHVybiBpc1RydXRoeSh0aGlzLnJ0bCkgPyBudWxsIDogMDtcbiAgICB9XG4gICAgYXV0b0ZpdCgpIHtcbiAgICAgICAgY29uc3QgYWxsTGVhZnMgPSBhbGxMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICBjb25zdCBjdXJyZW50TGVhZnMgPSBsZWFmQ29sdW1ucyhbdGhpcy5jb2x1bW5dKS5maWx0ZXIoY29sdW1uID0+IGlzVHJ1dGh5KGNvbHVtbi5yZXNpemFibGUpKTtcbiAgICAgICAgY29uc3QgY29sdW1uSW5mbyA9IGN1cnJlbnRMZWFmcy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFyZW50U3BhbiA9IGlzSW5TcGFuQ29sdW1uJDEoY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGFzdEluU3BhbiA9IGlzUGFyZW50U3BhbiA/IGNvbHVtbi5wYXJlbnQuY2hpbGRDb2x1bW5zLmxhc3QgPT09IGNvbHVtbiA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleE9mKGNvbHVtbiwgYWxsTGVhZnMpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgaGVhZGVySW5kZXg6IHRoaXMuY29sdW1uc0ZvckxldmVsKGNvbHVtbi5sZXZlbCkuaW5kZXhPZihjb2x1bW4pLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGlzTGFzdEluU3BhbixcbiAgICAgICAgICAgICAgICBpc1BhcmVudFNwYW4sXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGNvbHVtbi5sZXZlbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRMZWFmcy5mb3JFYWNoKGNvbHVtbiA9PiBjb2x1bW4ud2lkdGggPSAwKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLm1lYXN1cmVDb2x1bW5zKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZS5jaGFuZ2VzLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuY29sdW1uLnJlc2l6YWJsZSksIGZpbHRlcihlID0+IGlzUHJlc2VudChlLmNvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uID09PSB0aGlzLmNvbHVtbikpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VydmljZS5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3N0YXJ0JykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuaW5pdFN0YXRlLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzZXJ2aWNlLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAncmVzaXplQ29sdW1uJykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMucmVzaXplLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnNlcnZpY2UuY2hhbmdlcy5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3N0YXJ0JyksIGZpbHRlcih0aGlzLnNob3VsZFVwZGF0ZS5iaW5kKHRoaXMpKSwgdGFrZSgxKSAvL29uIGZpcnN0IHJlc2l6ZSBvbmx5XG4gICAgICAgICkuc3Vic2NyaWJlKHRoaXMuaW5pdENvbHVtbldpZHRoLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5kcmFnZ2FibGUua2VuZG9QcmVzcy5waXBlKHRhcChzdG9wUHJvcGFnYXRpb24pLCB0YXAoKCkgPT4gdGhpcy5zZXJ2aWNlLnN0YXJ0KHRoaXMuY29sdW1uKSksIHN3aXRjaE1hcChwcmV2ZW50T25EYmxDbGljayQxKHRoaXMuZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZSkpLCBzd2l0Y2hNYXAoY3JlYXRlTW92ZVN0cmVhbSh0aGlzLnNlcnZpY2UsIHRoaXMuZHJhZ2dhYmxlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHBhZ2VYLCBvcmlnaW5hbFggfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBwYWdlWCAtIG9yaWdpbmFsWDtcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnQgPSB0b1BlcmNlbnRhZ2UoZGVsdGEsIHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGggfHwgdGhpcy5jb2x1bW4ud2lkdGgpO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnJlc2l6ZUNvbHVtbnMocGVyY2VudCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VydmljZS5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ2F1dG9GaXRDb21wbGV0ZScpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnNpemVUb0ZpdC5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VydmljZS5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3RyaWdnZXJBdXRvRml0JykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuYXV0b0ZpdC5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHRoaXMucnRsID0gcnRsKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiAhYWxsTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKVxuICAgICAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLndpZHRoKVxuICAgICAgICAgICAgLnNvbWUoaXNCbGFuayk7XG4gICAgfVxuICAgIGluaXRDb2x1bW5XaWR0aCgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW4ud2lkdGggPSBoZWFkZXJXaWR0aCh0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgICBpbml0U3RhdGUoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGggPSBoZWFkZXJXaWR0aCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNlcnZpY2UucmVzaXplZENvbHVtbih7XG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgb2xkV2lkdGg6IHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGhcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc2l6ZSh7IGRlbHRhUGVyY2VudCB9KSB7XG4gICAgICAgIGxldCBkZWx0YSA9IGZyb21QZXJjZW50YWdlKHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGgsIGRlbHRhUGVyY2VudCk7XG4gICAgICAgIGlmIChpc1RydXRoeSh0aGlzLnJ0bCkpIHtcbiAgICAgICAgICAgIGRlbHRhICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgodGhpcy5jb2x1bW4ucmVzaXplU3RhcnRXaWR0aCArIGRlbHRhLCB0aGlzLmNvbHVtbi5taW5SZXNpemFibGVXaWR0aCk7XG4gICAgICAgIGNvbnN0IHRhYmxlRGVsdGEgPSBuZXdXaWR0aCA+IHRoaXMuY29sdW1uLm1pblJlc2l6YWJsZVdpZHRoID9cbiAgICAgICAgICAgIGRlbHRhIDogdGhpcy5jb2x1bW4ubWluUmVzaXphYmxlV2lkdGggLSB0aGlzLmNvbHVtbi5yZXNpemVTdGFydFdpZHRoO1xuICAgICAgICB0aGlzLnVwZGF0ZVdpZHRoKHRoaXMuY29sdW1uLCBuZXdXaWR0aCk7XG4gICAgICAgIHRoaXMuc2VydmljZS5yZXNpemVUYWJsZSh0aGlzLmNvbHVtbiwgdGFibGVEZWx0YSk7XG4gICAgfVxuICAgIHNpemVUb0ZpdCh7IGNvbHVtbnMsIHdpZHRocyB9KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1ucy5pbmRleE9mKHRoaXMuY29sdW1uKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCguLi53aWR0aHMubWFwKHcgPT4gd1tpbmRleF0pKSArIDE7IC8vYWRkIDFweCBmb3IgSUVcbiAgICAgICAgY29uc3QgdGFibGVEZWx0YSA9IHdpZHRoIC0gdGhpcy5jb2x1bW4ucmVzaXplU3RhcnRXaWR0aDtcbiAgICAgICAgdGhpcy51cGRhdGVXaWR0aCh0aGlzLmNvbHVtbiwgd2lkdGgpO1xuICAgICAgICB0aGlzLnNlcnZpY2UucmVzaXplVGFibGUodGhpcy5jb2x1bW4sIHRhYmxlRGVsdGEpO1xuICAgIH1cbiAgICB1cGRhdGVXaWR0aChjb2x1bW4sIHdpZHRoKSB7XG4gICAgICAgIGNvbHVtbi53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTsgLy9mb3JjZSBDRCBjeWNsZVxuICAgIH1cbiAgICBjb2x1bW5zRm9yTGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnNUb1JlbmRlcih0aGlzLmNvbHVtbnMgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ubGV2ZWwgPT09IGxldmVsKSA6IFtdKTtcbiAgICB9XG59XG5Db2x1bW5IYW5kbGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRDb2x1bW5IYW5kbGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5IYW5kbGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEcmFnZ2FibGVEaXJlY3RpdmUsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEhvc3QgfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlc2l6aW5nU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQ29sdW1uSGFuZGxlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XSxcbiAgICBsZWZ0U3R5bGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmxlZnQnLF0gfV0sXG4gICAgcmlnaHRTdHlsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUucmlnaHQnLF0gfV0sXG4gICAgYXV0b0ZpdDogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2RibGNsaWNrJyxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHNlbGVjdC1hbGwgY2hlY2tib3ggZmVhdHVyZSBvZiB0aGUgR3JpZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNlbGVjdGlvbl9ncmlkICV9I3RvYy1zZWxlY3QtYWxsLWZlYXR1cmUpKS5cbiAqL1xuY2xhc3MgU2VsZWN0QWxsQ2hlY2tib3hEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHNlbGVjdGlvblNlcnZpY2UsIGVsLCByZW5kZXJlciwgbmdab25lKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBga2VuZG9HcmlkU2VsZWN0QWxsQ2hlY2tib3hgIHNlbGVjdC1hbGwgY2hlY2tib3hcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2Mtc2VsZWN0LWFsbC1mZWF0dXJlKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJjaGVja2JveFwiO1xuICAgICAgICB0aGlzLnN0YXRlU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNsaWNrID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbC5uYXRpdmVFbGVtZW50LCBcImNsaWNrXCIsIHRoaXMub25DbGljay5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5zdGF0ZVNldCA9IHRydWU7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kZXN0cm95Q2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIC8vIHlpZWxkcyBjb25zaXN0ZW50IGNyb3NzLWJyb3dzZXIgYmVoYXZpb3Igd2hlbiBjbGlja2luZyBhbiBcImluZGV0ZXJtaW5hdGVcIiBjaGVja2JveFxuICAgICAgICBjb25zdCB1bmRlZmluZWRDaGVja2VkU3RhdGVJbklFID0gZGV0ZWN0SUUoKSAmJiB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0QWxsU3RhdGUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXNDaGVja2VkID0gdW5kZWZpbmVkQ2hlY2tlZFN0YXRlSW5JRSA/IHRydWUgOiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5vcHRpb25zO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoYW5nZS5lbWl0KGlzQ2hlY2tlZCA/IFwiY2hlY2tlZFwiIDogXCJ1bmNoZWNrZWRcIik7XG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgJiYgb3B0aW9ucy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnVwZGF0ZUFsbChpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldFN0YXRlKCkge1xuICAgICAgICBjb25zdCBzdGF0ZSQkMSA9IHRoaXMuc3RhdGVTZXQgPyB0aGlzLnN0YXRlVG9Cb29sKCkgOiB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0QWxsU3RhdGU7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbSwgXCJpbmRldGVybWluYXRlXCIsICFpc1ByZXNlbnQoc3RhdGUkJDEpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShlbGVtLCBcImNoZWNrZWRcIiwgaXNQcmVzZW50KHN0YXRlJCQxKSA/IHN0YXRlJCQxIDogZmFsc2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc3RhdGVUb0Jvb2woKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJ1bmNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5TZWxlY3RBbGxDaGVja2JveERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFNlbGVjdEFsbENoZWNrYm94XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU2VsZWN0QWxsQ2hlY2tib3hEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuU2VsZWN0QWxsQ2hlY2tib3hEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc3RhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdEFsbENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHR5cGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudHlwZScsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck1lbnVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIHBvcHVwU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VydmljZSA9IGZpbHRlclNlcnZpY2U7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyTGFiZWwgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ2ZpbHRlcicpO1xuICAgIH1cbiAgICBnZXQgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcnNCeUZpZWxkKHRoaXMuZmlsdGVyLCAodGhpcy5jb2x1bW4gfHwge30pLmZpZWxkKS5sZW5ndGggPiAwO1xuICAgIH1cbiAgICB0b2dnbGUoYW5jaG9yLCB0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihhbmNob3IsIHRlbXBsYXRlLCB0aGlzLnBvcHVwUmVmKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UuZGVzdHJveSgpO1xuICAgIH1cbn1cbkZpbHRlck1lbnVDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxhICNhbmNob3JcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnay1ncmlkLWZpbHRlcic6dHJ1ZSwgJ2stc3RhdGUtYWN0aXZlJzogaGFzRmlsdGVyc31cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZShhbmNob3IsIHRlbXBsYXRlKVwiXG4gICAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJmaWx0ZXJMYWJlbFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWZpbHRlclwiPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgICAgICAgICAgPGtlbmRvLWdyaWQtZmlsdGVyLW1lbnUtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAoY2xvc2UpPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1ncmlkLWZpbHRlci1tZW51LWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlck1lbnVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTaW5nbGVQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkZpbHRlck1lbnVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBpc05vVmFsdWVPcGVyYXRvciA9IG9wZXJhdG9yID0+IChvcGVyYXRvciA9PT0gXCJpc251bGxcIlxuICAgIHx8IG9wZXJhdG9yID09PSBcImlzbm90bnVsbFwiXG4gICAgfHwgb3BlcmF0b3IgPT09IFwiaXNlbXB0eVwiXG4gICAgfHwgb3BlcmF0b3IgPT09IFwiaXNub3RlbXB0eVwiKTtcbmNvbnN0IHZhbGlkRmlsdGVycyA9ICh7IHZhbHVlLCBvcGVyYXRvciB9KSA9PiAhaXNOdWxsT3JFbXB0eVN0cmluZyh2YWx1ZSkgfHwgaXNOb1ZhbHVlT3BlcmF0b3Iob3BlcmF0b3IpO1xuY29uc3QgdHJpbUZpbHRlcnMgPSBmaWx0ZXIkJDEgPT4ge1xuICAgIGZpbHRlciQkMS5maWx0ZXJzID0gZmlsdGVyJCQxLmZpbHRlcnMuZmlsdGVyKHZhbGlkRmlsdGVycyk7XG4gICAgcmV0dXJuIGZpbHRlciQkMTtcbn07XG5jb25zdCBmaW5kUGFyZW50ID0gKGZpbHRlcnMsIGZpZWxkLCBwYXJlbnQpID0+IHtcbiAgICByZXR1cm4gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyJCQxKSA9PiB7XG4gICAgICAgIGlmIChhY2MpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlciQkMS5maWx0ZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFBhcmVudChmaWx0ZXIkJDEuZmlsdGVycywgZmllbGQsIGZpbHRlciQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmlsdGVyJCQxLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHVuZGVmaW5lZCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbn07XG5jb25zdCBwYXJlbnRMb2dpY09mRGVmYXVsdCA9IChmaWx0ZXIkJDEsIGZpZWxkLCBkZWYgPSBcImFuZFwiKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gZmluZFBhcmVudCgoKGZpbHRlciQkMSB8fCB7fSkuZmlsdGVycyB8fCBbXSksIGZpZWxkKTtcbiAgICByZXR1cm4gaXNQcmVzZW50KHBhcmVudCkgPyBwYXJlbnQubG9naWMgOiBkZWY7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck1lbnVDb250YWluZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudFNlcnZpY2UsIGNoaWxkU2VydmljZSwgbG9jYWxpemF0aW9uLCBjZCkge1xuICAgICAgICB0aGlzLnBhcmVudFNlcnZpY2UgPSBwYXJlbnRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoaWxkU2VydmljZSA9IGNoaWxkU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2QgPSBjZDtcbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aW9uc0NsYXNzID0gJ2stYWN0aW9uLWJ1dHRvbnMgay1idXR0b24tZ3JvdXAnO1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHQgPSB7fTtcbiAgICB9XG4gICAgZ2V0IGZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcm9vdCBmaWx0ZXIuXG4gICAgICogQHR5cGUge0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3J9XG4gICAgICovXG4gICAgc2V0IGZpbHRlcih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9maWx0ZXIgPSBjbG9uZUZpbHRlcnModmFsdWUpO1xuICAgIH1cbiAgICBnZXQgY2hpbGRGaWx0ZXIoKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMuX2NoaWxkRmlsdGVyKSkge1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRGaWx0ZXIgPSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyczogZmlsdGVyc0J5RmllbGQodGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQpLFxuICAgICAgICAgICAgICAgIGxvZ2ljOiBwYXJlbnRMb2dpY09mRGVmYXVsdCh0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkRmlsdGVyO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoaWxkU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShmaWx0ZXIkJDEgPT4gdGhpcy5fY2hpbGRGaWx0ZXIgPSBmaWx0ZXIkJDEpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkRmlsdGVyLmZpbHRlcnMuc29tZSh2YWxpZEZpbHRlcnMpO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDb250ZXh0KCkge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHQuY29sdW1uID0gdGhpcy5jb2x1bW47XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dC5maWx0ZXIgPSB0aGlzLmNoaWxkRmlsdGVyO1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHQuZmlsdGVyU2VydmljZSA9IHRoaXMuY2hpbGRTZXJ2aWNlO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0W1wiJGltcGxpY2l0XCJdID0gdGhpcy5jaGlsZEZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29udGV4dDtcbiAgICB9XG4gICAgZ2V0IGhhc1RlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuY29sdW1uKSAmJiBpc1ByZXNlbnQodGhpcy5jb2x1bW4uZmlsdGVyTWVudVRlbXBsYXRlUmVmKTtcbiAgICB9XG4gICAgc3VibWl0KCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIkJDEgPSB0cmltRmlsdGVycyh0aGlzLmNoaWxkRmlsdGVyKTtcbiAgICAgICAgaWYgKGZpbHRlciQkMS5maWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmlsdGVyIHx8IHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICBsb2dpYzogXCJhbmRcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlbW92ZUZpbHRlcihyb290LCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICByb290LmZpbHRlcnMucHVzaChmaWx0ZXIkJDEpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRTZXJ2aWNlLmZpbHRlcihyb290KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmlsdGVyIHx8IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgbG9naWM6IFwiYW5kXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmVtb3ZlRmlsdGVyKHJvb3QsIHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgdGhpcy5wYXJlbnRTZXJ2aWNlLmZpbHRlcihyb290KTtcbiAgICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gICAgfVxuICAgIGdldCBjbGVhclRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJDbGVhckJ1dHRvblwiKTtcbiAgICB9XG4gICAgZ2V0IGZpbHRlclRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJGaWx0ZXJCdXR0b25cIik7XG4gICAgfVxufVxuRmlsdGVyTWVudUNvbnRhaW5lckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW0ZpbHRlclNlcnZpY2VdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1maWx0ZXItbWVudS1jb250YWluZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxmb3JtIChzdWJtaXQpPVwic3VibWl0KClcIiAocmVzZXQpPVwicmVzZXQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImstZmlsdGVyLW1lbnUgay1ncm91cCBrLXJlc2V0IGstc3RhdGUtYm9yZGVyLXVwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1maWx0ZXItbWVudS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJoYXNUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVyTWVudUhvc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJjaGlsZFNlcnZpY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImNoaWxkRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmZpbHRlck1lbnVUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZpbHRlck1lbnVUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInRlbXBsYXRlQ29udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJhY3Rpb25zQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImstYnV0dG9uXCI+e3tjbGVhclRleHR9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImstYnV0dG9uIGstcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPnt7ZmlsdGVyVGV4dH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyTWVudUNvbnRhaW5lckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZpbHRlclNlcnZpY2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH1dIH0sXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuRmlsdGVyTWVudUNvbnRhaW5lckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3Rpb25zQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyTWVudUlucHV0V3JhcHBlckNvbXBvbmVudCBleHRlbmRzIEZpbHRlcklucHV0V3JhcHBlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9wZXJhdG9yQ2hhbmdlKGRhdGFJdGVtKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE9wZXJhdG9yID0gZGF0YUl0ZW07XG4gICAgfVxuICAgIGZpbHRlckNoYW5nZShmaWx0ZXIkJDEpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIkJDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7RmlsdGVyRGVzY3JpcHRvcn1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGaWx0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIHNldCBjdXJyZW50RmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcbiAgICB9XG4gICAgdXBkYXRlRmlsdGVyKGZpbHRlciQkMSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY3VycmVudEZpbHRlciwgZmlsdGVyJCQxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyO1xuICAgIH1cbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZSh0aGlzLnVwZGF0ZUZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5jb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5jdXJyZW50T3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cbkZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUtaW5wdXQtd3JhcHBlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWRyb3Bkb3dubGlzdFxuICAgICAgICAgICAgW2RhdGFdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvcGVyYXRvckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50T3BlcmF0b3JcIlxuICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIj5cbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXTtcbkZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmlsdGVyU2VydmljZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3VycmVudEZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTdHJpbmdGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgIH1cbn1cblN0cmluZ0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLW1lbnUtaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImstdGV4dGJveFwiIGtlbmRvRmlsdGVySW5wdXQgW2ZpbHRlckRlbGF5XT1cIjBcIiBbbmdNb2RlbF09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiIC8+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItbWVudS1pbnB1dC13cmFwcGVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblN0cmluZ0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3VycmVudEZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyU2VydmljZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHN0cmluZy1maWx0ZXIgbWVudSBjb21wb25lbnQuXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1jb25maWd1cmF0aW9uLWNvbXBvbmVudHMtZm9yLWZpbHRlci10ZW1wbGF0ZXMpKS5cbiAqL1xuY2xhc3MgU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudCBleHRlbmRzIFN0cmluZ0ZpbHRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKG51bGwsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMubG9naWNPcGVyYXRvcnMgPSBsb2dpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY3VycmVudCBtZW51IGZpbHRlci5cbiAgICAgICAgICogQHR5cGUge0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3J9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IHsgZmlsdGVyczogW10sIGxvZ2ljOiBcImFuZFwiIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dHMgb2Ygc2Vjb25kIGNyaXRlcmlhIHdpbGwgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHRyYSA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGZpcnN0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gc2V0RmlsdGVyKDAsIHRoaXMuZmlsdGVyLCAodGhpcy5jb2x1bW4gfHwge30pLmZpZWxkLCB0aGlzLm9wZXJhdG9yKTtcbiAgICB9XG4gICAgZ2V0IHNlY29uZEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHNldEZpbHRlcigxLCB0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCwgdGhpcy5vcGVyYXRvcik7XG4gICAgfVxuICAgIGxvZ2ljQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLmxvZ2ljID0gdmFsdWU7XG4gICAgfVxuICAgIGxvY2FsaXphdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5sb2dpY09wZXJhdG9ycyA9IGxvZ2ljT3BlcmF0b3JzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgc3VwZXIubG9jYWxpemF0aW9uQ2hhbmdlKCk7XG4gICAgfVxufVxuU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLW1lbnUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItbWVudS1pbnB1dFxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiZmlyc3RGaWx0ZXJcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1tZW51LWlucHV0PlxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0XG4gICAgICAgICAgICAqbmdJZj1cImV4dHJhXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1maWx0ZXItYW5kXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImxvZ2ljT3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCIgKHZhbHVlQ2hhbmdlKT1cImxvZ2ljQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcj8ubG9naWNcIlxuICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIj5cbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItbWVudS1pbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJleHRyYVwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbY3VycmVudEZpbHRlcl09XCJzZWNvbmRGaWx0ZXJcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1tZW51LWlucHV0PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbCcsXSB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXh0cmE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBudW1lcmljLWZpbHRlciBtZW51IGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogIGBgYGh0bWwtbm8tcnVuXG4gKiAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiVW5pdCBQcmljZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlck1lbnVUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtZmlsdGVyU2VydmljZT1cImZpbHRlclNlcnZpY2VcIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnVcbiAqICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gKiAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICogICAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICogICAgICAgICAgICAgID5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1tZW51PlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgYGBgXG4gKi9cbmNsYXNzIE51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50IGV4dGVuZHMgTnVtZXJpY0ZpbHRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKG51bGwsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMubG9naWNPcGVyYXRvcnMgPSBsb2dpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY3VycmVudCBtZW51IGZpbHRlci5cbiAgICAgICAgICogQHR5cGUge0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3J9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IHsgZmlsdGVyczogW10sIGxvZ2ljOiBcImFuZFwiIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dHMgb2Ygc2Vjb25kIGNyaXRlcmlhIHdpbGwgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHRyYSA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGZpcnN0RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gc2V0RmlsdGVyKDAsIHRoaXMuZmlsdGVyLCAodGhpcy5jb2x1bW4gfHwge30pLmZpZWxkLCB0aGlzLm9wZXJhdG9yKTtcbiAgICB9XG4gICAgZ2V0IHNlY29uZEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHNldEZpbHRlcigxLCB0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCwgdGhpcy5vcGVyYXRvcik7XG4gICAgfVxuICAgIGxvZ2ljQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyLmxvZ2ljID0gdmFsdWU7XG4gICAgfVxuICAgIGxvY2FsaXphdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5sb2dpY09wZXJhdG9ycyA9IGxvZ2ljT3BlcmF0b3JzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgc3VwZXIubG9jYWxpemF0aW9uQ2hhbmdlKCk7XG4gICAgfVxufVxuTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudS1pbnB1dFxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiZmlyc3RGaWx0ZXJcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICBbZGVjaW1hbHNdPVwiZGVjaW1hbHNcIlxuICAgICAgICAgICAgW3NwaW5uZXJzXT1cInNwaW5uZXJzXCJcbiAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudS1pbnB1dD5cbiAgICAgICAgPGtlbmRvLWRyb3Bkb3dubGlzdFxuICAgICAgICAgICAgKm5nSWY9XCJleHRyYVwiXG4gICAgICAgICAgICBjbGFzcz1cImstZmlsdGVyLWFuZFwiXG4gICAgICAgICAgICBbZGF0YV09XCJsb2dpY09wZXJhdG9yc1wiXG4gICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwibG9naWNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyPy5sb2dpY1wiXG4gICAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiPlxuICAgICAgICA8L2tlbmRvLWRyb3Bkb3dubGlzdD5cbiAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudS1pbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJleHRyYVwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbY3VycmVudEZpbHRlcl09XCJzZWNvbmRGaWx0ZXJcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICBbZGVjaW1hbHNdPVwiZGVjaW1hbHNcIlxuICAgICAgICAgICAgW3NwaW5uZXJzXT1cInNwaW5uZXJzXCJcbiAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudS1pbnB1dD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbCcsXSB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXh0cmE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSB3aGljaCBpcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgdGhlIGNvbXBvbmVudCB2YWx1ZS5cbiAgICAgICAgICogQHR5cGUge251bWVyaWN9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlICoqVXAqKiBhbmQgKipEb3duKiogc3BpbiBidXR0b25zIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zcGlubmVycyA9IHRydWU7XG4gICAgfVxuICAgIG1lc3NhZ2VGb3Ioa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoa2V5KTtcbiAgICB9XG59XG5OdW1lcmljRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUtaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94XG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtmaWx0ZXJEZWxheV09XCIwXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvcnJlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImN1cnJlbnRGaWx0ZXI/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2RlY2ltYWxzXT1cImRlY2ltYWxzXCJcbiAgICAgICAgICAgICAgICBbc3Bpbm5lcnNdPVwic3Bpbm5lcnNcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94LW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgIFtpbmNyZW1lbnRdPVwibWVzc2FnZUZvcignZmlsdGVyTnVtZXJpY0luY3JlbWVudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlY3JlbWVudF09XCJtZXNzYWdlRm9yKCdmaWx0ZXJOdW1lcmljRGVjcmVtZW50JylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94LW1lc3NhZ2VzPlxuICAgICAgICAgICAgPC9rZW5kby1udW1lcmljdGV4dGJveD5cbiAgICAgICAgPC9rZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5OdW1lcmljRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3VycmVudEZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyU2VydmljZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNwaW5uZXJzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZWNpbWFsczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGF0ZS1maWx0ZXIgbWVudSBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJPcmRlckRhdGVcIiB0aXRsZT1cIk9yZGVyIERhdGVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJNZW51VGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWZpbHRlclNlcnZpY2U9XCJmaWx0ZXJTZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnVcbiAqICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAqICAgICAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICogICAgICAgICAgICAgICAgPlxuICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItbWVudT5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBEYXRlRmlsdGVyTWVudUNvbXBvbmVudCBleHRlbmRzIERhdGVGaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihudWxsLCBsb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmxvZ2ljT3BlcmF0b3JzID0gbG9naWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbWVudSBmaWx0ZXIuXG4gICAgICAgICAqIEB0eXBlIHtDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXIgPSB7IGZpbHRlcnM6IFtdLCBsb2dpYzogXCJhbmRcIiB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgaW5wdXRzIG9mIHNlY29uZCBjcml0ZXJpYSB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXh0cmEgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBmaXJzdEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHNldEZpbHRlcigwLCB0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCwgdGhpcy5vcGVyYXRvcik7XG4gICAgfVxuICAgIGdldCBzZWNvbmRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRGaWx0ZXIoMSwgdGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQsIHRoaXMub3BlcmF0b3IpO1xuICAgIH1cbiAgICBsb2dpY0NoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmZpbHRlci5sb2dpYyA9IHZhbHVlO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubG9naWNPcGVyYXRvcnMgPSBsb2dpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIHN1cGVyLmxvY2FsaXphdGlvbkNoYW5nZSgpO1xuICAgIH1cbn1cbkRhdGVGaWx0ZXJNZW51Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImZpcnN0RmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICBbYm90dG9tVmlld109XCJib3R0b21WaWV3XCJcbiAgICAgICAgICAgIFt0b3BWaWV3XT1cInRvcFZpZXdcIlxuICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUtaW5wdXQ+XG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3RcbiAgICAgICAgICAgICpuZ0lmPVwiZXh0cmFcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWZpbHRlci1hbmRcIlxuICAgICAgICAgICAgW2RhdGFdPVwibG9naWNPcGVyYXRvcnNcIlxuICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImxvZ2ljQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcj8ubG9naWNcIlxuICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIj5cbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiZXh0cmFcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwic2Vjb25kRmlsdGVyXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICBbYm90dG9tVmlld109XCJib3R0b21WaWV3XCJcbiAgICAgICAgICAgIFt0b3BWaWV3XT1cInRvcFZpZXdcIlxuICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUtaW5wdXQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlRmlsdGVyTWVudUNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkRhdGVGaWx0ZXJNZW51Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwnLF0gfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGV4dHJhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQm9vbGVhbi1maWx0ZXIgbWVudSBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJEaXNjb250aW51ZWRcIiB0aXRsZT1cIkRpc2NvbnRpbnVlZFwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlck1lbnVUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtZmlsdGVyU2VydmljZT1cImZpbHRlclNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItbWVudVxuICogICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICogICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICogICAgICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gKiAgICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1tZW51PlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgYGBgXG4gKi9cbmNsYXNzIEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50IGV4dGVuZHMgQm9vbGVhbkZpbHRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKG51bGwsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgY3VycmVudCBtZW51IGZpbHRlci5cbiAgICAgICAgICogQHR5cGUge0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3J9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9IHsgZmlsdGVyczogW10sIGxvZ2ljOiBcImFuZFwiIH07XG4gICAgICAgIHRoaXMuaWRQcmVmaXggPSBndWlkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJhZGlvSWQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuaWRQcmVmaXh9XyR7dmFsdWV9YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodGhpcy51cGRhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IFwiZXFcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpc1NlbGVjdGVkKHJhZGlvVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyc0J5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpLnNvbWUoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHJhZGlvVmFsdWUpO1xuICAgIH1cbn1cbkJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLW1lbnUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDx1bCBjbGFzcz1cImstcmFkaW8tbGlzdCBrLXJlc2V0XCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaWRQcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstcmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwicmFkaW9JZChpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoaXRlbS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIFthdHRyLmZvcl09XCJyYWRpb0lkKGl0ZW0udmFsdWUpXCI+e3tpdGVtLnRleHR9fTwvbGFiZWw+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQm9vbGVhbkZpbHRlck1lbnVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5Cb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1maWx0ZXJjZWxsJyxdIH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyU2VydmljZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqID4gTGlzdCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgYXMgYGVudHJ5Q29tcG9uZW50c2AgaW4gdGhlIEdyaWRNb2R1bGUuXG4gKi9cbmNvbnN0IGZpbHRlck1lbnVDb21wb25lbnRGYWN0b3J5ID0gKHR5cGUpID0+ICh7XG4gICAgXCJib29sZWFuXCI6IEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIFwiZGF0ZVwiOiBEYXRlRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICBcIm51bWVyaWNcIjogTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgXCJ0ZXh0XCI6IFN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnRcbn1bdHlwZV0pO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyTWVudUhvc3REaXJlY3RpdmUgZXh0ZW5kcyBGaWx0ZXJIb3N0RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcihob3N0LCByZXNvbHZlcikge1xuICAgICAgICBzdXBlcihob3N0LCByZXNvbHZlcik7XG4gICAgfVxuICAgIGNvbXBvbmVudFR5cGUoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5jb2x1bW4pICYmICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuY29sdW1uLmZpbHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJNZW51Q29tcG9uZW50RmFjdG9yeSh0aGlzLmNvbHVtbi5maWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmdGaWx0ZXJNZW51Q29tcG9uZW50O1xuICAgIH1cbiAgICBpbml0Q29tcG9uZW50KGN0eCkge1xuICAgICAgICBzdXBlci5pbml0Q29tcG9uZW50KGN0eCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Lmluc3RhbmNlLmZpbHRlclNlcnZpY2UgPSB0aGlzLmZpbHRlclNlcnZpY2U7XG4gICAgfVxufVxuRmlsdGVyTWVudUhvc3REaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0ZpbHRlck1lbnVIb3N0XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyTWVudUhvc3REaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmIH0sXG4gICAgeyB0eXBlOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfVxuXTtcbkZpbHRlck1lbnVIb3N0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0ZUZpbHRlck1lbnVJbnB1dENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocG9wdXBTZXJ2aWNlLCBsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wZW4ocGlja2VyKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5wb3B1cFNlcnZpY2Uub25DbG9zZVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHBpY2tlci5pc0FjdGl2ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICB9XG4gICAgbWVzc2FnZUZvcihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5nZXQoa2V5KTtcbiAgICB9XG59XG5EYXRlRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnUtaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwiY3VycmVudEZpbHRlclwiXG4gICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLWRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAjcGlja2VyXG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtmaWx0ZXJEZWxheV09XCIwXCJcbiAgICAgICAgICAgICAgICAob3Blbik9XCJvcGVuKHBpY2tlcilcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0UGxhY2Vob2xkZXJdPVwiZm9ybWF0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgIFtib3R0b21WaWV3XT1cImJvdHRvbVZpZXdcIlxuICAgICAgICAgICAgICAgIFt0b3BWaWV3XT1cInRvcFZpZXdcIlxuICAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyXT1cIndlZWtOdW1iZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxrZW5kby1kYXRlcGlja2VyLW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwibWVzc2FnZUZvcignZmlsdGVyRGF0ZVRvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvZGF5XT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlckRhdGVUb2RheScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9rZW5kby1kYXRlcGlja2VyLW1lc3NhZ2VzPlxuICAgICAgICAgICAgPC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUtaW5wdXQtd3JhcHBlcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBTaW5nbGVQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkRhdGVGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGN1cnJlbnRGaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0UGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYm90dG9tVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IElOVEVSTkFMX0NPTVBPTkVOVFMkMiA9IFtcbiAgICBGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIEZpbHRlck1lbnVDb250YWluZXJDb21wb25lbnQsXG4gICAgRmlsdGVyTWVudUlucHV0V3JhcHBlckNvbXBvbmVudCxcbiAgICBTdHJpbmdGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQsXG4gICAgU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICBGaWx0ZXJNZW51VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudCxcbiAgICBEYXRlRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LFxuICAgIERhdGVGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIEZpbHRlck1lbnVIb3N0RGlyZWN0aXZlLFxuICAgIEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50XG5dO1xuY29uc3QgRU5UUllfQ09NUE9ORU5UUyQxID0gW1xuICAgIFN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgRGF0ZUZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgQm9vbGVhbkZpbHRlck1lbnVDb21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyTWVudU1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTdHJpbmdGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgICAgICAgICAgRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgICAgICAgICBEYXRlRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICAgICAgICAgIEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgICAgICAgICAgU2hhcmVkRmlsdGVyTW9kdWxlLmV4cG9ydHMoKVxuICAgICAgICBdO1xuICAgIH1cbn1cbkZpbHRlck1lbnVNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0lOVEVSTkFMX0NPTVBPTkVOVFMkMl0sXG4gICAgICAgICAgICAgICAgZW50cnlDb21wb25lbnRzOiBFTlRSWV9DT01QT05FTlRTJDEsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0lOVEVSTkFMX0NPTVBPTkVOVFMkMiwgU2hhcmVkRmlsdGVyTW9kdWxlXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbU2hhcmVkRmlsdGVyTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uTGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgbmdab25lLCByZW5kZXJlcikge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnJlc2V0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmFwcGx5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbHVtbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5hdXRvU3luYyA9IHRydWU7XG4gICAgICAgIHRoaXMuYWxsb3dIaWRlQWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uc0NsYXNzID0gJ2stYWN0aW9uLWJ1dHRvbnMnO1xuICAgICAgICB0aGlzLnVubG9ja2VkQ291bnQgPSAwO1xuICAgIH1cbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgc2V0IGNvbHVtbnModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmluY2x1ZGVJbkNob29zZXIgIT09IGZhbHNlKTtcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uU3RhdGUoKTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cbiAgICBpc0Rpc2FibGVkKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gISh0aGlzLmFsbG93SGlkZUFsbCB8fCB0aGlzLmhhc0ZpbHRlcmVkIHx8IGNvbHVtbi5oaWRkZW4gfHwgdGhpcy5jb2x1bW5zLmZpbmQoY3VycmVudCA9PiBjdXJyZW50ICE9PSBjb2x1bW4gJiYgIWN1cnJlbnQuaGlkZGVuKSkgfHxcbiAgICAgICAgICAgICh0aGlzLmhhc1Zpc2libGVMb2NrZWQgJiYgIXRoaXMuaGFzVW5sb2NrZWRGaWx0ZXJlZCAmJiB0aGlzLnVubG9ja2VkQ291bnQgPT09IDEgJiYgIWNvbHVtbi5sb2NrZWQgJiYgIWNvbHVtbi5oaWRkZW4pO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvbVN1YnNjcmlwdGlvbnMgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3NlcyhlLnRhcmdldCwgJ2stY2hlY2tib3gnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvU3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhpZGRlbiA9ICFlLnRhcmdldC5jaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEJvb2xlYW4oY29sdW1uLmhpZGRlbikgIT09IGhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uQ2hhbmdlLmVtaXQoW2NvbHVtbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9tU3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5kb21TdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FuY2VsQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5mb3JFYWNoQ2hlY2tCb3goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSAhdGhpcy5jb2x1bW5zW2luZGV4XS5oaWRkZW47XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkKCk7XG4gICAgICAgIHRoaXMucmVzZXQuZW1pdCgpO1xuICAgIH1cbiAgICBhcHBseUNoYW5nZXMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoQ2hlY2tCb3goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaGlkZGVuID0gIWVsZW1lbnQuY2hlY2tlZDtcbiAgICAgICAgICAgIGlmIChCb29sZWFuKGNvbHVtbi5oaWRkZW4pICE9PSBoaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gaGlkZGVuO1xuICAgICAgICAgICAgICAgIGNoYW5nZWQucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZCgpO1xuICAgICAgICB0aGlzLmFwcGx5LmVtaXQoY2hhbmdlZCk7XG4gICAgfVxuICAgIGZvckVhY2hDaGVja0JveChjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBjaGVja2JveGVzID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnay1jaGVja2JveCcpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBjaGVja2JveGVzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY2FsbGJhY2soY2hlY2tib3hlc1tpZHhdLCBpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZURpc2FibGVkKCkge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0hpZGVBbGwgJiYgIXRoaXMuaGFzTG9ja2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuZm9yRWFjaENoZWNrQm94KChjaGVja2JveCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tlZEl0ZW1zLnB1c2goeyBjaGVja2JveCwgaW5kZXggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmFsbG93SGlkZUFsbCAmJiBjaGVja2VkSXRlbXMubGVuZ3RoID09PSAxICYmICF0aGlzLmhhc0ZpbHRlcmVkKSB7XG4gICAgICAgICAgICBjaGVja2VkSXRlbXNbMF0uY2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaGFzTG9ja2VkICYmICF0aGlzLmhhc1VubG9ja2VkRmlsdGVyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkVW5sb2NrZWQgPSBjaGVja2VkSXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWNvbHVtbnNbaXRlbS5pbmRleF0ubG9ja2VkKTtcbiAgICAgICAgICAgIGlmIChjaGVja2VkVW5sb2NrZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tlZFVubG9ja2VkWzBdLmNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDb2x1bW5TdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5oYXNMb2NrZWQgPSB0aGlzLmFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ubG9ja2VkICYmICghY29sdW1uLmhpZGRlbiB8fCBjb2x1bW4uaW5jbHVkZUluQ2hvb3NlciAhPT0gZmFsc2UpKS5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmhhc1Zpc2libGVMb2NrZWQgPSB0aGlzLmFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ubG9ja2VkICYmICFjb2x1bW4uaGlkZGVuKS5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLnVubG9ja2VkQ291bnQgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmxvY2tlZCAmJiAhY29sdW1uLmhpZGRlbikubGVuZ3RoO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaW5jbHVkZUluQ2hvb3NlciA9PT0gZmFsc2UgJiYgIWNvbHVtbi5oaWRkZW4pO1xuICAgICAgICBpZiAoZmlsdGVyZWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJlZCA9IGZpbHRlcmVkQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgdGhpcy5oYXNVbmxvY2tlZEZpbHRlcmVkID0gZmlsdGVyZWRDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5sb2NrZWQpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhhc1VubG9ja2VkRmlsdGVyZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkNvbHVtbkxpc3RDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1ubGlzdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImstY29sdW1uLWxpc3RcIj5cbiAgICAgICAgICAgIDxsYWJlbCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBpbmRleCA9IGluZGV4O1wiIGNsYXNzPSdrLWNvbHVtbi1saXN0LWl0ZW0nPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImstY2hlY2tib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBbYXR0ci5kYXRhLWluZGV4XT1cImluZGV4XCIgW2NoZWNrZWRdPVwiIWNvbHVtbi5oaWRkZW5cIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChjb2x1bW4pXCIgLz48c3BhbiBjbGFzcz1cImstY2hlY2tib3gtbGFiZWxcIj57eyBjb2x1bW4uZGlzcGxheVRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiYWN0aW9uc0NsYXNzXCIgKm5nSWY9XCIhYXV0b1N5bmNcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiay1idXR0b25cIiAoY2xpY2spPVwiY2FuY2VsQ2hhbmdlcygpXCI+e3sgcmVzZXRUZXh0IH19PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImstYnV0dG9uIGstcHJpbWFyeVwiIChjbGljayk9XCJhcHBseUNoYW5nZXMoKVwiPnt7IGFwcGx5VGV4dCB9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkxpc3RDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9XG5dO1xuQ29sdW1uTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjbGFzc05hbWU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNvbHVtbi1saXN0LXdyYXBwZXJcIixdIH1dLFxuICAgIHJlc2V0OiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgYXBwbHk6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5DaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRvU3luYzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWxsb3dIaWRlQWxsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhcHBseVRleHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlc2V0VGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uc0NsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBjb2x1bW5zIGluIHRoZSBHcmlkLiBUbyBlbmFibGUgdGhlIHVzZXIgdG8gc2hvdyBvciBoaWRlIGNvbHVtbnMsXG4gKiBhZGQgdGhlIGNvbXBvbmVudCBpbnNpZGUgYSBbYFRvb2xiYXJUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfdG9vbGJhcnRlbXBsYXRlZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHslIG1ldGEgaGVpZ2h0OjMwMCAlfVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4tY2hvb3Nlcj48L2tlbmRvLWdyaWQtY29sdW1uLWNob29zZXI+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICogeyUgZW5kbWV0YSAlfVxuICovXG5jbGFzcyBDb2x1bW5DaG9vc2VyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGNvbHVtbkluZm9TZXJ2aWNlLCBwb3B1cFNlcnZpY2UsIG5nWm9uZSwgcmVuZGVyZXIsIGNoYW5nZURldGVjdG9yKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlID0gY29sdW1uSW5mb1NlcnZpY2U7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNoYW5nZXMgaW4gdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNvbHVtbiB3aWxsIGJlIGltbWVkaWF0ZWx5IGFwcGxpZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF1dG9TeW5jID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgYWxsIGNvbHVtbnMgY2FuIGJlIGhpZGRlbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWxsb3dIaWRlQWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLmxlYWZOYW1lZENvbHVtbnM7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGUoYW5jaG9yLCB0ZW1wbGF0ZSkge1xuICAgICAgICBpZiAoIXRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3Blbih7XG4gICAgICAgICAgICAgICAgYW5jaG9yOiBhbmNob3IsXG4gICAgICAgICAgICAgICAgY29udGVudDogdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25Nb2RlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGFuY2hvckFsaWduOiB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgcG9wdXBBbGlnbjogeyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50LCAnZGlyJywgdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmNsb3NlQ2xpY2sgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcImRvY3VtZW50XCIsIFwiY2xpY2tcIiwgKHsgdGFyZ2V0IH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNsb3Nlc3QodGFyZ2V0LCBub2RlID0+IG5vZGUgPT09IHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50IHx8IG5vZGUgPT09IGFuY2hvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25BcHBseShjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgaWYgKGNoYW5nZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZS5jaGFuZ2VWaXNpYmlsaXR5KGNoYW5nZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNoYW5nZShjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY2hhbmdlVmlzaWJpbGl0eShjaGFuZ2VkKTtcbiAgICB9XG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRldGFjaENsb3NlKCk7XG4gICAgfVxuICAgIGRldGFjaENsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDbGljayA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5Db2x1bW5DaG9vc2VyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbi1jaG9vc2VyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YnV0dG9uICNhbmNob3JcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZShhbmNob3IsIHRlbXBsYXRlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstYmFyZSBrLWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnMnKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWNvbHVtbnNcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2stY29sdW1uLWNob29zZXItdGl0bGUnPnt7IGxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbmxpc3RcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBbYXBwbHlUZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnNBcHBseScpXCJcbiAgICAgICAgICAgICAgICBbcmVzZXRUZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnNSZXNldCcpXCJcbiAgICAgICAgICAgICAgICBbYXV0b1N5bmNdPVwiYXV0b1N5bmNcIlxuICAgICAgICAgICAgICAgIFthbGxvd0hpZGVBbGxdPVwiYWxsb3dIaWRlQWxsXCJcbiAgICAgICAgICAgICAgICAoYXBwbHkpPVwib25BcHBseSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY29sdW1uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uQ2hvb3NlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuQ29sdW1uQ2hvb3NlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhdXRvU3luYzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWxsb3dIaWRlQWxsOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzZXJ2aWNlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZVxuICogW2BDb2x1bW5NZW51VGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnV0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtjb2x1bW5NZW51XT1cInRydWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51VGVtcGxhdGUgbGV0LXNlcnZpY2U9XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWNsb3NlXCIgKGNsaWNrKT1cInNlcnZpY2UuY2xvc2UoKVwiXG4gKiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyByaWdodDogNXB4OyB0b3A6IDVweDtjdXJzb3I6IHBvaW50ZXI7XCI+PC9zcGFuPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydCBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydD5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDFcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQyXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFt7IEZpZWxkMTogJ0ZvbycsIEZpZWxkMjogJ0JhcicgfV07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2VNZW51ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGNvbHVtbiBtZW51LlxuICAgICAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLmNsb3NlTWVudS5lbWl0KCk7XG4gICAgfVxufVxuQ29sdW1uTWVudVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2x1bW5NZW51SXRlbUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VydmljZSBpbnB1dCBvZiB0aGUgcHJlZGVmaW5lZCBjb2x1bW4gbWVudSBjb21wb25lbnRzIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5jbG9zZSgpO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVJdGVtQmFzZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBzZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY29sdW1ubWVudS1pdGVtLXdyYXBwZXInLF0gfV1cbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnQgZm9yIHNlbGVjdGluZyBjb2x1bW5zIGluIHRoZSBHcmlkIHRoYXQgY2FuIGJlIHBsYWNlZFxuICogaW5zaWRlIGEgW2BDb2x1bW5NZW51VGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnV0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICpcbiAqID4gWW91IGhhdmUgdG8gc2V0IHRoZSBbQ29sdW1uTWVudVNlcnZpY2VdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXNlcnZpY2UgJX0pIHRoYXQgaXMgcGFzc2VkIGJ5XG4gKiA+IHRoZSB0ZW1wbGF0ZSB0byB0aGUgc2VydmljZSBpbnB1dCBvZiB0aGUgYGtlbmRvLWdyaWQtY29sdW1ubWVudS1jaG9vc2VyYCBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIHslIG1ldGEgaGVpZ2h0OjMwMCAlfVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtY2hvb3NlciBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtY2hvb3Nlcj5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDFcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQyXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFt7IEZpZWxkMTogJ0ZvbycsIEZpZWxkMjogJ0JhcicgfV07XG4gKiB9XG4gKlxuICogYGBgXG4gKiB7JSBlbmRtZXRhICV9XG4gKi9cbmNsYXNzIENvbHVtbk1lbnVDaG9vc2VyQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uTWVudUl0ZW1CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGNvbHVtbkluZm9TZXJ2aWNlLCBjaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZSA9IGNvbHVtbkluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IGlzIGV4cGFuZGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IGlzIGNvbGxhcHNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbnRlbnQgaXMgZXhwYW5kZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbnNDbGFzcyA9ICdrLWNvbHVtbm1lbnUtYWN0aW9ucyc7XG4gICAgfVxuICAgIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmZvU2VydmljZS5sZWFmTmFtZWRDb2x1bW5zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25BcHBseShjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgaWYgKGNoYW5nZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZS5jaGFuZ2VWaXNpYmlsaXR5KGNoYW5nZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuQ29sdW1uTWVudUNob29zZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1ubWVudS1jaG9vc2VyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0gW3RleHRdPVwibG9jYWxpemF0aW9uLmdldCgnY29sdW1ucycpXCJcbiAgICAgICAgICAgIGljb249XCJjb2x1bW5zXCIgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCIgKGNvbGxhcHNlKT1cImNvbGxhcHNlLmVtaXQoKVwiIChleHBhbmQpPVwiZXhwYW5kLmVtaXQoKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbmxpc3RcbiAgICAgICAgICAgICAgICAgICAgW2FwcGx5VGV4dF09XCJsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5zQXBwbHknKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXNldFRleHRdPVwibG9jYWxpemF0aW9uLmdldCgnY29sdW1uc1Jlc2V0JylcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9TeW5jXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93SGlkZUFsbF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25zQ2xhc3NdPVwiYWN0aW9uc0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgKGFwcGx5KT1cIm9uQXBwbHkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5saXN0PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbk1lbnVDaG9vc2VyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ29sdW1uSW5mb1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5Db2x1bW5NZW51Q2hvb3NlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBleHBhbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGV4cGFuZGVkOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbXBvbmVudCBmb3IgZWRpdGluZyBjb2x1bW4gZmlsdGVycyBpbiB0aGUgR3JpZCB0aGF0IGNhbiBiZSBwbGFjZWRcbiAqIGluc2lkZSBhIFtgQ29sdW1uTWVudVRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51dGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZS5cbiAqXG4gKiA+IFlvdSBoYXZlIHRvIHNldCB0aGUgW0NvbHVtbk1lbnVTZXJ2aWNlXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnVzZXJ2aWNlICV9KSB0aGF0IGlzIHBhc3NlZCBieVxuICogPiB0aGUgdGVtcGxhdGUgdG8gdGhlIHNlcnZpY2UgaW5wdXQgb2YgdGhlIGBrZW5kby1ncmlkLWNvbHVtbm1lbnUtZmlsdGVyYCBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIHslIG1ldGEgaGVpZ2h0OjQwMCAlfVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtrZW5kb0dyaWRCaW5kaW5nXT1cImRhdGFcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtZmlsdGVyIFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1maWx0ZXI+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICogeyUgZW5kbWV0YSAlfVxuICovXG5jbGFzcyBDb2x1bW5NZW51RmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uTWVudUl0ZW1CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IGlzIGV4cGFuZGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBjb250ZW50IGlzIGNvbGxhcHNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbnRlbnQgaXMgZXhwYW5kZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbnNDbGFzcyA9ICdrLWNvbHVtbm1lbnUtYWN0aW9ucyc7XG4gICAgfVxufVxuQ29sdW1uTWVudUZpbHRlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW5tZW51LWZpbHRlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIFt0ZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ2ZpbHRlcicpXCIgaWNvbj1cImZpbHRlclwiXG4gICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIiAoY29sbGFwc2UpPVwiY29sbGFwc2UuZW1pdCgpXCIgKGV4cGFuZCk9XCJleHBhbmQuZW1pdCgpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51LWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJzZXJ2aWNlLmNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInNlcnZpY2UuZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25zQ2xhc3NdPVwiYWN0aW9uc0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItbWVudS1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbk1lbnVGaWx0ZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5Db2x1bW5NZW51RmlsdGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGV4cGFuZDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbGxhcHNlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZXhwYW5kZWQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29udGVudCB0ZW1wbGF0ZSBvZiB0aGVcbiAqIFtga2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW1gXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnVpdGVtY29tcG9uZW50ICV9KSBjb21wb25lbnQuXG4gKiBQcm92aWRlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQgb2YgYSBjb2x1bW4gaXRlbS5cbiAqIFRvIGRlZmluZSB0aGUgY29udGVudCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlXG4gKiBga2VuZG9HcmlkQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgYSBgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtPmAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZT5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0gdGV4dD1cIkl0ZW0gVGV4dFwiIFtleHBhbmRlZF09XCJ0cnVlXCI+XG4gKiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZT5cbiAqICAgICAgICAgICAgICAgICAgICAgIEl0ZW0gQ29udGVudFxuICogICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gaXRlbSB0aGF0IGNhbiBiZSBwbGFjZWQgaW5zaWRlIGFcbiAqIFtgQ29sdW1uTWVudVRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51dGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIiBbY29sdW1uTWVudV09XCJ0cnVlXCIgW3Jlc2l6YWJsZV09XCJ0cnVlXCIgI2dyaWQ+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0gaWNvbj1cImFycm93cy1yZXNpemluZ1wiIHRleHQ9XCJGaXQgY29sdW1uXCJcbiAqICAgICAgICAgICAgICAgICAgKGl0ZW1DbGljayk9XCJncmlkLmF1dG9GaXRDb2x1bW4oY29sdW1uKTsgc2VydmljZS5jbG9zZSgpXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDFcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQyXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFt7IEZpZWxkMTogJ0ZvbycsIEZpZWxkMjogJ0JhcicgfV07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVJdGVtQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGl0ZW0gaXMgY2xpY2tlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBleHBhbmRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBjb2xsYXBzZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbnRlbnRTdGF0ZSA9ICdjb2xsYXBzZWQnO1xuICAgIH1cbiAgICBnZXQgaWNvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gYGstaS0ke3RoaXMuaWNvbn1gO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnRTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdChlKTtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gIXRoaXMuZXhwYW5kZWQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnRTdGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbGxhcHNlLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVDb250ZW50U3RhdGUoKSB7XG4gICAgICAgIHRoaXMuY29udGVudFN0YXRlID0gdGhpcy5leHBhbmRlZCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJztcbiAgICB9XG59XG5Db2x1bW5NZW51SXRlbUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignc3RhdGUnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBkaXNwbGF5OiAnbm9uZScgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBkaXNwbGF5OiAnYmxvY2snIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA9PiBleHBhbmRlZCcsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCcxMDBtcyBlYXNlLWluJywgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA9PiBjb2xsYXBzZWQnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoJzEwMG1zIGVhc2UtaW4nLCBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzBweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1jb2x1bW5tZW51LWl0ZW1cIiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgW2NsYXNzLmstc3RhdGUtc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIiBbY2xhc3Muay1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICA8c3BhbiAqbmdJZj1cImljb25cIiBjbGFzcz1cImstaWNvblwiIFtuZ0NsYXNzXT1cImljb25DbGFzc1wiPlxuICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgIHt7IHRleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZW50VGVtcGxhdGVcIiBbQHN0YXRlXT1cImNvbnRlbnRTdGF0ZVwiIHN0eWxlPVwib3ZlcmZsb3c6aGlkZGVuO1wiIGNsYXNzPVwiay1jb2x1bW5tZW51LWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGUudGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNvbHVtbk1lbnVJdGVtQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGl0ZW1DbGljazogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGV4cGFuZDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbGxhcHNlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBleHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29udGVudFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDb2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbHVtbi1tZW51IGl0ZW0gZm9yIHNvcnRpbmcgR3JpZCBjb2x1bW5zIHRoYXQgY2FuIGJlIHBsYWNlZCBpbnNpZGUgYVxuICogW2BDb2x1bW5NZW51VGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnV0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICogQWxsb3dzIHRoZSB1c2VyIHRvIHNvcnQgdGhlIGNvbHVtbi5cbiAqXG4gKiA+IFlvdSBoYXZlIHRvIHNldCB0aGUgW0NvbHVtbk1lbnVTZXJ2aWNlXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnVzZXJ2aWNlICV9KSB0aGF0IGlzIHBhc3NlZCBieVxuICogPiB0aGUgdGVtcGxhdGUgdG8gdGhlIHNlcnZpY2UgaW5wdXQgb2YgdGhlIGBrZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydGAgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgPGtlbmRvLWdyaWQgW2tlbmRvR3JpZEJpbmRpbmddPVwiZGF0YVwiIFtzb3J0YWJsZV09XCJ0cnVlXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQ+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCIgW3dpZHRoXT1cIjEwMFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDJcIiBbd2lkdGhdPVwiMTAwXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFt7IEZpZWxkMTogJ0ZvbycsIEZpZWxkMjogJ0JhcicgfSwgeyBGaWVsZDE6ICdGb28xJywgRmllbGQyOiAnQmFyMScgfV07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVTb3J0Q29tcG9uZW50IGV4dGVuZHMgQ29sdW1uTWVudUl0ZW1CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIHNvcnRTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlID0gc29ydFNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBzb3J0ZWRBc2MoKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yICYmICghZGVzY3JpcHRvci5kaXIgfHwgZGVzY3JpcHRvci5kaXIgPT09ICdhc2MnKTtcbiAgICB9XG4gICAgZ2V0IHNvcnRlZERlc2MoKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZGlyID09PSAnZGVzYyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGVTb3J0KGRpcikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuc2VydmljZS5jb2x1bW4uZmllbGQ7XG4gICAgICAgIGNvbnN0IHsgbW9kZSwgYWxsb3dVbnNvcnQgfSA9IG5vcm1hbGl6ZSQxKHRoaXMuc2VydmljZS5zb3J0YWJsZSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3I7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtb2RlID09PSAnbXVsdGlwbGUnID8gdGhpcy5zZXJ2aWNlLnNvcnQuZmlsdGVyKHMgPT4gcy5maWVsZCAhPT0gZmllbGQpIDogW107XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZGlyID09PSBkaXIpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dVbnNvcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzb3J0LnB1c2goeyBmaWVsZCwgZGlyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc29ydFNlcnZpY2Uuc29ydChzb3J0KTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgICBnZXQgZGVzY3JpcHRvcigpIHtcbiAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzLnNlcnZpY2Uuc29ydCB8fCBbXSkuZmluZChzID0+IHMuZmllbGQgPT09IHRoaXMuc2VydmljZS5jb2x1bW4uZmllbGQpO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVTb3J0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIFt0ZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ3NvcnRBc2NlbmRpbmcnKVwiXG4gICAgICAgICAgICBpY29uPVwic29ydC1hc2Mtc21cIiAoaXRlbUNsaWNrKT1cInRvZ2dsZVNvcnQoJ2FzYycpXCIgW3NlbGVjdGVkXT1cInNvcnRlZEFzY1wiPlxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtPlxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0gW3RleHRdPVwibG9jYWxpemF0aW9uLmdldCgnc29ydERlc2NlbmRpbmcnKVwiXG4gICAgICAgICAgICBpY29uPVwic29ydC1kZXNjLXNtXCIgKGl0ZW1DbGljayk9XCJ0b2dnbGVTb3J0KCdkZXNjJylcIiBbc2VsZWN0ZWRdPVwic29ydGVkRGVzY1wiPlxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uTWVudVNvcnRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTb3J0U2VydmljZSB9XG5dO1xuXG5jb25zdCBQT1BVUF9DTEFTUyA9ICdrLWdyaWQtY29sdW1ubWVudS1wb3B1cCc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtjb2x1bW4gbWVudV0oeyUgc2x1ZyBjb2x1bW5tZW51X2dyaWQgJX0pIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgQ29sdW1uTWVudUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocG9wdXBTZXJ2aWNlLCBsb2NhbGl6YXRpb24sIHNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFuZGFsb25lID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBzZXR0aW5ncyBmb3IgdGhlIENvbHVtbiBNZW51LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ29sdW1ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uID0gc2VydmljZS5jbG9zZU1lbnUuc3Vic2NyaWJlKHRoaXMuY2xvc2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5oYXNGaWx0ZXIgJiYgZmlsdGVyc0J5RmllbGQodGhpcy5maWx0ZXIsIHRoaXMuY29sdW1uLmZpZWxkKS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgKCF0aGlzLnNvcnRhYmxlICYmIHRoaXMuaGFzU29ydCAmJiB0aGlzLnNvcnQuZmluZChkZXNjcmlwdG9yID0+IGRlc2NyaXB0b3IuZmllbGQgPT09IHRoaXMuY29sdW1uLmZpZWxkKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gaGFzRmlsdGVyKHRoaXMuc2V0dGluZ3MsIHRoaXMuY29sdW1uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBoYXNTb3J0KCkge1xuICAgICAgICByZXR1cm4gaGFzU29ydCh0aGlzLnNldHRpbmdzLCB0aGlzLmNvbHVtbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzQ29sdW1uQ2hvb3NlcigpIHtcbiAgICAgICAgcmV0dXJuIGhhc0NvbHVtbkNob29zZXIodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzTG9jaygpIHtcbiAgICAgICAgcmV0dXJuIGhhc0xvY2sodGhpcy5zZXR0aW5ncywgdGhpcy5jb2x1bW4pO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmZpbHRlciA9IHRoaXMuZmlsdGVyO1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc29ydGFibGUgPSB0aGlzLnNvcnRhYmxlO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGUoZSwgYW5jaG9yLCB0ZW1wbGF0ZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRGaWx0ZXIgPSAhdGhpcy5oYXNDb2x1bW5DaG9vc2VyO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ29sdW1ucyA9ICF0aGlzLmhhc0ZpbHRlcjtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oYW5jaG9yLCB0ZW1wbGF0ZSwgdGhpcy5wb3B1cFJlZiwgUE9QVVBfQ0xBU1MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNvbHVtbnNFeHBhbmQoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDb2x1bW5zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5leHBhbmRlZEZpbHRlciA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25GaWx0ZXJFeHBhbmQoKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ29sdW1ucyA9IGZhbHNlO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtDb2x1bW5NZW51U2VydmljZV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbi1tZW51JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSAjYW5jaG9yXG4gICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1jb2x1bW4tbWVudSBrLWdyaWQtZmlsdGVyXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2stc3RhdGUtYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKCRldmVudCwgYW5jaG9yLCB0ZW1wbGF0ZSlcIlxuICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5NZW51JylcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1tb3JlLXZlcnRpY2FsXCI+PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jb2x1bW5NZW51VGVtcGxhdGVSZWYgfHwgY29sdW1uTWVudVRlbXBsYXRlIHx8IGRlZmF1bHRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHNlcnZpY2U6IHNlcnZpY2UsIGNvbHVtbjogY29sdW1uIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydCAqbmdJZj1cImhhc1NvcnRcIiBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0PlxuICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrICpuZ0lmPVwiaGFzTG9ja1wiIFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2s+XG4gICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWNob29zZXIgKm5nSWY9XCJoYXNDb2x1bW5DaG9vc2VyXCIgW3NlcnZpY2VdPVwic2VydmljZVwiXG4gICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkQ29sdW1uc1wiIChleHBhbmQpPVwib25Db2x1bW5zRXhwYW5kKClcIj5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWNob29zZXI+XG4gICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWZpbHRlciAqbmdJZj1cImhhc0ZpbHRlclwiIFtzZXJ2aWNlXT1cInNlcnZpY2VcIlxuICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZEZpbHRlclwiIChleHBhbmQpPVwib25GaWx0ZXJFeHBhbmQoKVwiPlxuICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtZmlsdGVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uTWVudUNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFNpbmdsZVBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ29sdW1uTWVudVNlcnZpY2UgfVxuXTtcbkNvbHVtbk1lbnVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc3RhbmRhbG9uZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWNvbHVtbi1tZW51LXN0YW5kYWxvbmUnLF0gfSwgeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5NZW51VGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbHVtbi1tZW51IGl0ZW0gdGhhdCBjYW4gYmUgcGxhY2VkIGluc2lkZSBhXG4gKiBbYENvbHVtbk1lbnVUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXRlbXBsYXRlZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUuXG4gKiBBbGxvd3MgdGhlIHVzZXIgdG8gbG9jayBvciB1bmxvY2sgdGhlIGNvbHVtbnMuXG4gKlxuICogPiBZb3UgaGF2ZSB0byBzZXQgdGhlIFtDb2x1bW5NZW51U2VydmljZV0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51c2VydmljZSAlfSkgdGhhdCBpcyBwYXNzZWQgYnlcbiAqID4gdGhlIHRlbXBsYXRlIHRvIHRoZSBzZXJ2aWNlIGlucHV0IG9mIHRoZSBga2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2tgIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtbG9jayBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtbG9jaz5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDFcIiBbd2lkdGhdPVwiMTAwXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiIFt3aWR0aF09XCIxMDBcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IGFueVtdID0gW3sgRmllbGQxOiAnRm9vJywgRmllbGQyOiAnQmFyJyB9XTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29sdW1uTWVudUxvY2tDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5NZW51SXRlbUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgY29sdW1uSW5mb1NlcnZpY2UsIGNoYW5nZURldGVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlID0gY29sdW1uSW5mb1NlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICB9XG4gICAgZ2V0IHRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQodGhpcy5sb2NrZWQgPyAndW5sb2NrJyA6ICdsb2NrJyk7XG4gICAgfVxuICAgIGdldCBpY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NrZWQgPyAndW5sb2NrJyA6ICdsb2NrJztcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubG9ja2VkICYmIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UudW5sb2NrZWRSb290Q291bnQgPCAyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlQ29sdW1uKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZUhpZXJhcmNoeSghdGhpcy5sb2NrZWQpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHRvZ2dsZUhpZXJhcmNoeShsb2NrZWQpIHtcbiAgICAgICAgbGV0IHJvb3QgPSB0aGlzLnNlcnZpY2UuY29sdW1uO1xuICAgICAgICB3aGlsZSAocm9vdC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJvb3QgPSByb290LnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW5zID0gW3Jvb3RdO1xuICAgICAgICBjb25zdCBhbGxDaGFuZ2VkID0gW107XG4gICAgICAgIHdoaWxlIChjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5zaGlmdCgpO1xuICAgICAgICAgICAgY29sdW1uLmxvY2tlZCA9IGxvY2tlZDtcbiAgICAgICAgICAgIGFsbENoYW5nZWQucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCguLi5jb2x1bW4uY2hpbGRyZW5BcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZS5jaGFuZ2VMb2NrZWQoYWxsQ2hhbmdlZCk7XG4gICAgfVxuICAgIGdldCBsb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuY29sdW1uLmxvY2tlZDtcbiAgICB9XG59XG5Db2x1bW5NZW51TG9ja0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2snLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIFt0ZXh0XT1cInRleHRcIiBbaWNvbl09XCJpY29uXCIgKGl0ZW1DbGljayk9XCJ0b2dnbGVDb2x1bW4oKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5NZW51TG9ja0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuXG5jb25zdCBDT01QT05FTlRTJDEgPSBbXG4gICAgQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICBDb2x1bW5DaG9vc2VyQ29tcG9uZW50LFxuICAgIENvbHVtbk1lbnVDaG9vc2VyQ29tcG9uZW50LFxuICAgIENvbHVtbk1lbnVGaWx0ZXJDb21wb25lbnQsXG4gICAgQ29sdW1uTWVudUl0ZW1Db21wb25lbnQsXG4gICAgQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ29sdW1uTWVudVNvcnRDb21wb25lbnQsXG4gICAgQ29sdW1uTWVudUNvbXBvbmVudCxcbiAgICBDb2x1bW5NZW51TG9ja0NvbXBvbmVudCxcbiAgICBDb2x1bW5NZW51VGVtcGxhdGVEaXJlY3RpdmVcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uTWVudU1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBDb2x1bW5DaG9vc2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgQ29sdW1uTWVudUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbk1lbnVJdGVtQ29tcG9uZW50LFxuICAgICAgICAgICAgQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBDb2x1bW5NZW51U29ydENvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbk1lbnVMb2NrQ29tcG9uZW50LFxuICAgICAgICAgICAgQ29sdW1uTWVudUNob29zZXJDb21wb25lbnQsXG4gICAgICAgICAgICBDb2x1bW5NZW51VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBDb2x1bW5NZW51Q29tcG9uZW50XG4gICAgICAgIF07XG4gICAgfVxufVxuQ29sdW1uTWVudU1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQ09NUE9ORU5UUyQxXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGaWx0ZXJNZW51TW9kdWxlXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbQ09NUE9ORU5UUyQxXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMkMiA9IFtcbiAgICBIZWFkZXJDb21wb25lbnQsXG4gICAgSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ29sdW1uSGFuZGxlRGlyZWN0aXZlLFxuICAgIFNlbGVjdEFsbENoZWNrYm94RGlyZWN0aXZlXG5dO1xuY29uc3QgaW1wb3J0ZWRNb2R1bGVzJDIgPSBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEdyb3VwTW9kdWxlLFxuICAgIFJvd0ZpbHRlck1vZHVsZSxcbiAgICBGaWx0ZXJNZW51TW9kdWxlLFxuICAgIFNoYXJlZE1vZHVsZSxcbiAgICBEcmFnQW5kRHJvcE1vZHVsZSxcbiAgICBDb2x1bW5NZW51TW9kdWxlXG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEhlYWRlck1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIFNlbGVjdEFsbENoZWNrYm94RGlyZWN0aXZlXG4gICAgICAgIF07XG4gICAgfVxufVxuSGVhZGVyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtleHBvcnRlZE1vZHVsZXMkMl0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcyQyXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbLi4uaW1wb3J0ZWRNb2R1bGVzJDJdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29tbWFuZCBjb2x1bW5zIG9mIHRoZSBHcmlkLiBZb3UgaGF2ZSB0byBkZWZpbmUgdGhlIGNvbnRlbnQgb2YgdGhlXG4gKiBjb2x1bW4gaW5zaWRlIGFuIGA8bmctdGVtcGxhdGU+YCB0YWcuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudFxuICogZGF0YSBpdGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMgb24gdXNpbmcgdGhlIHBhc3NlZCBmaWVsZHNcbiAqIGFuZCB0aGUgY29tbWFuZCBkaXJlY3RpdmVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICogW2VkaXRpbmcgdGhlIEdyaWQgaW4gQW5ndWxhciBSZWFjdGl2ZSBGb3Jtc10oeyUgc2x1ZyBlZGl0aW5nX3JlYWN0aXZlX2Zvcm1zX2dyaWQgJX0pLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmaWVsZHMgYXJlIHBhc3NlZDpcbiAqIC0gYGNvbHVtbkluZGV4YCZtZGFzaDtUaGUgY3VycmVudCBjb2x1bW4gaW5kZXguXG4gKiAtIGByb3dJbmRleGAmbWRhc2g7VGhlIGN1cnJlbnQgZGF0YSByb3cgaW5kZXguIElmIGluc2lkZSBhIG5ldyBpdGVtIHJvdywgYHJvd0luZGV4YGlzIGAtMWAuXG4gKiAtIGBkYXRhSXRlbWAmbWRhc2g7VGhlIGN1cnJlbnQgZGF0YSBpdGVtLlxuICogLSBgY29sdW1uYCZtZGFzaDtUaGUgY3VycmVudCBjb2x1bW4gaW5zdGFuY2UuXG4gKiAtIGBpc05ld2AmbWRhc2g7VGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGl0ZW0uXG4gKlxuICogVXN1YWxseSwgdGhlIHRlbXBsYXRlIGNvbnRhaW5zIENSVUQgY29tbWFuZCBkaXJlY3RpdmVzIHN1Y2ggYXM6XG4gKiAtIFtgRWRpdENvbW1hbmREaXJlY3RpdmVgXSh7JSBzbHVnIGFwaV9ncmlkX2VkaXRjb21tYW5kZGlyZWN0aXZlICV9KVxuICogLSBbYFJlbW92ZUNvbW1hbmREaXJlY3RpdmVgXSh7JSBzbHVnIGFwaV9ncmlkX3JlbW92ZWNvbW1hbmRkaXJlY3RpdmUgJX0pXG4gKiAtIFtgQ2FuY2VsQ29tbWFuZERpcmVjdGl2ZWBdKHslIHNsdWcgYXBpX2dyaWRfY2FuY2VsY29tbWFuZGRpcmVjdGl2ZSAlfSlcbiAqIC0gW2BTYXZlQ29tbWFuZERpcmVjdGl2ZWBdKHslIHNsdWcgYXBpX2dyaWRfc2F2ZWNvbW1hbmRkaXJlY3RpdmUgJX0pXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlVuaXQgUHJpY2VcIiB3aWR0aD1cIjIzMFwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uIHRpdGxlPVwiY29tbWFuZFwiIHdpZHRoPVwiMjIwXCI+XG4gKiAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGU+XG4gKiAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kIGNsYXNzPVwiay1wcmltYXJ5XCI+RWRpdDwvYnV0dG9uPlxuICogICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRSZW1vdmVDb21tYW5kPlJlbW92ZTwvYnV0dG9uPlxuICogICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdO1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9kdWN0cztcbiAqICAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgfSwge1xuICogICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29tbWFuZENvbHVtbkNvbXBvbmVudCBleHRlbmRzIENvbHVtbkJhc2UkMSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy50ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG5Db21tYW5kQ29sdW1uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbHVtbkJhc2UkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbW1hbmRDb2x1bW5Db21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbW1hbmRDb2x1bW5Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlJDEsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Db21tYW5kQ29sdW1uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjaGVja2JveCBmb3Igc2VsZWN0aW5nIGNvbHVtbnMgaW4gdGhlIEdyaWQuIElmIHRoZSBjb2x1bW4gaXNcbiAqIGRlZmluZWQgYXMgZW1wdHksIGl0IHJlbmRlcnMgYSBkZWZhdWx0IGNoZWNrYm94IGZvciByb3cgc2VsZWN0aW9uLlxuICogWW91IGNhbiBhbHNvIGRlZmluZSB0aGUgY29udGVudCBvZiB0aGUgY29sdW1uIGluc2lkZSBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnLlxuICogVGhlIGlucHV0IHJlcXVpcmVzIHlvdSB0byBpbmNsdWRlIHRoZSBgU2VsZWN0aW9uQ2hlY2tib3hgIG9wdGlvbi5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0YSBpdGVtIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAtIGBjb2x1bW5JbmRleGAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluZGV4LlxuICogLSBgcm93SW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgcm93IGluZGV4LiBJZiBpbnNpZGUgYSBuZXcgaXRlbSByb3csIGl0IHdpbGwgYmUgYC0xYC5cbiAqIC0gYGRhdGFJdGVtYCZtZGFzaDtUaGUgY3VycmVudCBkYXRhIGl0ZW0uXG4gKiAtIGBjb2x1bW5gJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBpbnN0YW5jZS5cbiAqIC0gYGlzTmV3YCZtZGFzaDtUaGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaXRlbS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAtIFtTZWxlY3Rpbmcgb3IgZGVzZWxlY3RpbmcgYWxsIGl0ZW1zIG9uIGEgcGFnZV0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2Mtc2VsZWN0LWFsbC1mZWF0dXJlKVxuICogLSBbUGVyc2lzdGluZyB0aGUgc2VsZWN0aW9uXSh7JSBzbHVnIHNlbGVjdGlvbl9ncmlkICV9I3RvYy1pbi1jb21iaW5hdGlvbi13aXRoLXRoZS1zZWxlY3QtYWxsLWZlYXR1cmUpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW3NlbGVjdGFibGVdPVwie2VuYWJsZWQ6IHRydWUsIGNoZWNrYm94T25seTogdHJ1ZX1cIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTIwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiB0aXRsZT1cIkRlZmF1bHQgY2hlY2tib3hcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gdGl0bGU9XCJDdXN0b20gY2hlY2tib3hcIj5cbiAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaWR4PVwicm93SW5kZXhcIj5cbiAqICAgICAgICAgICAgICBTZWxlY3Qgcm93IDxpbnB1dCBba2VuZG9HcmlkU2VsZWN0aW9uQ2hlY2tib3hdPVwiaWR4XCIgLz5cbiAqICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG4gKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXTtcbiAqXG4gKiAgICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICAgICB0aGlzLmdyaWREYXRhID0gcHJvZHVjdHM7XG4gKiAgICB9XG4gKiB9XG4gKlxuICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogIH0sIHtcbiAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogIH1cbiAqIF07XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENoZWNrYm94Q29sdW1uQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uQmFzZSQxIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIC8qXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNDaGVja2JveENvbHVtbiA9IHRydWU7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLnRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbn1cbkNoZWNrYm94Q29sdW1uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbHVtbkJhc2UkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoZWNrYm94Q29sdW1uQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2hlY2tib3hDb2x1bW5Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlJDEsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5DaGVja2JveENvbHVtbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBzaG93U2VsZWN0QWxsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWlucHV0LXJlbmFtZSAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSByb3ctc2VsZWN0aW9uIGNoZWNrYm94IG9mIHRoZSBHcmlkLiBUaGUgZGlyZWN0aXZlIGV4cGVjdHMgdGhlXG4gKiBpbmRleCBvZiB0aGUgY3VycmVudCByb3cgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLiBJbnNpZGUgdGhlXG4gKiBbYENoZWNrYm94Q29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jaGVja2JveGNvbHVtbmNvbXBvbmVudCAlfSksIGFwcGx5IHRoZVxuICogZGlyZWN0aXZlIHRvIGFuIGBpbnB1dGAgZWxlbWVudC4gV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGNoZWNrYm94IHRoYXQgaXMgYXNzb2NpYXRlZFxuICogd2l0aCB0aGUgZGlyZWN0aXZlLCBhIFtgc2VsZWN0aW9uQ2hhbmdlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1zZWxlY3Rpb25DaGFuZ2UpXG4gKiBldmVudCBpcyB0cmlnZ2VyZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW3NlbGVjdGFibGVdPVwie2VuYWJsZWQ6IHRydWUsIGNoZWNrYm94T25seTogdHJ1ZX1cIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbiB0aXRsZT1cIkN1c3RvbSBjaGVja2JveFwiPlxuICogICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pZHg9XCJyb3dJbmRleFwiPlxuICogICAgICAgICAgICAgIFNlbGVjdCByb3cgPGlucHV0IFtrZW5kb0dyaWRTZWxlY3Rpb25DaGVja2JveF09XCJpZHhcIiAvPlxuICogICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTIwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdO1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9kdWN0cztcbiAqICAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgfSwge1xuICogICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgU2VsZWN0aW9uQ2hlY2tib3hEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHNlbGVjdGlvblNlcnZpY2UsIGVsLCByZW5kZXJlciwgbmdab25lKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJjaGVja2JveFwiO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lDbGljayA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJjbGlja1wiLCB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lLZXlEb3duID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbC5uYXRpdmVFbGVtZW50LCBcImtleWRvd25cIiwgdGhpcy5vbktleURvd24uYmluZCh0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tlZFN0YXRlKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kZXN0cm95Q2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveUtleURvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUtleURvd24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS50b2dnbGVCeUluZGV4KHRoaXMuaXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICBldi5jdHJsS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBldi5zaGlmdEtleSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5jaGFuZ2VzLmVtaXQoZXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25LZXlEb3duKGUpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0Q2hlY2tlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJjaGVja2VkXCIsIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc1NlbGVjdGVkKHRoaXMuaXRlbUluZGV4KSk7XG4gICAgfVxufVxuU2VsZWN0aW9uQ2hlY2tib3hEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRTZWxlY3Rpb25DaGVja2JveF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogU2VsZWN0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGl0ZW1JbmRleDogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFtcImtlbmRvR3JpZFNlbGVjdGlvbkNoZWNrYm94XCIsXSB9XSxcbiAgICB0eXBlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnR5cGUnLF0gfV1cbn07XG5cbmNvbnN0IGNvbHVtbkNlbGxJbmRleCA9IChjZWxsLCBjZWxscykgPT4ge1xuICAgIGxldCBjZWxsSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGNlbGxzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgaWYgKGNlbGxzW2lkeF0gPT09IGNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNDbGFzc2VzKGNlbGxzW2lkeF0sICdrLWhpZXJhcmNoeS1jZWxsIGstZ3JvdXAtY2VsbCcpKSB7XG4gICAgICAgICAgICBjZWxsSW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihkZXRhaWxzU2VydmljZSwgZ3JvdXBzU2VydmljZSwgY2hhbmdlTm90aWZpY2F0aW9uLCBlZGl0U2VydmljZSwgbG9jYWxpemF0aW9uLCBuZ1pvbmUsIHJlbmRlcmVyLCBlbGVtZW50LCBkb21FdmVudHMsIHNlbGVjdGlvblNlcnZpY2UsIGNlbGxTZWxlY3Rpb25TZXJ2aWNlLCBjb2x1bW5JbmZvU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzU2VydmljZSA9IGRldGFpbHNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UgPSBncm91cHNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoYW5nZU5vdGlmaWNhdGlvbiA9IGNoYW5nZU5vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBkb21FdmVudHM7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZSA9IHNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UgPSBjZWxsU2VsZWN0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZSA9IGNvbHVtbkluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLnNraXAgPSAwO1xuICAgICAgICB0aGlzLm5vUmVjb3Jkc1RleHQgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ25vUmVjb3JkcycpO1xuICAgICAgICB0aGlzLmlzTG9ja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2tpcEdyb3VwRGVjb3JhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dHcm91cEZvb3RlcnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2NrZWRDb2x1bW5zQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnRvdGFsQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy50cmFja0J5ID0gZGVmYXVsdFRyYWNrQnk7XG4gICAgICAgIHRoaXMucm93Q2xhc3MgPSAoKSA9PiBudWxsO1xuICAgICAgICB0aGlzLmNlbGxLZXlkb3duU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jZWxsS2V5ZG93bi5zdWJzY3JpYmUoKGFyZ3MpID0+IHRoaXMuY2VsbEtleWRvd25IYW5kbGVyKGFyZ3MpKTtcbiAgICAgICAgdGhpcy50cmFja0J5V3JhcHBlciA9IHRoaXMudHJhY2tCeVdyYXBwZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy50cmFja0J5Q29sdW1ucyA9IHRoaXMudHJhY2tCeUNvbHVtbnMuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IG5ld0RhdGFJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0U2VydmljZS5uZXdEYXRhSXRlbTtcbiAgICB9XG4gICAgLy8gTnVtYmVyIG9mIHVubG9ja2VkIGNvbHVtbnMgaW4gdGhlIG5leHQgdGFibGUsIGlmIGFueVxuICAgIGdldCB1bmxvY2tlZENvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxDb2x1bW5zQ291bnQgLSB0aGlzLmxvY2tlZENvbHVtbnNDb3VudCAtICh0aGlzLmFsbENvbHVtbnMgfHwgdGhpcy5jb2x1bW5zKS5sZW5ndGg7XG4gICAgfVxuICAgIGlzQXJpYVNlbGVjdGVkKGl0ZW0sIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsU2VsZWN0aW9uU2VydmljZS5pc0NlbGxTZWxlY3RlZChpdGVtLCBjb2x1bW4pIHx8XG4gICAgICAgICAgICB0aGlzLmlzUm93U2VsZWN0ZWQoaXRlbSkgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cbiAgICB0b2dnbGVSb3coaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2UudG9nZ2xlUm93KGluZGV4LCBkYXRhSXRlbSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaXNFeHBhbmRlZCh2aWV3SXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzU2VydmljZS5pc0V4cGFuZGVkKHZpZXdJdGVtLmluZGV4LCB2aWV3SXRlbS5kYXRhKTtcbiAgICB9XG4gICAgZGV0YWlsQnV0dG9uU3R5bGVzKHZpZXdJdGVtKSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkKHZpZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGV4cGFuZGVkID8gJ2stbWludXMnIDogJ2stcGx1cyc7XG4gICAgfVxuICAgIGRldGFpbEJ1dHRvblRpdGxlKHZpZXdJdGVtKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSB0aGlzLmlzRXhwYW5kZWQodmlld0l0ZW0pID8gJ2RldGFpbENvbGxhcHNlJyA6ICdkZXRhaWxFeHBhbmQnO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KG1lc3NhZ2VLZXkpO1xuICAgIH1cbiAgICBpc0dyb3VwKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ2dyb3VwJztcbiAgICB9XG4gICAgaXNEYXRhSXRlbShpdGVtKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0dyb3VwKGl0ZW0pICYmICF0aGlzLmlzRm9vdGVyKGl0ZW0pO1xuICAgIH1cbiAgICBpc0Zvb3RlcihpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdmb290ZXInO1xuICAgIH1cbiAgICBpc0luRXhwYW5kZWRHcm91cChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3Vwc1NlcnZpY2UuaXNJbkV4cGFuZGVkR3JvdXAoaXRlbS5ncm91cEluZGV4LCBmYWxzZSk7XG4gICAgfVxuICAgIGlzUGFyZW50R3JvdXBFeHBhbmRlZChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3Vwc1NlcnZpY2UuaXNJbkV4cGFuZGVkR3JvdXAoaXRlbS5pbmRleCB8fCBpdGVtLmdyb3VwSW5kZXgpO1xuICAgIH1cbiAgICBpc09kZChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmluZGV4ICUgMiAhPT0gMDtcbiAgICB9XG4gICAgaXNTZWxlY3RhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlICYmIHRoaXMuc2VsZWN0YWJsZS5lbmFibGVkICE9PSBmYWxzZTtcbiAgICB9XG4gICAgaXNSb3dTZWxlY3RlZChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNTZWxlY3RlZChpdGVtLmluZGV4KTtcbiAgICB9XG4gICAgdHJhY2tCeVdyYXBwZXIoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBpdGVtLmlzRWRpdGluZyA9IHRoaXMuZWRpdFNlcnZpY2UuaGFzRWRpdGVkKGl0ZW0uaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWNrQnkoaW5kZXgsIGl0ZW0pO1xuICAgIH1cbiAgICB0cmFja0J5Q29sdW1ucyhpbmRleCwgaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0dWFsQ29sdW1ucyA/IGluZGV4IDogaXRlbTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNHcm91cEhlYWRlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlckNvbHVtbnMgPSBjb2x1bW5zVG9SZW5kZXIodGhpcy5za2lwR3JvdXBEZWNvcmF0aW9uID8gdGhpcy5jb2x1bW5zIDogdGhpcy5jb2x1bW5zLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSGVhZGVyQ29sdW1ucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSGVhZGVyU2xhdmVDZWxsc0NvdW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLmhhc0dyb3VwSGVhZGVyQ29sdW1uID8gdGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZENvbHVtbnNUb1JlbmRlci5sZW5ndGggOiAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlclNsYXZlQ2VsbHNDb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwiY29sdW1uc1wiLCBjaGFuZ2VzLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uLm5vdGlmeSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvZ2ljYWxSb3dJbmRleChyb3dJbmRleCkge1xuICAgICAgICBsZXQgcG9zID0gdGhpcy5za2lwICsgcm93SW5kZXg7XG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICBwb3MgKj0gMjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhYnNvbHV0ZVJvd0luZGV4ID0gMSArIHBvcztcbiAgICAgICAgY29uc3QgYWRkUm93T2Zmc2V0ID0gdGhpcy5lZGl0U2VydmljZS5oYXNOZXdJdGVtID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGZpbHRlclJvd09mZnNldCA9IGhhc0ZpbHRlclJvdyh0aGlzLmZpbHRlcmFibGUpID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGhlYWRlclJvd0NvdW50ID0gdGhpcy5jb2x1bW5JbmZvU2VydmljZS50b3RhbExldmVscyArIGZpbHRlclJvd09mZnNldCArIGFkZFJvd09mZnNldDtcbiAgICAgICAgcmV0dXJuIGFic29sdXRlUm93SW5kZXggKyBoZWFkZXJSb3dDb3VudDtcbiAgICB9XG4gICAgYWRkUm93TG9naWNhbEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmZvU2VydmljZS50b3RhbExldmVscyArIDEgK1xuICAgICAgICAgICAgKGhhc0ZpbHRlclJvdyh0aGlzLmZpbHRlcmFibGUpID8gMSA6IDApO1xuICAgIH1cbiAgICBsb2dpY2FsQ29sSW5kZXgoY29sdW1uKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGNvbHVtbi5sZWFmSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sZWFmSW5kZXggKyAodGhpcy5oYXNEZXRhaWxUZW1wbGF0ZSA/IDEgOiAwKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrSGFuZGxlciA9IHRoaXMuY2xpY2tIYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBtb3VzZWRvd25TdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICBjb25zdCBtb3VzZXVwU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdtb3VzZXVwJywgY2xpY2tIYW5kbGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0bWVudVN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY29udGV4dG1lbnUnLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2hzdGFydFN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndG91Y2hzdGFydCcsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICBjb25zdCB0b3VjaGVuZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndG91Y2hlbmQnLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBtb3VzZWRvd25TdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBtb3VzZXVwU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgY2xpY2tTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0bWVudVN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hTdWJzY3JpcHRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG91Y2hzdGFydFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIHRvdWNoZW5kU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG9yaWdpbmFsTm9SZWNvcmRUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdub1JlY29yZHMnKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9SZWNvcmRzVGV4dCA9PT0gb3JpZ2luYWxOb1JlY29yZFRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vUmVjb3Jkc1RleHQgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ25vUmVjb3JkcycpO1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsTm9SZWNvcmRUZXh0ID0gdGhpcy5ub1JlY29yZHNUZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudG91Y2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNlbGxLZXlkb3duU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZW91dCk7XG4gICAgfVxuICAgIGlzRWRpdGluZ0NlbGwoaW5kZXgsIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0U2VydmljZS5pc0VkaXRpbmcoKSAmJiB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkQ29sdW1uKGluZGV4LCBjb2x1bW4pO1xuICAgIH1cbiAgICBpc0VkaXRpbmdSb3coaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0U2VydmljZS5oYXNFZGl0ZWQoaW5kZXgpO1xuICAgIH1cbiAgICBnZXQgaGFzR3JvdXBIZWFkZXJDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIuaGFzR3JvdXBIZWFkZXJDb2x1bW47XG4gICAgfVxuICAgIGdldCBjb2x1bW5zQ29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmZvU2VydmljZS5jb2x1bW5zQ29udGFpbmVyO1xuICAgIH1cbiAgICBnZXQgY29sdW1uc1NwYW4oKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zU3Bhbih0aGlzLmNvbHVtbnMpO1xuICAgIH1cbiAgICBnZXQgYWxsQ29sdW1uc1NwYW4oKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zU3Bhbih0aGlzLmFsbENvbHVtbnMgfHwgdGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgZ2V0IGNvbFNwYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNTcGFuICsgdGhpcy5ncm91cHMubGVuZ3RoICsgKHRoaXMuaGFzRGV0YWlsVGVtcGxhdGUgPyAxIDogMCk7XG4gICAgfVxuICAgIGdldCBmb290ZXJDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xvY2tlZCA/IHRoaXMuY29sdW1uc0NvbnRhaW5lci5sb2NrZWRDb2x1bW5zVG9SZW5kZXIgOiB0aGlzLmNvbHVtbnNDb250YWluZXIubm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyO1xuICAgIH1cbiAgICBzaG93R3JvdXBIZWFkZXIoaXRlbSkge1xuICAgICAgICByZXR1cm4gIWl0ZW0uZGF0YS5za2lwSGVhZGVyO1xuICAgIH1cbiAgICBnZXQgaGFzRGV0YWlsVGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQodGhpcy5kZXRhaWxUZW1wbGF0ZSk7XG4gICAgfVxuICAgIGNsaWNrSGFuZGxlcihldmVudEFyZykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZXZlbnRUYXJnZXQoZXZlbnRBcmcpO1xuICAgICAgICBsZXQgY2VsbCwgcm93LCBib2R5LCBncmlkRWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNlbGwgPSBjbG9zZXN0KGN1cnJlbnRUYXJnZXQsIG1hdGNoZXNOb2RlTmFtZSgndGQnKSk7XG4gICAgICAgICAgICByb3cgPSBjbG9zZXN0KGNlbGwsIG1hdGNoZXNOb2RlTmFtZSgndHInKSk7XG4gICAgICAgICAgICBib2R5ID0gY2xvc2VzdChyb3csIG1hdGNoZXNOb2RlTmFtZSgndGJvZHknKSk7XG4gICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gYm9keTtcbiAgICAgICAgICAgIGdyaWRFbGVtZW50ID0gY2xvc2VzdEluU2NvcGUoY3VycmVudFRhcmdldCwgbWF0Y2hlc0NsYXNzZXMoJ2stZ3JpZCcpLCBlbGVtZW50KTtcbiAgICAgICAgfSB3aGlsZSAoYm9keSAmJiBib2R5ICE9PSBlbGVtZW50ICYmICFncmlkRWxlbWVudCk7XG4gICAgICAgIGlmIChjZWxsICYmICFoYXNDbGFzc2VzKGNlbGwsIE5PTl9EQVRBX0NFTExfQ0xBU1NFUykgJiZcbiAgICAgICAgICAgICFoYXNDbGFzc2VzKHJvdywgTk9OX0RBVEFfUk9XX0NMQVNTRVMpICYmXG4gICAgICAgICAgICBib2R5ID09PSBlbGVtZW50ICYmICFncmlkRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5wcmV2ZW50Q2VsbENsb3NlKCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2FibGUgPSB0YXJnZXQgIT09IGNlbGwgJiYgaXNGb2N1c2FibGVXaXRoVGFiS2V5KHRhcmdldCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFmb2N1c2FibGUgJiYgIW1hdGNoZXNOb2RlTmFtZSgnbGFiZWwnKSh0YXJnZXQpICYmICFoYXNDbGFzc2VzKHRhcmdldCwgSUdOT1JFX1RBUkdFVF9DTEFTU1NFUykgJiZcbiAgICAgICAgICAgICAgICAhY2xvc2VzdEluU2NvcGUodGFyZ2V0LCBtYXRjaGVzQ2xhc3NlcyhJR05PUkVfQ09OVEFJTkVSX0NMQVNTRVMpLCBjZWxsKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmNlbGxDbGlja0FyZ3MoY2VsbCwgcm93LCBldmVudEFyZyk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50QXJnLnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGV2ZW50QXJnLnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5jZWxsTW91c2Vkb3duLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50QXJnLnR5cGUgPT09ICdtb3VzZXVwJyB8fCBldmVudEFyZy50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLmNlbGxNb3VzZXVwLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5pc0VkaXRlZENvbHVtbiB8fCAhdGhpcy5lZGl0U2VydmljZS5jbG9zZUNlbGwoZXZlbnRBcmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRBcmcudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENlbGxDbGljayhhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENlbGxDbGljayhhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0Q2VsbENsaWNrKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5kb21FdmVudHMuY2VsbENsaWNrLmVtaXQoT2JqZWN0LmFzc2lnbihhcmdzLCB7XG4gICAgICAgICAgICBpc0VkaXRlZDogYXJncy5pc0VkaXRlZFJvdyB8fCBhcmdzLmlzRWRpdGVkQ29sdW1uXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgY2VsbEtleWRvd25IYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xuICAgICAgICAgICAgdGhpcy5jbGlja0hhbmRsZXIoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2VsbENsaWNrQXJncyhjZWxsLCByb3csIGV2ZW50QXJnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uQ2VsbEluZGV4KGNlbGwsIHJvdy5jZWxscyk7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgICBjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMubG9ja2VkQ29sdW1uc0NvdW50ICsgaW5kZXg7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHJvdy5nZXRBdHRyaWJ1dGUoJ2RhdGEta2VuZG8tZ3JpZC1pdGVtLWluZGV4Jyk7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggPyBwYXJzZUludChyb3dJbmRleCwgMTApIDogLTE7XG4gICAgICAgIGNvbnN0IGRhdGFJdGVtID0gcm93SW5kZXggPT09IC0xID8gdGhpcy5lZGl0U2VydmljZS5uZXdEYXRhSXRlbSA6IHRoaXMuZGF0YS5hdChyb3dJbmRleCAtIHRoaXMuc2tpcCk7XG4gICAgICAgIGNvbnN0IGlzRWRpdGVkQ29sdW1uID0gdGhpcy5lZGl0U2VydmljZS5pc0VkaXRlZENvbHVtbihyb3dJbmRleCwgY29sdW1uKTtcbiAgICAgICAgY29uc3QgaXNFZGl0ZWRSb3cgPSB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkKHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50QXJnLnR5cGUgPT09ICdrZXlkb3duJyA/ICdjbGljaycgOiBldmVudEFyZy50eXBlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICBkYXRhSXRlbTogZGF0YUl0ZW0sXG4gICAgICAgICAgICBpc0VkaXRlZENvbHVtbjogaXNFZGl0ZWRDb2x1bW4sXG4gICAgICAgICAgICBpc0VkaXRlZFJvdzogaXNFZGl0ZWRSb3csXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudEFyZyxcbiAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZXZlbnRUYXJnZXQoYXJncykge1xuICAgICAgICBpZiAoYXJncy50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IGFyZ3MuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJncy50YXJnZXQ7XG4gICAgfVxufVxuVGFibGVCb2R5Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkVGFibGVCb2R5XScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiZWRpdFNlcnZpY2UuaGFzTmV3SXRlbVwiPlxuICAgICAgICA8dHIgY2xhc3M9XCJrLWdyaWQtYWRkLXJvdyBrLWdyaWQtZWRpdC1yb3dcIlxuICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbFJvd1xuICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwiYWRkUm93TG9naWNhbEluZGV4KClcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJ1bmxvY2tlZENvbHVtbnNDb3VudFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFza2lwR3JvdXBEZWNvcmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1ncm91cC1jZWxsXCIgKm5nRm9yPVwibGV0IGcgb2YgZ3JvdXBzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvdGQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1oaWVyYXJjaHktY2VsbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwiYWRkUm93TG9naWNhbEluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgY29sdW1uSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbHVtbnM7XCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5JbmRleF09XCJsb2NrZWRDb2x1bW5zQ291bnQgKyBjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtpc05ld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwibmV3RGF0YUl0ZW1cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jc3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImFkZFJvd0xvZ2ljYWxJbmRleCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2dpY2FsQ29sSW5kZXgoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8dHIgKm5nSWY9XCJkYXRhPy5sZW5ndGggPT09IDAgfHwgZGF0YSA9PSBudWxsXCIgY2xhc3M9XCJrLWdyaWQtbm9yZWNvcmRzXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW5cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ0lmXT1cIm5vUmVjb3Jkc1RlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlQ29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiBub1JlY29yZHNUZW1wbGF0ZT8udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9SZWNvcmRzVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAge3tub1JlY29yZHNUZXh0fX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgPG5nLXRlbXBsYXRlIG5nRm9yXG4gICAgICAgIFtuZ0Zvck9mXT1cImRhdGFcIlxuICAgICAgICBbbmdGb3JUcmFja0J5XT1cInRyYWNrQnlXcmFwcGVyXCJcbiAgICAgICAgbGV0LWl0ZW1cbiAgICAgICAgbGV0LXJvd0luZGV4PVwiaW5kZXhcIj5cbiAgICAgICAgPHRyICpuZ0lmPVwiaXNHcm91cChpdGVtKSAmJiBpc1BhcmVudEdyb3VwRXhwYW5kZWQoaXRlbSkgJiYgc2hvd0dyb3VwSGVhZGVyKGl0ZW0pXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZEdyb3VwSGVhZGVyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtoYXNEZXRhaWxzXT1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW3NraXBHcm91cERlY29yYXRpb25dPVwic2tpcEdyb3VwRGVjb3JhdGlvblwiXG4gICAgICAgICAgICAgICAgW2hhc0dyb3VwSGVhZGVyQ29sdW1uXT1cImhhc0dyb3VwSGVhZGVyQ29sdW1uXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBIZWFkZXJDb2x1bW5zXT1cImdyb3VwSGVhZGVyQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4ICsgMVwiXG4gICAgICAgICAgICAgICAgW3RvdGFsQ29sdW1uc0NvdW50XT1cInRvdGFsQ29sdW1uc0NvdW50XCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJncm91cEhlYWRlclNsYXZlQ2VsbHNDb3VudFwiPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNEYXRhSXRlbShpdGVtKSAmJiBpc0luRXhwYW5kZWRHcm91cChpdGVtKVwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2RhdGFSb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJ1bmxvY2tlZENvbHVtbnNDb3VudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyh7IGRhdGFJdGVtOiBpdGVtLmRhdGEsIGluZGV4OiBpdGVtLmluZGV4IH0pXCJcbiAgICAgICAgICAgIFtjbGFzcy5rLWFsdF09XCJpc09kZChpdGVtKVwiXG4gICAgICAgICAgICBbY2xhc3Muay1tYXN0ZXItcm93XT1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbY2xhc3Muay1ncmlkLWVkaXQtcm93XT1cImlzRWRpdGluZ1JvdyhpdGVtLmluZGV4KVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWtlbmRvLWdyaWQtaXRlbS1pbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLXNlbGVjdGVkXT1cImlzU2VsZWN0YWJsZSgpICYmIGlzUm93U2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2tpcEdyb3VwRGVjb3JhdGlvblwiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstZ3JvdXAtY2VsbFwiICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L3RkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstaGllcmFyY2h5LWNlbGxcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YVJvd0luZGV4XT1cIml0ZW0uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbEV4cGFuZENlbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRhaWxUZW1wbGF0ZS5zaG93SWYoaXRlbS5kYXRhLCBpdGVtLmluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRldGFpbEJ1dHRvblN0eWxlcyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImRldGFpbEJ1dHRvblRpdGxlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cInRvZ2dsZVJvdyhpdGVtLmluZGV4LCBpdGVtLmRhdGEpXCI+PC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZENlbGxcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cIml0ZW0uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uSW5kZXhdPVwibG9ja2VkQ29sdW1uc0NvdW50ICsgY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWtlbmRvLWdyaWQtY29sdW1uLWluZGV4XT1cImxvY2tlZENvbHVtbnNDb3VudCArIGNvbHVtbkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImxvZ2ljYWxDb2xJbmRleChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFSb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIml0ZW0uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xJbmRleF09XCJjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGFibGUoKSA/IGlzQXJpYVNlbGVjdGVkKGl0ZW0sIGNvbHVtbikgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG91Y2gtYWN0aW9uXT1cImlzU2VsZWN0YWJsZSgpICYmICRhbnkoc2VsZWN0YWJsZSkuZHJhZyA/ICdub25lJyA6ICdhdXRvJ1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1ncmlkLWVkaXQtY2VsbF09XCJpc0VkaXRpbmdDZWxsKGl0ZW0uaW5kZXgsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtc2VsZWN0ZWRdPVwiaXNTZWxlY3RhYmxlICYmIGNlbGxTZWxlY3Rpb25TZXJ2aWNlLmlzQ2VsbFNlbGVjdGVkKGl0ZW0sIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlDb2x1bW5zO1wiPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyICpuZ0lmPVwiaXNEYXRhSXRlbShpdGVtKSAmJiBpc0luRXhwYW5kZWRHcm91cChpdGVtKSAmJiBkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWYgJiZcbiAgICAgICAgICAgIGRldGFpbFRlbXBsYXRlLnNob3dJZihpdGVtLmRhdGEsIGl0ZW0uaW5kZXgpICYmIGlzRXhwYW5kZWQoaXRlbSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWRldGFpbC1yb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmstYWx0XT1cImlzT2RkKGl0ZW0pXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbZGF0YVJvd0luZGV4XT1cIml0ZW0uaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkYXRhSXRlbV09XCJpdGVtLmRhdGFcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4KHJvd0luZGV4KSArIDFcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ2VsbHNDb3VudF09XCIxXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstZ3JvdXAtY2VsbFwiICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiPjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWhpZXJhcmNoeS1jZWxsXCI+PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstZGV0YWlsLWNlbGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uc1NwYW5cIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4KHJvd0luZGV4KSArIDFcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YVJvd0luZGV4XT1cIml0ZW0uaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU3Bhbl09XCJhbGxDb2x1bW5zU3BhbiArIDFcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIiBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGV0YWlsVGVtcGxhdGUudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW06IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiBpdGVtLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBpdGVtLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgKm5nSWY9XCJpc0Zvb3RlcihpdGVtKSAmJiAoaXNJbkV4cGFuZGVkR3JvdXAoaXRlbSkgfHwgKHNob3dHcm91cEZvb3RlcnMgJiYgaXNQYXJlbnRHcm91cEV4cGFuZGVkKGl0ZW0pKSlcbiAgICAgICAgICAgICYmICFpdGVtLmRhdGEuaGlkZUZvb3RlclwiXG4gICAgICAgICAgICBjbGFzcz1cImstZ3JvdXAtZm9vdGVyXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJ1bmxvY2tlZENvbHVtbnNDb3VudFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFza2lwR3JvdXBEZWNvcmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1ncm91cC1jZWxsXCIgKm5nRm9yPVwibGV0IGcgb2YgZ3JvdXBzXCI+PC90ZD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWhpZXJhcmNoeS1jZWxsXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGxcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4KHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwibG9naWNhbENvbEluZGV4KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2tpcF09XCJza2lwR3JvdXBEZWNvcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZvb3RlckNvbHVtbnM7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29sdW1ucztcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlQ29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogY29sdW1uLmdyb3VwRm9vdGVyVGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cDogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlczogaXRlbS5kYXRhPy5hZ2dyZWdhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBpdGVtLmRhdGE/LmFnZ3JlZ2F0ZXNcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRhYmxlQm9keUNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERldGFpbHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBHcm91cHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VOb3RpZmljYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IERvbUV2ZW50c1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNlbGVjdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENlbGxTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5JbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfVxuXTtcblRhYmxlQm9keUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhbGxDb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub1JlY29yZHNUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2tpcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm9SZWNvcmRzVGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNMb2NrZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNraXBHcm91cERlY29yYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dHcm91cEZvb3RlcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvY2tlZENvbHVtbnNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG90YWxDb2x1bW5zQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpcnR1YWxDb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0cmFja0J5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb3dDbGFzczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDZWxsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0U2VydmljZSwgaWRTZXJ2aWNlLCBjZWxsQ29udGV4dCkge1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuaWRTZXJ2aWNlID0gaWRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIHRoaXMuaXNOZXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0ID0ge307XG4gICAgICAgIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQgPSB7fTtcbiAgICB9XG4gICAgZ2V0IGNvbW1hbmRDZWxsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29tbWFuZCh0aGlzLmNvbHVtbik7XG4gICAgfVxuICAgIHNldCByb3dJbmRleChpbmRleCkge1xuICAgICAgICB0aGlzLl9yb3dJbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLnVwZGF0ZUNlbGxDb250ZXh0KCk7XG4gICAgfVxuICAgIGdldCByb3dJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0luZGV4O1xuICAgIH1cbiAgICBnZXQgaXNFZGl0ZWQoKSB7XG4gICAgICAgIGlmICghKHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nKCkgfHwgdGhpcy5pc05ldykgfHwgIXRoaXMuaXNDb2x1bW5FZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkaXRDb250ZXh0ID0gdGhpcy5lZGl0U2VydmljZS5jb2x1bW5Db250ZXh0KHRoaXMucm93SW5kZXgsIHRoaXMuY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWVsZEVkaXRhYmxlKGVkaXRDb250ZXh0LCB0aGlzLmNvbHVtbik7XG4gICAgfVxuICAgIGdldCBmb3JtR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRTZXJ2aWNlLmNvbnRleHQodGhpcy5yb3dJbmRleCkuZ3JvdXA7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUNvbnRleHQ7XG4gICAgfVxuICAgIGdldCBlZGl0VGVtcGxhdGVDb250ZXh0KCkge1xuICAgICAgICB0aGlzLl9lZGl0VGVtcGxhdGVDb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMuZm9ybUdyb3VwO1xuICAgICAgICB0aGlzLl9lZGl0VGVtcGxhdGVDb250ZXh0LmlzTmV3ID0gdGhpcy5pc05ldztcbiAgICAgICAgdGhpcy5fZWRpdFRlbXBsYXRlQ29udGV4dC5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5fZWRpdFRlbXBsYXRlQ29udGV4dC5kYXRhSXRlbSA9IHRoaXMuZGF0YUl0ZW07XG4gICAgICAgIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQuZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgICAgIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQucm93SW5kZXggPSB0aGlzLnJvd0luZGV4O1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdFRlbXBsYXRlQ29udGV4dDtcbiAgICB9XG4gICAgZ2V0IGZvcm1hdCgpIHtcbiAgICAgICAgaWYgKGlzQ29sdW1uQ29tcG9uZW50KHRoaXMuY29sdW1uKSAmJiAhaXNOdWxsT3JFbXB0eVN0cmluZyh0aGlzLmNvbHVtbi5mb3JtYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdEZvcm1hdCh0aGlzLmNvbHVtbi5mb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc0JvdW5kQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZmllbGQgJiYgIXRoaXMuY29sdW1uLnRlbXBsYXRlUmVmO1xuICAgIH1cbiAgICBnZXQgaXNDaGVja2JveENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQ2hlY2tib3hDb2x1bW4odGhpcy5jb2x1bW4pICYmICF0aGlzLmNvbHVtbi50ZW1wbGF0ZVJlZjtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkU2VydmljZS5zZWxlY3Rpb25DaGVja2JveElkKHRoaXMucm93SW5kZXgpO1xuICAgIH1cbiAgICBnZXQgaXNTcGFuQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gaXNTcGFuQ29sdW1uKHRoaXMuY29sdW1uKSAmJiAhdGhpcy5jb2x1bW4udGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIGdldCBjaGlsZENvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zVG9SZW5kZXIoW3RoaXMuY29sdW1uXSk7XG4gICAgfVxuICAgIGdldCBpc0NvbHVtbkVkaXRhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uIHx8IHRoaXMuaXNDb21tYW5kKHRoaXMuY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsQ29udGV4dCgpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhfY2hhbmdlcykge1xuICAgICAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlQ29udGV4dCgpO1xuICAgIH1cbiAgICBpc0NvbW1hbmQoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4gaW5zdGFuY2VvZiBDb21tYW5kQ29sdW1uQ29tcG9uZW50O1xuICAgIH1cbiAgICBpc0ZpZWxkRWRpdGFibGUoZWRpdENvbnRleHQsIGNvbHVtbikge1xuICAgICAgICBpZiAoIWlzUHJlc2VudChlZGl0Q29udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KGNvbHVtbi5lZGl0VGVtcGxhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQcmVzZW50KGVkaXRDb250ZXh0Lmdyb3VwKSAmJiBpc1ByZXNlbnQoZWRpdENvbnRleHQuZ3JvdXAuZ2V0KGNvbHVtbi5maWVsZCkpO1xuICAgIH1cbiAgICB1cGRhdGVDZWxsQ29udGV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbENvbnRleHQucm93SW5kZXggPSB0aGlzLl9yb3dJbmRleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVUZW1wbGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4udGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fdGVtcGxhdGVDb250ZXh0O1xuICAgICAgICBjb250ZXh0LmlzTmV3ID0gdGhpcy5pc05ldztcbiAgICAgICAgY29udGV4dC5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgY29udGV4dC5kYXRhSXRlbSA9IHRoaXMuZGF0YUl0ZW07XG4gICAgICAgIGNvbnRleHQucm93SW5kZXggPSB0aGlzLnJvd0luZGV4O1xuICAgICAgICBjb250ZXh0LmNvbHVtbkluZGV4ID0gdGhpcy5jb2x1bW5JbmRleDtcbiAgICAgICAgY29udGV4dC4kaW1wbGljaXQgPSB0aGlzLmRhdGFJdGVtO1xuICAgIH1cbn1cbkNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRDZWxsXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaXNFZGl0ZWRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImNvbHVtbi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc1NwYW5Db2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jaGlsZENvbHVtbiBbbmdGb3JPZl09XCJjaGlsZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtIHwgdmFsdWVPZjogY2hpbGRDb2x1bW4uZmllbGQ6IGNoaWxkQ29sdW1uLmZvcm1hdH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNCb3VuZENvbHVtblwiPnt7IGRhdGFJdGVtIHwgdmFsdWVPZjogY29sdW1uLmZpZWxkOiBjb2x1bW4uZm9ybWF0fX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc0NoZWNrYm94Q29sdW1uICYmICFpc05ld1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJrLWNoZWNrYm94XCIgW2tlbmRvR3JpZFNlbGVjdGlvbkNoZWNrYm94XT1cInJvd0luZGV4XCIgW2F0dHIuaWRdPVwic2VsZWN0aW9uQ2hlY2tib3hJZFwiPjxsYWJlbCBjbGFzcz1cImstY2hlY2tib3gtbGFiZWxcIiBbYXR0ci5mb3JdPVwic2VsZWN0aW9uQ2hlY2tib3hJZFwiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5lZGl0VGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZWRpdFRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImVkaXRUZW1wbGF0ZUNvbnRleHRcIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi5lZGl0b3JcIiAqbmdJZj1cIiFjb2x1bW4uZWRpdFRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgICAgICA+PC9rZW5kby1udW1lcmljdGV4dGJveD5cblxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgICAgICA+PC9rZW5kby1kYXRlcGlja2VyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbHVtbi5maWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkRm9jdXNhYmxlXG4gICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstdGV4dGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2VsbENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVkaXRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJZFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtDRUxMX0NPTlRFWFQsXSB9XSB9XG5dO1xuQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb21tYW5kQ2VsbENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNvbW1hbmQtY2VsbCcsXSB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpc05ldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93SW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGFJdGVtOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgZWRpdGAgY29tbWFuZCBvZiB0aGUgR3JpZC4gWW91IGNhbiBhcHBseSB0aGlzIGRpcmVjdGl2ZSB0byBhbnkgYGJ1dHRvbmBcbiAqIGVsZW1lbnQgaW5zaWRlIGEgW2BDb21tYW5kQ29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gYW4gYXNzb2NpYXRlZCBidXR0b24gd2l0aCB0aGUgZGlyZWN0aXZlIGlzIGNsaWNrZWQsIHRoZVxuICogW2BlZGl0YF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1lZGl0KSBldmVudFxuICogaXMgdHJpZ2dlcmVkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19ncmlkICV9KSkuXG4gKlxuICogPiBXaGVuIHRoZSByb3cgaXMgaW4gdGhlIGVkaXQgbW9kZSwgdGhlIGJ1dHRvbiB3aXRoIGBrZW5kb0dyaWRFZGl0Q29tbWFuZGAgaXMgYXV0b21hdGljYWxseSBoaWRkZW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gdGl0bGU9XCJjb21tYW5kXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZT5cbiAqICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQgY2xhc3M9XCJrLXByaW1hcnlcIj5FZGl0PC9idXR0b24+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKlxuICovXG5jbGFzcyBFZGl0Q29tbWFuZERpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZWRpdFNlcnZpY2UsIGNlbGxDb250ZXh0LCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbW1hbmRDbGFzcyA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0ZWQgPyAnbm9uZScgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYmVnaW5FZGl0KHRoaXMucm93SW5kZXgpO1xuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4ID0gdGhpcy5jZWxsQ29udGV4dC5yb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkKHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRWRpdENvbW1hbmREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRFZGl0Q29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkVkaXRDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5FZGl0Q29tbWFuZERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB2aXNpYmxlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5kaXNwbGF5JyxdIH1dLFxuICAgIGNvbW1hbmRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWVkaXQtY29tbWFuZCcsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYGNhbmNlbGAgY29tbWFuZCBvZiB0aGUgR3JpZC4gWW91IGNhbiBhcHBseSB0aGlzIGRpcmVjdGl2ZSB0byBhbnkgYGJ1dHRvbmBcbiAqIGVsZW1lbnQgaW5zaWRlIGEgW2BDb21tYW5kQ29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gYW4gYXNzb2NpYXRlZCBidXR0b24gd2l0aCB0aGUgZGlyZWN0aXZlIGlzIGNsaWNrZWQsIHRoZVxuICogW2BjYW5jZWxgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLWNhbmNlbCkgZXZlbnRcbiAqIGlzIHRyaWdnZXJlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfZ3JpZCAlfSkpLlxuICpcbiAqID4gV2hlbiB0aGUgcm93IGlzIG5vdCBpbiB0aGUgZWRpdCBtb2RlLCB0aGUgYnV0dG9uIHdpdGggdGhlIGBrZW5kb0dyaWRDYW5jZWxDb21tYW5kYCBpcyBhdXRvbWF0aWNhbGx5IGhpZGRlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiB0aXRsZT1cImNvbW1hbmRcIj5cbiAqICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kPkNhbmNlbCBjaGFuZ2VzPC9idXR0b24+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBjb250cm9sIHRoZSBjb250ZW50IG9mIHRoZSBidXR0b24gYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSByb3cuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gdGl0bGU9XCJjb21tYW5kXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kPnt7aXNOZXcgPyAnRGlzY2FyZCcgOiAnQ2FuY2VsIGNoYW5nZXMnfX08L2J1dHRvbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2FuY2VsQ29tbWFuZERpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZWRpdFNlcnZpY2UsIGNlbGxDb250ZXh0LCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbW1hbmRDbGFzcyA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzRWRpdGVkID8gJ25vbmUnIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5pc0VkaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5lbmRFZGl0KHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMucm93SW5kZXggPSB0aGlzLmNlbGxDb250ZXh0LnJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRlZCA9IHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0ZWQodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5DYW5jZWxDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ2FuY2VsQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNhbmNlbENvbW1hbmREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtDRUxMX0NPTlRFWFQsXSB9XSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcbkNhbmNlbENvbW1hbmREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XSxcbiAgICBjb21tYW5kQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1jYW5jZWwtY29tbWFuZCcsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYHNhdmVgIGNvbW1hbmQgb2YgdGhlIEdyaWQuIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gXG4gKiBlbGVtZW50IGluc2lkZSBhIFtgQ29tbWFuZENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY29tbWFuZGNvbHVtbmNvbXBvbmVudCAlfSkuXG4gKiBXaGVuIGFuIGFzc29jaWF0ZWQgYnV0dG9uIHdpdGggdGhlIGRpcmVjdGl2ZSBpcyBjbGlja2VkLCB0aGVcbiAqIFtgc2F2ZWBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2Mtc2F2ZSkgZXZlbnRcbiAqIGlzIHRyaWdnZXJlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfZ3JpZCAlfSkpLlxuICpcbiAqID4gV2hlbiB0aGUgcm93IGlzIG5vdCBpbiB0aGUgZWRpdCBtb2RlLCB0aGUgYnV0dG9uIHdpdGggYGtlbmRvR3JpZFNhdmVDb21tYW5kYCBpcyBhdXRvbWF0aWNhbGx5IGhpZGRlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiB0aXRsZT1cImNvbW1hbmRcIj5cbiAqICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRTYXZlQ29tbWFuZD5TYXZlIGNoYW5nZXM8L2J1dHRvbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGNvbnRyb2wgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIHJvdy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiB0aXRsZT1cImNvbW1hbmRcIj5cbiAqICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XG4gKiAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPnt7aXNOZXcgPyAnQWRkJyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqL1xuY2xhc3MgU2F2ZUNvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRTZXJ2aWNlLCBjZWxsQ29udGV4dCwgZWxlbWVudCwgcmVuZGVyZXIsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBudWxsLCBsb2NhbGl6YXRpb24sIG5nWm9uZSk7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5jZWxsQ29udGV4dCA9IGNlbGxDb250ZXh0O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21tYW5kQ2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0VkaXRlZCA/ICdub25lJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2Uuc2F2ZSh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4ID0gdGhpcy5jZWxsQ29udGV4dC5yb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkKHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxufVxuU2F2ZUNvbW1hbmREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRTYXZlQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNhdmVDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5TYXZlQ29tbWFuZERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB2aXNpYmxlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5kaXNwbGF5JyxdIH1dLFxuICAgIGNvbW1hbmRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLXNhdmUtY29tbWFuZCcsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYHJlbW92ZWAgY29tbWFuZCBvZiB0aGUgR3JpZC4gWW91IGNhbiBhcHBseSB0aGlzIGRpcmVjdGl2ZSB0byBhbnkgYGJ1dHRvbmAgZWxlbWVudFxuICogaW5zaWRlIGEgW2BDb21tYW5kQ29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gYW4gYXNzb2NpYXRlZCBidXR0b24gd2l0aCB0aGUgZGlyZWN0aXZlIGlzIGNsaWNrZWQsIHRoZVxuICogW2ByZW1vdmVgIGV2ZW50XSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLXJlbW92ZSlcbiAqIGlzIHRyaWdnZXJlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfcmVhY3RpdmVfZm9ybXNfZ3JpZCAlfSkpLlxuICpcbiAqID4gV2hlbiB0aGUgcm93IGlzIGluIHRoZSBlZGl0IG1vZGUsIHRoZSBidXR0b24gd2l0aCB0aGUgYGtlbmRvR3JpZFJlbW92ZUNvbW1hbmRgIGlzIGF1dG9tYXRpY2FsbHkgaGlkZGVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQ+XG4gKiAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uIHRpdGxlPVwiY29tbWFuZFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGU+XG4gKiAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+UmVtb3ZlIHJvdzwvYnV0dG9uPlxuICogICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cbiAqIDwva2VuZG8tZ3JpZD5cbiAqIGBgYFxuICovXG5jbGFzcyBSZW1vdmVDb21tYW5kRGlyZWN0aXZlIGV4dGVuZHMgQnV0dG9uIHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0U2VydmljZSwgY2VsbENvbnRleHQsIGVsZW1lbnQsIHJlbmRlcmVyLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2VsbENvbnRleHQgPSBjZWxsQ29udGV4dDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tbWFuZENsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB2aXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VkaXRlZCA/ICdub25lJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5yZW1vdmUodGhpcy5yb3dJbmRleCk7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMucm93SW5kZXggPSB0aGlzLmNlbGxDb250ZXh0LnJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5pc0VkaXRlZCA9IHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0ZWQodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5SZW1vdmVDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkUmVtb3ZlQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblJlbW92ZUNvbW1hbmREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtDRUxMX0NPTlRFWFQsXSB9XSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblJlbW92ZUNvbW1hbmREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XSxcbiAgICBjb21tYW5kQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1yZW1vdmUtY29tbWFuZCcsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29tbWFuZCBmb3IgYWRkaW5nIGEgbmV3IGl0ZW0gdG8gdGhlIEdyaWQuIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55XG4gKiBgYnV0dG9uYCBlbGVtZW50IGluc2lkZSBhIFtgVG9vbGJhclRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gYW4gYXNzb2NpYXRlZCBidXR0b24gd2l0aCB0aGUgZGlyZWN0aXZlIGlzIGNsaWNrZWQsIHRoZVxuICogW2BhZGRgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLWFkZCkgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfZ3JpZCAlfSkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQ+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRBZGRDb21tYW5kPkFkZCBuZXc8L2J1dHRvbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqL1xuY2xhc3MgQWRkQ29tbWFuZERpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZWRpdFNlcnZpY2UsIGVsZW1lbnQsIHJlbmRlcmVyLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmJlZ2luQWRkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29tbWFuZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5BZGRDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQWRkQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkFkZENvbW1hbmREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcbkFkZENvbW1hbmREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIGNvbW1hbmRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWFkZC1jb21tYW5kJyxdIH1dXG59O1xuXG5jb25zdCBleHBvcnRlZCQxID0gW1xuICAgIENvbW1hbmRDb2x1bW5Db21wb25lbnQsXG4gICAgQ2hlY2tib3hDb2x1bW5Db21wb25lbnQsXG4gICAgU2VsZWN0aW9uQ2hlY2tib3hEaXJlY3RpdmUsXG4gICAgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEVkaXRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBUYWJsZUJvZHlDb21wb25lbnQsXG4gICAgTm9SZWNvcmRzVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ2VsbENvbXBvbmVudCxcbiAgICBFZGl0Q29tbWFuZERpcmVjdGl2ZSxcbiAgICBDYW5jZWxDb21tYW5kRGlyZWN0aXZlLFxuICAgIFNhdmVDb21tYW5kRGlyZWN0aXZlLFxuICAgIFJlbW92ZUNvbW1hbmREaXJlY3RpdmUsXG4gICAgQWRkQ29tbWFuZERpcmVjdGl2ZVxuXTtcbmNvbnN0IGltcG9ydGVkTW9kdWxlcyQzID0gW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFNoYXJlZE1vZHVsZSxcbiAgICBHcm91cE1vZHVsZSxcbiAgICBOdW1lcmljVGV4dEJveE1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlXG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJvZHlNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQ29tbWFuZENvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgICAgIENoZWNrYm94Q29sdW1uQ29tcG9uZW50LFxuICAgICAgICAgICAgU2VsZWN0aW9uQ2hlY2tib3hEaXJlY3RpdmUsXG4gICAgICAgICAgICBDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBOb1JlY29yZHNUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIEVkaXRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIEVkaXRDb21tYW5kRGlyZWN0aXZlLFxuICAgICAgICAgICAgQ2FuY2VsQ29tbWFuZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIFNhdmVDb21tYW5kRGlyZWN0aXZlLFxuICAgICAgICAgICAgUmVtb3ZlQ29tbWFuZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIEFkZENvbW1hbmREaXJlY3RpdmVcbiAgICAgICAgXTtcbiAgICB9XG59XG5Cb2R5TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtleHBvcnRlZCQxXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWQkMV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogWy4uLmltcG9ydGVkTW9kdWxlcyQzXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRm9vdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5sb2dpY2FsUm93SW5kZXggPSAwO1xuICAgIH1cbiAgICBnZXQgZm9vdGVyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zY3JvbGxhYmxlO1xuICAgIH1cbiAgICBnZXQgY29sdW1uc1RvUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1RvUmVuZGVyKHRoaXMuY29sdW1ucyB8fCBbXSk7XG4gICAgfVxuICAgIGxvZ2ljYWxDb2x1bW5JbmRleChjb2x1bW4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjb2x1bW4ubGVhZkluZGV4O1xuICAgICAgICBpZiAoaXNQcmVzZW50KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgKGlzUHJlc2VudCh0aGlzLmRldGFpbFRlbXBsYXRlKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufVxuRm9vdGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRm9vdGVyXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidHJ1ZVwiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAgIFtjbGFzcy5rLWZvb3Rlci10ZW1wbGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZVJvd109XCJsb2NrZWRDb2x1bW5zQ291bnQgPiAwXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbENlbGxzQ291bnRdPVwiY29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoIC0gbG9ja2VkQ29sdW1uc0NvdW50XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLWdyb3VwLWNlbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGcgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstaGllcmFyY2h5LWNlbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNUb1JlbmRlcjsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2dpY2FsQ29sdW1uSW5kZXgoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5mb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5mb290ZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLmZvb3RlclN0eWxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGNvbHVtbi5mb290ZXJUZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBsb2NrZWRDb2x1bW5zQ291bnQgKyBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuRm9vdGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNjcm9sbGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvY2tlZENvbHVtbnNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb290ZXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWZvb3RlcicsXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzJDMgPSBbXG4gICAgRm9vdGVyQ29tcG9uZW50XG5dO1xuY29uc3QgaW1wb3J0ZWRNb2R1bGVzJDQgPSBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNoYXJlZE1vZHVsZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGb290ZXJNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuRm9vdGVyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtleHBvcnRlZE1vZHVsZXMkM10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcyQzXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbLi4uaW1wb3J0ZWRNb2R1bGVzJDRdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUb29sYmFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihncmlkKSB7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgIH1cbiAgICBnZXQgY2xhc3NOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuICdrLWhlYWRlciBrLWdyaWQtdG9vbGJhcic7XG4gICAgfVxuICAgIHNldCBwb3NpdGlvbih2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnRleHQucG9zaXRpb24gPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHRvb2xiYXJUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC50b29sYmFyVGVtcGxhdGUgPyB0aGlzLmdyaWQudG9vbGJhclRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbn1cblRvb2xiYXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtdG9vbGJhcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b29sYmFyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVG9vbGJhckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEdyaWRDb21wb25lbnQgfVxuXTtcblRvb2xiYXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2xhc3NOYW1lczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3MnLF0gfV0sXG4gICAgcG9zaXRpb246IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxFZGl0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgIH1cbiAgICBjcmVhdGUoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5oYXNMb2NhbERhdGEgJiYgdGhpcy5ncmlkLnNraXApIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuZGF0YS5zcGxpY2UodGhpcy5ncmlkLnNraXAsIDAsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB1cGRhdGUoX2l0ZW0pIHsgfSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWVtcHR5XG4gICAgcmVtb3ZlKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gZGF0YVtpZHhdKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkKHsgYWN0aW9uOiAncmVtb3ZlJywgaXRlbTogaXRlbSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25WYWx1ZXModGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSk7XG4gICAgfVxuICAgIGRhdGFDaGFuZ2VkKGFyZ3MgPSB7fSkge1xuICAgICAgICBpZiAodGhpcy5oYXNMb2NhbERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuY2hhbmdlcy5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBoYXNMb2NhbERhdGEoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuZGF0YSk7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNMb2NhbERhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ3JpZC5kYXRhO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZWZhdWx0IGVkaXQgc2VydmljZSBvZiB0aGUgZWRpdGluZyBkaXJlY3RpdmVzIHdvcmtzIG9ubHkgd2hlbiBiaW5kaW5nIHRvIHBsYWluIGFycmF5LicgK1xuICAgICAgICAgICAgICAgICdQbGVhc2UgcHJvdmlkZSBhbiBlZGl0U2VydmljZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRWRpdGluZ0RpcmVjdGl2ZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgPSBsb2NhbERhdGFDaGFuZ2VzU2VydmljZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0RWRpdFNlcnZpY2UgPSB0aGlzLmNyZWF0ZURlZmF1bHRTZXJ2aWNlKCk7XG4gICAgfVxuICAgIC8vIENvbnNpZGVyIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgZGVwZW5kZW5jeSBpbmplY3Rpb24gb2YgdGhlIHNlcnZpY2UgdG8gYWxsb3cgZm9yIHNwZWNpZnlpbmcgYSBnZW5lcmljIHNlcnZpY2Ugd2l0aG91dCBjb2RlLlxuICAgIC8vIFRoZSBJbnB1dCBzaG91bGQgc3RpbGwgYmUga2VwdC5cbiAgICAvKipcbiAgICAgKiBUaGUgZWRpdCBzZXJ2aWNlIHRoYXQgd2lsbCBoYW5kbGUgdGhlIG9wZXJhdGlvbnMuXG4gICAgICovXG4gICAgc2V0IGVkaXRTZXJ2aWNlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudXNlckVkaXRTZXJ2aWNlID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBlZGl0U2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckVkaXRTZXJ2aWNlIHx8IHRoaXMuZGVmYXVsdEVkaXRTZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuZ3JpZC5hZGQuc3Vic2NyaWJlKHRoaXMuYWRkSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQucmVtb3ZlLnN1YnNjcmliZSh0aGlzLnJlbW92ZUhhbmRsZXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5jYW5jZWwuc3Vic2NyaWJlKHRoaXMuY2FuY2VsSGFuZGxlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLnNhdmUuc3Vic2NyaWJlKHRoaXMuc2F2ZUhhbmRsZXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5kYXRhU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHRTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsRWRpdFNlcnZpY2UodGhpcy5ncmlkLCB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKTtcbiAgICB9XG4gICAgYWRkSGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5ncmlkLmFkZFJvdyh0aGlzLmNyZWF0ZU1vZGVsKHsgaXNOZXc6IHRydWUgfSkpO1xuICAgIH1cbiAgICBzYXZlSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNhdmVNb2RlbChhcmdzKTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmlzTmV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5jcmVhdGUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLnVwZGF0ZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3coYXJncy5yb3dJbmRleCk7XG4gICAgfVxuICAgIGNhbmNlbEhhbmRsZXIoeyByb3dJbmRleCB9KSB7XG4gICAgICAgIHRoaXMuY2xvc2VFZGl0b3Iocm93SW5kZXgpO1xuICAgIH1cbiAgICByZW1vdmVIYW5kbGVyKHsgZGF0YUl0ZW0gfSkge1xuICAgICAgICBjb25zdCByZW1vdmVJdGVtID0gKHNob3VsZFJlbW92ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UucmVtb3ZlKGRhdGFJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlbW92ZUNvbmZpcm1hdGlvbihkYXRhSXRlbSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKHJlbW92ZUl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZW1vdmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbW92ZUl0ZW0ocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbW92ZUl0ZW0odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZUVkaXRvcigpO1xuICAgIH1cbiAgICBjbG9zZUVkaXRvcihyb3dJbmRleCkge1xuICAgICAgICB0aGlzLmdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xuICAgIH1cbn1cbkVkaXRpbmdEaXJlY3RpdmVCYXNlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGVkaXRTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW1vdmVDb25maXJtYXRpb246IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxSb3dFZGl0U2VydmljZSBleHRlbmRzIExvY2FsRWRpdFNlcnZpY2Uge1xuICAgIHVwZGF0ZShfaXRlbSkge1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkKCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUm93RWRpdGluZ0RpcmVjdGl2ZUJhc2UgZXh0ZW5kcyBFZGl0aW5nRGlyZWN0aXZlQmFzZSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIC5hZGQodGhpcy5ncmlkLmVkaXQuc3Vic2NyaWJlKHRoaXMuZWRpdEhhbmRsZXIuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0U2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbFJvd0VkaXRTZXJ2aWNlKHRoaXMuZ3JpZCwgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSk7XG4gICAgfVxuICAgIGFkZEhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VFZGl0b3IoKTtcbiAgICAgICAgc3VwZXIuYWRkSGFuZGxlcigpO1xuICAgIH1cbiAgICBlZGl0SGFuZGxlcihhcmdzKSB7XG4gICAgICAgIHRoaXMuY2xvc2VFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5yb3dJbmRleCA9IGFyZ3Mucm93SW5kZXg7XG4gICAgICAgIHRoaXMuZ3JpZC5lZGl0Um93KGFyZ3Mucm93SW5kZXgsIHRoaXMuY3JlYXRlTW9kZWwoYXJncykpO1xuICAgIH1cbiAgICBzYXZlSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIHN1cGVyLnNhdmVIYW5kbGVyKGFyZ3MpO1xuICAgICAgICB0aGlzLmNsZWFuKCk7XG4gICAgfVxuICAgIGNsb3NlRWRpdG9yKHJvd0luZGV4ID0gdGhpcy5yb3dJbmRleCkge1xuICAgICAgICBzdXBlci5jbG9zZUVkaXRvcihyb3dJbmRleCk7XG4gICAgICAgIHRoaXMuY2xlYW4oKTtcbiAgICB9XG4gICAgY2xlYW4oKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJvd0luZGV4O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGVkaXRpbmcgb3BlcmF0aW9ucyBvZiB0aGUgR3JpZCB3aGVuIHVzaW5nXG4gKiB0aGUgVGVtcGxhdGUtRHJpdmVuIEFuZ3VsYXIgRm9ybXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2RpcmVjdGl2ZXNfZ3JpZCAlfSN0b2MtdGhlLXRlbXBsYXRlLWRpcmVjdGl2ZSkpLlxuICovXG5jbGFzcyBUZW1wbGF0ZUVkaXRpbmdEaXJlY3RpdmUgZXh0ZW5kcyBSb3dFZGl0aW5nRGlyZWN0aXZlQmFzZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZ3JpZCwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlID0gbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2U7XG4gICAgfVxuICAgIGVkaXRIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgc3VwZXIuZWRpdEhhbmRsZXIoYXJncyk7XG4gICAgICAgIHRoaXMuZGF0YUl0ZW0gPSBhcmdzLmRhdGFJdGVtO1xuICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzID0ge307XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYXNzaWduVmFsdWVzKHRoaXMub3JpZ2luYWxWYWx1ZXMsIHRoaXMuZGF0YUl0ZW0pO1xuICAgIH1cbiAgICBjbG9zZUVkaXRvcihyb3dJbmRleCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5hc3NpZ25WYWx1ZXModGhpcy5kYXRhSXRlbSwgdGhpcy5vcmlnaW5hbFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuY2xvc2VFZGl0b3Iocm93SW5kZXgpO1xuICAgIH1cbiAgICBjcmVhdGVNb2RlbChhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmlzTmV3KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdJdGVtKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2F2ZU1vZGVsKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MuZGF0YUl0ZW07XG4gICAgfVxuICAgIGNsZWFuKCkge1xuICAgICAgICBzdXBlci5jbGVhbigpO1xuICAgICAgICBkZWxldGUgdGhpcy5kYXRhSXRlbTtcbiAgICB9XG59XG5UZW1wbGF0ZUVkaXRpbmdEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRUZW1wbGF0ZUVkaXRpbmddJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UZW1wbGF0ZUVkaXRpbmdEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB9XG5dO1xuVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNyZWF0ZU5ld0l0ZW06IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2tlbmRvR3JpZFRlbXBsYXRlRWRpdGluZycsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG1hcmtBbGxBc1RvdWNoZWQgPSAoY29udHJvbCkgPT4ge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIGlmIChjb250cm9sLmhhc093blByb3BlcnR5KCdjb250cm9scycpKSB7XG4gICAgICAgIGxldCBjb250cm9scyA9IGNvbnRyb2wuY29udHJvbHM7XG4gICAgICAgIGZvciAobGV0IGlubmVyIGluIGNvbnRyb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbHMuaGFzT3duUHJvcGVydHkoaW5uZXIpKSB7XG4gICAgICAgICAgICAgICAgbWFya0FsbEFzVG91Y2hlZChjb250cm9sc1tpbm5lcl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGVkaXRpbmcgb3BlcmF0aW9ucyBvZiB0aGUgR3JpZCB3aGVuIHVzaW5nIHRoZVxuICogUmVhY3RpdmUgRm9ybXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2RpcmVjdGl2ZXNfZ3JpZCAlfSN0b2MtdGhlLXJlYWN0aXZlLWRpcmVjdGl2ZSkpLlxuICovXG5jbGFzcyBSZWFjdGl2ZUVkaXRpbmdEaXJlY3RpdmUgZXh0ZW5kcyBSb3dFZGl0aW5nRGlyZWN0aXZlQmFzZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZ3JpZCwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlID0gbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2U7XG4gICAgfVxuICAgIGNyZWF0ZU1vZGVsKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGFyZ3MpO1xuICAgIH1cbiAgICBzYXZlTW9kZWwoeyBkYXRhSXRlbSwgZm9ybUdyb3VwLCBpc05ldyB9KSB7XG4gICAgICAgIGlmICghZm9ybUdyb3VwLmRpcnR5ICYmICFpc05ldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYXNzaWduVmFsdWVzKGRhdGFJdGVtLCBmb3JtR3JvdXAudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICAgIG1hcmtBbGxBc1RvdWNoZWQoZm9ybUdyb3VwKTtcbiAgICB9XG59XG5SZWFjdGl2ZUVkaXRpbmdEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRSZWFjdGl2ZUVkaXRpbmddJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5SZWFjdGl2ZUVkaXRpbmdEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB9XG5dO1xuUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNyZWF0ZUZvcm1Hcm91cDogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsna2VuZG9HcmlkUmVhY3RpdmVFZGl0aW5nJyxdIH1dXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgZWRpdGluZyBvcGVyYXRpb25zIG9mIHRoZSBHcmlkIHdoZW4gdXNpbmcgdGhlIGluLWNlbGxcbiAqIGVkaXRpbmcgd2l0aCBSZWFjdGl2ZSBGb3JtcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfZGlyZWN0aXZlc19ncmlkICV9I3RvYy10aGUtaW5jZWxsLWRpcmVjdGl2ZSkpLlxuICovXG5jbGFzcyBJbkNlbGxFZGl0aW5nRGlyZWN0aXZlIGV4dGVuZHMgRWRpdGluZ0RpcmVjdGl2ZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgIH1cbiAgICAvLyBOZWVkIG1peGluXG4gICAgY3JlYXRlTW9kZWwoYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGb3JtR3JvdXAoYXJncyk7XG4gICAgfVxuICAgIHNhdmVNb2RlbCh7IGRhdGFJdGVtLCBmb3JtR3JvdXAsIGlzTmV3IH0pIHtcbiAgICAgICAgaWYgKCFmb3JtR3JvdXAuZGlydHkgJiYgIWlzTmV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5hc3NpZ25WYWx1ZXMoZGF0YUl0ZW0sIGZvcm1Hcm91cC52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgbWFya0FsbEFzVG91Y2hlZChmb3JtR3JvdXApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNlbGxDbGljay5zdWJzY3JpYmUodGhpcy5jZWxsQ2xpY2tIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuY2VsbENsb3NlLnN1YnNjcmliZSh0aGlzLmNlbGxDbG9zZUhhbmRsZXIuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICByZW1vdmVIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgc3VwZXIucmVtb3ZlSGFuZGxlcihhcmdzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNhbmNlbENlbGwoKTtcbiAgICB9XG4gICAgY2VsbENsaWNrSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIGlmICghYXJncy5pc0VkaXRlZCAmJiBhcmdzLnR5cGUgIT09ICdjb250ZXh0bWVudScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5lZGl0Q2VsbChhcmdzLnJvd0luZGV4LCBhcmdzLmNvbHVtbkluZGV4LCB0aGlzLmNyZWF0ZUZvcm1Hcm91cChhcmdzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2VsbENsb3NlSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgZm9ybUdyb3VwLCBkYXRhSXRlbSB9ID0gYXJncztcbiAgICAgICAgaWYgKCFmb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmb3JtR3JvdXAuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYXNzaWduVmFsdWVzKGRhdGFJdGVtLCBmb3JtR3JvdXAudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS51cGRhdGUoZGF0YUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxufVxuSW5DZWxsRWRpdGluZ0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEluQ2VsbEVkaXRpbmddJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5JbkNlbGxFZGl0aW5nRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfVxuXTtcbkluQ2VsbEVkaXRpbmdEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY3JlYXRlRm9ybUdyb3VwOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydrZW5kb0dyaWRJbkNlbGxFZGl0aW5nJyxdIH1dXG59O1xuXG5jb25zdCBoYXNHcm91cHMgPSAoaXRlbXMpID0+IGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCAmJiBpdGVtc1swXS5maWVsZCAmJiBpdGVtc1swXS5pdGVtcztcbmNvbnN0IGdyb3VwRGVzY3JpcHRvcnNQcmVzZW50ID0gKGRlc2NyaXB0b3JzKSA9PiBpc1ByZXNlbnQoZGVzY3JpcHRvcnMpICYmIGRlc2NyaXB0b3JzLmxlbmd0aCA+IDA7XG5jb25zdCBwcm9jZXNzR3JvdXBzID0gKGRhdGEsIHN0YXRlJCQxKSA9PiBwcm9jZXNzKGRhdGEsIHN0YXRlJCQxKS5kYXRhO1xuY29uc3QgcmVtb3ZlUGFyZW50RGVzY3JpcHRvcnMgPSAocGFyZW50cywgb3duZXIpID0+IGcgPT4gZy5maWVsZCAhPT0gb3duZXIuZmllbGQgJiYgIXBhcmVudHMuc29tZSh5ID0+IHkuZmllbGQgPT09IGcuZmllbGQpO1xuY29uc3QgZmluZEdyb3VwID0gKGdyb3VwSW5kZXgsIGdyb3VwcykgPT4ge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBncm91cDogZ3JvdXBJbmRleC5zcGxpdChcIl9cIikucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHBhcnNlSW50KHgsIDEwKTtcbiAgICAgICAgICAgIGlmIChhY2MuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjLml0ZW1zW2lkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheShhY2MpID8gYWNjW2lkeF0gOiBhY2M7XG4gICAgICAgIH0sIGdyb3VwcyksXG4gICAgICAgIHBhcmVudHNcbiAgICB9O1xufTtcbmNvbnN0IGZpbmRDaGlsZHJlbiA9IChkYXRhLCBwYXJlbnRzKSA9PiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHBhcmVudHMubWFwKHAgPT4gKHsgZmllbGQ6IHAuZmllbGQsIG9wZXJhdG9yOiBcImVxXCIsIHZhbHVlOiBwLnZhbHVlIH0pKTtcbiAgICByZXR1cm4gZmlsdGVyQnkoZGF0YSwge1xuICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzLFxuICAgICAgICBsb2dpYzogXCJhbmRcIlxuICAgIH0pO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb3VudCA9IChncm91cHMsIGluY2x1ZGVGb290ZXJzID0gZmFsc2UpID0+IChncm91cHMucmVkdWNlKChhY2MsIGdyb3VwKSA9PiB7XG4gICAgaWYgKCFncm91cC5za2lwSGVhZGVyKSB7XG4gICAgICAgIGFjYysrO1xuICAgIH1cbiAgICBpZiAoZ3JvdXAuaXRlbXMpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjb3VudChncm91cC5pdGVtcywgaW5jbHVkZUZvb3RlcnMpO1xuICAgICAgICBpZiAoaW5jbHVkZUZvb3RlcnMgJiYgY2hpbGRyZW4gJiYgIWdyb3VwLmhpZGVGb290ZXIpIHtcbiAgICAgICAgICAgIGFjYysrO1xuICAgICAgICB9XG4gICAgICAgIGFjYyArPSBjaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbn0sIDApIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc2xpY2UgPSAoZ3JvdXBzLCBza2lwLCB0YWtlJCQxLCBpbmNsdWRlRm9vdGVycyA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKCFpc1ByZXNlbnQodGFrZSQkMSkpIHtcbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaWR4ID0gMCwgbGVuZ3RoID0gZ3JvdXBzLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBpZiAodGFrZSQkMSA8PSAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cCA9IGdyb3Vwc1tpZHhdO1xuICAgICAgICBjb25zdCBncm91cEl0ZW1zID0gZ3JvdXAuaXRlbXM7XG4gICAgICAgIGxldCBpdGVtQ291bnQgPSBjb3VudChncm91cEl0ZW1zLCBpbmNsdWRlRm9vdGVycyk7XG4gICAgICAgIGlmIChpbmNsdWRlRm9vdGVycyAmJiBncm91cEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlbUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2tpcEhlYWRlciA9IHNraXAgPiAwO1xuICAgICAgICBpZiAoc2tpcCkge1xuICAgICAgICAgICAgc2tpcC0tO1xuICAgICAgICAgICAgaWYgKGl0ZW1Db3VudCAmJiBza2lwID49IGl0ZW1Db3VudCkge1xuICAgICAgICAgICAgICAgIHNraXAgLT0gaXRlbUNvdW50O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2tpcEhlYWRlciB8fCBpdGVtQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgICAgICBsZXQgaGlkZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXNraXBIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0YWtlJCQxLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFrZSQkMSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNHcm91cHMoZ3JvdXBJdGVtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBzbGljZShncm91cEl0ZW1zLCBza2lwLCB0YWtlJCQxLCBpbmNsdWRlRm9vdGVycyk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB0YWtlJCQxIC09IGNvdW50KGNoaWxkcmVuLCBpbmNsdWRlRm9vdGVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmdyb3VwSXRlbXMuc2xpY2Uoc2tpcCwgTWF0aC5taW4oc2tpcCArIHRha2UkJDEsIGdyb3VwSXRlbXMubGVuZ3RoKSkpO1xuICAgICAgICAgICAgICAgICAgICB0YWtlJCQxIC09IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRha2UkJDEgJiYgaW5jbHVkZUZvb3RlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaGlkZUZvb3RlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0YWtlJCQxLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNraXAgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXM6IGdyb3VwLmFnZ3JlZ2F0ZXMsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGdyb3VwLmZpZWxkLFxuICAgICAgICAgICAgICAgIGhpZGVGb290ZXIsXG4gICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBpZHgsXG4gICAgICAgICAgICAgICAgc2tpcEhlYWRlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3Qgc2tpcHBlZEhlYWRlcnMgPSAoZ3JvdXBJdGVtKSA9PiB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICB3aGlsZSAoZ3JvdXBJdGVtKSB7XG4gICAgICAgIGlmIChncm91cEl0ZW0uc2tpcEhlYWRlcikge1xuICAgICAgICAgICAgdG90YWwrKztcbiAgICAgICAgfVxuICAgICAgICBncm91cEl0ZW0gPSBncm91cEl0ZW0uaXRlbXMgJiYgZ3JvdXBJdGVtLml0ZW1zWzBdIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn07XG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgaW4tbWVtb3J5IGhhbmRsaW5nIG9mIGdyb3VwaW5nIHdpdGggdmlydHVhbCBzY3JvbGxpbmcuXG4gKi9cbmNsYXNzIEdyb3VwQmluZGluZ0RpcmVjdGl2ZSBleHRlbmRzIERhdGFCaW5kaW5nRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihncmlkLCBjaGFuZ2VEZXRlY3RvciwgbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZ3JpZCwgY2hhbmdlRGV0ZWN0b3IsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGFycmF5IG9mIGRhdGEgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBHcmlkLlxuICAgICAqL1xuICAgIHNldCBrZW5kb0dyaWRHcm91cEJpbmRpbmcodmFsdWUpIHtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWQucmVzZXRHcm91cHNTdGF0ZSgpO1xuICAgICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBkYXRhKHZhbHVlKSB7XG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gdmFsdWUgfHwgW107XG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBkZXNjcmlwdG9ycyBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIHNvcnRlZC5cbiAgICAgKi9cbiAgICBzZXQgc29ydCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjbGVhciA9IHRoaXMuc3RhdGUuc29ydCAhPT0gdmFsdWU7XG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0ID0gdGhpcy5zdGF0ZS5zb3J0ID0gdmFsdWU7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJlc2V0R3JvdXBzU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBkZXNjcmlwdG9yIGJ5IHdoaWNoIHRoZSBkYXRhIHdpbGwgYmUgZmlsdGVyZWQuXG4gICAgICovXG4gICAgc2V0IGZpbHRlcih2YWx1ZSkge1xuICAgICAgICBjb25zdCBjbGVhciA9IGRpZmZGaWx0ZXJzKHRoaXMuc3RhdGUuZmlsdGVyLCB2YWx1ZSk7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5maWx0ZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXIgPSBjbG9uZUZpbHRlcnModmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJlc2V0R3JvdXBzU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBkZXNjcmlwdG9ycyBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIGdyb3VwZWQuXG4gICAgICovXG4gICAgc2V0IGdyb3VwKHZhbHVlKSB7XG4gICAgICAgIC8vIGRvbid0IGNsZWFyIGlmIG5vIGdyb3VwcyBhcmUgcHJlc2VudCBpbiBwcmV2aW91cyBhbmQgY3VycmVudCB2YWx1ZVxuICAgICAgICBjb25zdCBncm91cHNQcmVzZW50ID0gZ3JvdXBEZXNjcmlwdG9yc1ByZXNlbnQodGhpcy5zdGF0ZS5ncm91cCkgfHwgZ3JvdXBEZXNjcmlwdG9yc1ByZXNlbnQodmFsdWUpO1xuICAgICAgICBjb25zdCBjbGVhciA9IHRoaXMuc3RhdGUuZ3JvdXAgIT09IHZhbHVlICYmIGdyb3Vwc1ByZXNlbnQ7XG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cCA9IHRoaXMuc3RhdGUuZ3JvdXAgPSB2YWx1ZTtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmdyaWQucmVzZXRHcm91cHNTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5za2lwID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cEV4cGFuZC5zdWJzY3JpYmUodGhpcy5ncm91cEV4cGFuZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5ncmlkLmdyb3VwQ29sbGFwc2Uuc3Vic2NyaWJlKHRoaXMuZ3JvdXBDb2xsYXBzZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgZ3JvdXBFeHBhbmQoeyBncm91cEluZGV4IH0pIHtcbiAgICAgICAgdGhpcy5ncmlkLmV4cGFuZEdyb3VwQ2hpbGRyZW4oZ3JvdXBJbmRleCk7XG4gICAgICAgIGNvbnN0IHsgZ3JvdXAsIHBhcmVudHMgfSA9IGZpbmRHcm91cChncm91cEluZGV4LCB0aGlzLmdyb3Vwcyk7XG4gICAgICAgIGlmICghZ3JvdXAuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHRoaXMuc3RhdGUuZ3JvdXAuZmlsdGVyKHJlbW92ZVBhcmVudERlc2NyaXB0b3JzKHBhcmVudHMsIGdyb3VwKSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRDaGlsZHJlbih0aGlzLm9yaWdpbmFsRGF0YSwgcGFyZW50cy5jb25jYXQoZ3JvdXApKTtcbiAgICAgICAgICAgIGdyb3VwLml0ZW1zID0gcHJvY2Vzc0dyb3VwcyhjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5zdGF0ZS5maWx0ZXIsXG4gICAgICAgICAgICAgICAgZ3JvdXA6IGRlc2NyaXB0b3JzLFxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc3RhdGUuc29ydFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmRhdGEgPSB0aGlzLmRhdGFSZXN1bHQodGhpcy5zdGF0ZS5za2lwLCB0aGlzLnN0YXRlLnRha2UpO1xuICAgIH1cbiAgICBncm91cENvbGxhcHNlKHsgZ3JvdXBJbmRleCB9KSB7XG4gICAgICAgIGNvbnN0IHsgZ3JvdXAgfSA9IGZpbmRHcm91cChncm91cEluZGV4LCB0aGlzLmdyb3Vwcyk7XG4gICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgZ3JvdXAuaXRlbXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQuZGF0YSA9IHRoaXMuZGF0YVJlc3VsdCh0aGlzLnN0YXRlLnNraXAsIHRoaXMuc3RhdGUudGFrZSk7XG4gICAgfVxuICAgIHByb2Nlc3Moc3RhdGUkJDEpIHtcbiAgICAgICAgaWYgKHN0YXRlJCQxLmdyb3VwICYmIHN0YXRlJCQxLmdyb3VwLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5wcm9jZXNzR3JvdXBzKHN0YXRlJCQxKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5za2lwIC09IHNraXBwZWRIZWFkZXJzKGdyb3Vwcy5kYXRhWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBncm91cHM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnByb2Nlc3Moc3RhdGUkJDEpO1xuICAgIH1cbiAgICBwcm9jZXNzR3JvdXBzKHN0YXRlJCQxKSB7XG4gICAgICAgIGlmICghdGhpcy5ncm91cHMgfHwgIXRoaXMuZ3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBwcm9jZXNzR3JvdXBzKHRoaXMub3JpZ2luYWxEYXRhLCB7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBzdGF0ZSQkMS5maWx0ZXIsXG4gICAgICAgICAgICAgICAgZ3JvdXA6IHN0YXRlJCQxLmdyb3VwLFxuICAgICAgICAgICAgICAgIHNvcnQ6IHN0YXRlJCQxLnNvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFSZXN1bHQoc3RhdGUkJDEuc2tpcCwgc3RhdGUkJDEudGFrZSk7XG4gICAgfVxuICAgIGRhdGFSZXN1bHQoc2tpcCwgdGFrZSQkMSkge1xuICAgICAgICBjb25zdCBpbmNsdWRlRm9vdGVycyA9IHRoaXMuZ3JpZC5zaG93R3JvdXBGb290ZXJzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogc2xpY2UodGhpcy5ncm91cHMsIHNraXAsIHRha2UkJDEsIGluY2x1ZGVGb290ZXJzKSxcbiAgICAgICAgICAgIHRvdGFsOiBjb3VudCh0aGlzLmdyb3VwcywgaW5jbHVkZUZvb3RlcnMpXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFwcGx5U3RhdGUoeyBza2lwLCB0YWtlOiB0YWtlJCQxLCBzb3J0LCBncm91cCwgZmlsdGVyOiBmaWx0ZXIkJDEgfSkge1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnN0YXRlLnRha2UgPSB0YWtlJCQxO1xuICAgICAgICAvLyB0aGlzLnBhZ2VTaXplID0gdGFrZTsgLy8gZG8gbmVlZCB0byB1cGRhdGUgdGFrZSBhcyB0aGUgcHJvY2VzcyB3aXRoIHNsaWNlIGNvcnJlY3RseVxuICAgICAgICB0aGlzLnNvcnQgPSBzb3J0O1xuICAgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyJCQxO1xuICAgIH1cbn1cbkdyb3VwQmluZGluZ0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1trZW5kb0dyaWRHcm91cEJpbmRpbmddJyB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwQmluZGluZ0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEdyaWRDb21wb25lbnQgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB9XG5dO1xuR3JvdXBCaW5kaW5nRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGtlbmRvR3JpZEdyb3VwQmluZGluZzogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFtcImtlbmRvR3JpZEdyb3VwQmluZGluZ1wiLF0gfV0sXG4gICAgc29ydDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQ0ID0gW1xuICAgIEdyaWRDb21wb25lbnQsXG4gICAgVG9vbGJhclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgRGF0YUJpbmRpbmdEaXJlY3RpdmUsXG4gICAgU2VsZWN0aW9uRGlyZWN0aXZlLFxuICAgIEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgIEdyb3VwQmluZGluZ0RpcmVjdGl2ZSxcbiAgICBUZW1wbGF0ZUVkaXRpbmdEaXJlY3RpdmUsXG4gICAgUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLFxuICAgIEluQ2VsbEVkaXRpbmdEaXJlY3RpdmUsXG4gICAgRXhwYW5kRGV0YWlsc0RpcmVjdGl2ZSxcbiAgICAuLi5Hcm91cE1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uU2hhcmVkTW9kdWxlLmV4cG9ydHMoKSxcbiAgICAuLi5Cb2R5TW9kdWxlLmV4cG9ydHMoKSxcbiAgICAuLi5IZWFkZXJNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLkZvb3Rlck1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uUGFnZXJNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLlJvd0ZpbHRlck1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uRmlsdGVyTWVudU1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uQ29sdW1uTWVudU1vZHVsZS5leHBvcnRzKClcbl07XG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbXG4gICAgR3JpZENvbXBvbmVudCxcbiAgICBMaXN0Q29tcG9uZW50LFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgRGF0YUJpbmRpbmdEaXJlY3RpdmUsXG4gICAgVG9vbGJhclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFNlbGVjdGlvbkRpcmVjdGl2ZSxcbiAgICBUZW1wbGF0ZUVkaXRpbmdEaXJlY3RpdmUsXG4gICAgUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLFxuICAgIEluQ2VsbEVkaXRpbmdEaXJlY3RpdmUsXG4gICAgRXhwYW5kRGV0YWlsc0RpcmVjdGl2ZSxcbiAgICBHcm91cEJpbmRpbmdEaXJlY3RpdmUsXG4gICAgR3JpZE1hcnF1ZWVEaXJlY3RpdmVcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBHcmlkIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBHcmlkIG1vZHVsZVxuICogaW1wb3J0IHsgR3JpZE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBHcmlkTW9kdWxlXSwgLy8gaW1wb3J0IEdyaWQgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBHcmlkTW9kdWxlIHtcbn1cbkdyaWRNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9uc10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcyQ0XSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgR3JvdXBNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgQm9keU1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgSGVhZGVyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBGb290ZXJNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFBhZ2VyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBSb3dGaWx0ZXJNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlck1lbnVNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFJlc2l6ZVNlbnNvck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgQ29sdW1uTWVudU1vZHVsZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY2xhc3MgUERGTWFyZ2luQ29tcG9uZW50JDEgZXh0ZW5kcyBQREZNYXJnaW5Db21wb25lbnQge1xufVxuUERGTWFyZ2luQ29tcG9uZW50JDEuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtcGRmLW1hcmdpbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6ICcnXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgUERGIHBhZ2UgdGVtcGxhdGUgb2YgdGhlIEdyaWQgdGhhdCBoZWxwcyB0byBjdXN0b21pemUgdGhlIFBERiBwYWdlcy4gVG8gZGVmaW5lIGEgcGFnZSB0ZW1wbGF0ZSxcbiAqIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9HcmlkUERGVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgYDxrZW5kby1ncmlkLXBkZj5gLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogLSBgcGFnZU51bWJlcmAmbWRhc2g7RGVmaW5lcyBQREYgcGFnZSBudW1iZXIuXG4gKiAtIGB0b3RhbFBhZ2VzYCZtZGFzaDtEZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2YgUERGIHBhZ2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiPlxuICogICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAqICAgICAgICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFBERkNvbW1hbmQgaWNvbj1cImZpbGUtcGRmXCI+RXhwb3J0IHRvIFBERjwvYnV0dG9uPlxuICogICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLXBkZiBmaWxlTmFtZT1cIlByb2R1Y3RzLnBkZlwiIHBhcGVyU2l6ZT1cIkE0XCIgW21hcmdpbl09XCJ7IHRvcDogJzFjbScsIGxlZnQ6ICcxY20nLCByaWdodDogJzFjbScsIGJvdHRvbTogJzFjbScgfVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRQREZUZW1wbGF0ZSBsZXQtcGFnZU51bT1cInBhZ2VOdW1cIiBsZXQtdG90YWxQYWdlcz1cInRvdGFsUGFnZXNcIj5cbiAqICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDVweDsgbGVmdDogNXB4O1wiPlxuICogICAgICAgICAgICAgICAgICAgICAgICAgUGFnZSB7eyBwYWdlTnVtIH19IG9mIHt7IHRvdGFsUGFnZXMgfX1cbiAqICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1wZGY+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMFxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMFxuICogICAgICAgfVxuICogICAgIF07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFBERlRlbXBsYXRlRGlyZWN0aXZlJDEgZXh0ZW5kcyBQREZUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgc3VwZXIodGVtcGxhdGVSZWYpO1xuICAgIH1cbn1cblBERlRlbXBsYXRlRGlyZWN0aXZlJDEuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRQREZUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBERlRlbXBsYXRlRGlyZWN0aXZlJDEuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEhFQURFUl9DTEFTUyA9ICdrLWdyaWQtaGVhZGVyJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBGT09URVJfQ0xBU1MgPSAnay1ncmlkLWZvb3Rlcic7XG5jb25zdCBHUklEX0xJU1QgPSAnS0VORE8tR1JJRC1MSVNUJztcbmNvbnN0IFRBQkxFID0gJ1RBQkxFJztcbmNvbnN0IG1hdGNoZXNMaXN0ID0gbWF0Y2hlc05vZGVOYW1lKEdSSURfTElTVCk7XG5jb25zdCBtYXRjaGVzVGFibGUgPSBtYXRjaGVzTm9kZU5hbWUoVEFCTEUpO1xuY29uc3Qgc3VmZml4ID0gKGxvY2tlZCkgPT4gbG9ja2VkID8gJ2xvY2tlZCcgOiAnd3JhcCc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JpZFF1ZXJ5IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlzdCA9IGZpbmRFbGVtZW50KGVsZW1lbnQsIG1hdGNoZXNMaXN0KTtcbiAgICB9XG4gICAgY29udGVudChsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRFbGVtZW50KHRoaXMubGlzdCwgbWF0Y2hlc0NsYXNzZXMoYGstZ3JpZC1jb250ZW50JHtsb2NrZWQgPyAnLWxvY2tlZCcgOiAnJ31gKSk7XG4gICAgfVxuICAgIGhlYWRlcihsb2NrZWQpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJXcmFwID0gdGhpcy5oZWFkZXJXcmFwIHx8IGZpbmRFbGVtZW50KHRoaXMuZWxlbWVudCwgbWF0Y2hlc0NsYXNzZXMoSEVBREVSX0NMQVNTKSk7XG4gICAgICAgIHJldHVybiBmaW5kRWxlbWVudCh0aGlzLmhlYWRlcldyYXAsIG1hdGNoZXNDbGFzc2VzKGAke0hFQURFUl9DTEFTU30tJHtzdWZmaXgobG9ja2VkKX1gKSk7XG4gICAgfVxuICAgIGZvb3Rlcihsb2NrZWQpIHtcbiAgICAgICAgdGhpcy5mb290ZXJXcmFwID0gdGhpcy5mb290ZXJXcmFwIHx8IGZpbmRFbGVtZW50KHRoaXMuZWxlbWVudCwgbWF0Y2hlc0NsYXNzZXMoRk9PVEVSX0NMQVNTKSk7XG4gICAgICAgIHJldHVybiBmaW5kRWxlbWVudCh0aGlzLmZvb3RlcldyYXAsIG1hdGNoZXNDbGFzc2VzKGAke0ZPT1RFUl9DTEFTU30tJHtzdWZmaXgobG9ja2VkKX1gKSk7XG4gICAgfVxuICAgIHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gZmluZEVsZW1lbnQodGhpcy5lbGVtZW50LCBtYXRjaGVzVGFibGUpO1xuICAgIH1cbn1cblxuY29uc3QgRklSU1RfQ0xBU1MgPSAnay1maXJzdCc7XG5jb25zdCBJTlBVVFMgPSBbJ2lucHV0JywgJ3NlbGVjdCcsICd0ZXh0YXJlYScsICdvcHRpb24nXTtcbi8qKiBAaGlkZGVuICovXG5jb25zdCBjbG9uZU5vZGUgPSAobm9kZSkgPT4ge1xuICAgIGNvbnN0IGNsb25lID0gbm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgIGlmIChub2RlLl9rZW5kb0V4cG9ydFZpc3VhbCkge1xuICAgICAgICBjbG9uZS5fa2VuZG9FeHBvcnRWaXN1YWwgPSBub2RlLl9rZW5kb0V4cG9ydFZpc3VhbDtcbiAgICB9XG4gICAgaWYgKElOUFVUUy5pbmRleE9mKFN0cmluZyhub2RlLm5vZGVOYW1lKS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7XG4gICAgICAgIGNsb25lLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpO1xuICAgICAgICBjbG9uZS5yZW1vdmVBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgICAgICBjbG9uZS52YWx1ZSA9IG5vZGUudmFsdWU7XG4gICAgICAgIGNsb25lLmNoZWNrZWQgPSBub2RlLmNoZWNrZWQ7XG4gICAgICAgIGNsb25lLnNlbGVjdGVkID0gbm9kZS5zZWxlY3RlZDtcbiAgICB9XG4gICAgbGV0IGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBjbG9uZS5hcHBlbmRDaGlsZChjbG9uZU5vZGUoY2hpbGQpKTtcbiAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xufTtcbmNvbnN0IGFwcGVuZE5vZGVzID0gKGVsZW1lbnQsIG5vZGVzKSA9PiB7XG4gICAgY29uc3QgbGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjbG9uZU5vZGUobm9kZXNbaWR4XSkpO1xuICAgIH1cbn07XG5jb25zdCB3cmFwVGFibGUgPSAodGFibGUpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgd3JhcHBlci5jbGFzc05hbWUgPSAnay13aWRnZXQgay1ncmlkJztcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRhYmxlKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbn07XG5jb25zdCBjcmVhdGVUYWJsZUVsZW1lbnQgPSAoc291cmNlcykgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUNvdW50ID0gc291cmNlcy5sZW5ndGg7XG4gICAgY29uc3QgZWxlbWVudCA9IGNsb25lTm9kZShzb3VyY2VzWzBdKTtcbiAgICBjb25zdCByb3dzQ291bnQgPSBlbGVtZW50LnJvd3MubGVuZ3RoO1xuICAgIGlmIChzb3VyY2VDb3VudCA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgcm93SWR4ID0gMDsgcm93SWR4IDwgcm93c0NvdW50OyByb3dJZHgrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgc291cmNlSWR4ID0gMTsgc291cmNlSWR4IDwgc291cmNlQ291bnQ7IHNvdXJjZUlkeCsrKSB7XG4gICAgICAgICAgICAgICAgYXBwZW5kTm9kZXMoZWxlbWVudC5yb3dzW3Jvd0lkeF0sIHNvdXJjZXNbc291cmNlSWR4XS5yb3dzW3Jvd0lkeF0uY2VsbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xufTtcbmNvbnN0IHNldEZpcnN0Q2VsbENsYXNzID0gKGhlYWRlciwgaGVhZGVycykgPT4ge1xuICAgIGlmIChoZWFkZXJzLmxlbmd0aCA+IDEgJiYgaGVhZGVyLnJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKGxldCBpZHggPSAxOyBpZHggPCBoZWFkZXIucm93cy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdENlbGxJbmRleCA9IGhlYWRlcnNbMF0ucm93c1tpZHhdLmNlbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBoZWFkZXIucm93c1tpZHhdLmNlbGxzW2ZpcnN0Q2VsbEluZGV4XTtcbiAgICAgICAgICAgIGlmIChTdHJpbmcoY2VsbC5jbGFzc05hbWUpLmluZGV4T2YoRklSU1RfQ0xBU1MpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNlbGwuY2xhc3NOYW1lICs9IGAgJHtGSVJTVF9DTEFTU31gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IGNyZWF0ZVRhYmxlID0gKGNvbEdyb3VwcywgaGVhZGVycywgYm9kaWVzLCBmb290ZXJzKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuICAgIGNvbnN0IGNvbEdyb3VwID0gY29sR3JvdXBzWzBdLmNsb25lTm9kZSh0cnVlKTtcbiAgICBmb3IgKGxldCBpZHggPSAxOyBpZHggPCBjb2xHcm91cHMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBhcHBlbmROb2Rlcyhjb2xHcm91cCwgY29sR3JvdXBzW2lkeF0ucXVlcnlTZWxlY3RvckFsbCgnY29sJykpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXIgPSBjcmVhdGVUYWJsZUVsZW1lbnQoaGVhZGVycyk7XG4gICAgY29uc3QgYm9keSA9IGNyZWF0ZVRhYmxlRWxlbWVudChib2RpZXMpO1xuICAgIGhlYWRlci5jbGFzc05hbWUgPSBIRUFERVJfQ0xBU1M7XG4gICAgc2V0Rmlyc3RDZWxsQ2xhc3MoaGVhZGVyLCBoZWFkZXJzKTtcbiAgICB0YWJsZS5hcHBlbmRDaGlsZChjb2xHcm91cCk7XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICB0YWJsZS5hcHBlbmRDaGlsZChib2R5KTtcbiAgICBpZiAoZm9vdGVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZm9vdGVyID0gY3JlYXRlVGFibGVFbGVtZW50KGZvb3RlcnMpO1xuICAgICAgICBmb290ZXIuY2xhc3NOYW1lID0gRk9PVEVSX0NMQVNTO1xuICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChmb290ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcFRhYmxlKHRhYmxlKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZXhwb3J0RWxlbWVudCA9ICh3cmFwcGVyKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBuZXcgR3JpZFF1ZXJ5KHdyYXBwZXIpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBxdWVyeS5jb250ZW50KCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb25zdCBjb2xHcm91cHMgPSBbY29udGVudC5xdWVyeVNlbGVjdG9yKCdjb2xncm91cCcpXTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IFtxdWVyeS5oZWFkZXIoKS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpXTtcbiAgICAgICAgY29uc3QgYm9kaWVzID0gW2NvbnRlbnQucXVlcnlTZWxlY3RvcigndGJvZHknKV07XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IHF1ZXJ5LmZvb3RlcigpO1xuICAgICAgICBjb25zdCBmb290ZXJzID0gW107XG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgIGZvb3RlcnMucHVzaChmb290ZXIucXVlcnlTZWxlY3RvcigndGZvb3QnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbG9ja2VkQ29udGVudCA9IHF1ZXJ5LmNvbnRlbnQodHJ1ZSk7XG4gICAgICAgIGlmIChsb2NrZWRDb250ZW50KSB7XG4gICAgICAgICAgICBjb2xHcm91cHMudW5zaGlmdChsb2NrZWRDb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ2NvbGdyb3VwJykpO1xuICAgICAgICAgICAgaGVhZGVycy51bnNoaWZ0KHF1ZXJ5LmhlYWRlcih0cnVlKS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpKTtcbiAgICAgICAgICAgIGJvZGllcy51bnNoaWZ0KGxvY2tlZENvbnRlbnQucXVlcnlTZWxlY3RvcigndGJvZHknKSk7XG4gICAgICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICAgICAgZm9vdGVycy51bnNoaWZ0KHF1ZXJ5LmZvb3Rlcih0cnVlKS5xdWVyeVNlbGVjdG9yKCd0Zm9vdCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBjcmVhdGVUYWJsZShjb2xHcm91cHMsIGhlYWRlcnMsIGJvZGllcywgZm9vdGVycyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSB3cmFwVGFibGUocXVlcnkudGFibGUoKS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgY3JlYXRlRWxlbWVudCQxID0gKHRhZ05hbWUsIGNsYXNzTmFtZSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xufTtcbmNvbnN0IGNyZWF0ZURpdiA9IChjbGFzc05hbWUpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudCQxKCdkaXYnLCBjbGFzc05hbWUpO1xufTtcbi8qKlxuICogQ29uZmlndXJlcyB0aGUgc2V0dGluZ3MgZm9yIHRoZSBleHBvcnQgb2YgR3JpZCBpbiBQREYgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwZGZleHBvcnRfZ3JpZCAlfSkpLlxuICovXG5jbGFzcyBQREZDb21wb25lbnQgZXh0ZW5kcyBQREZFeHBvcnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBkZlNlcnZpY2UsIHN1c3BlbmRTZXJ2aWNlLCBuZ1pvbmUsIGVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgICAgIHRoaXMucGRmU2VydmljZSA9IHBkZlNlcnZpY2U7XG4gICAgICAgIHRoaXMuc3VzcGVuZFNlcnZpY2UgPSBzdXNwZW5kU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5zYXZlU3Vic2NyaXB0aW9uID0gcGRmU2VydmljZS5zYXZlUERGLnN1YnNjcmliZSh0aGlzLnNhdmVQREYuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZHJhd1N1YnNjcmlwdGlvbiA9IHBkZlNlcnZpY2UuZHJhd1BERi5zdWJzY3JpYmUodGhpcy5kcmF3UERGLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlc2V0ID0gdGhpcy5yZXNldC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRyYXcgPSB0aGlzLmRyYXcuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRyYXdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgICBzYXZlUERGKGNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmNyZWF0ZVBERihjb21wb25lbnQsIHRoaXMuZHJhdyk7XG4gICAgfVxuICAgIGRyYXdQREYoeyBjb21wb25lbnQsIHByb21pc2UgfSkge1xuICAgICAgICB0aGlzLmNyZWF0ZVBERihjb21wb25lbnQsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRXhwb3J0R3JvdXAocHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVQREYoY29tcG9uZW50LCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IGNvbXBvbmVudC5wYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgdG90YWwgPSBjb21wb25lbnQudmlldy50b3RhbDtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy50b0FycmF5KCk7XG4gICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbENvbHVtbnMgPSBjb21wb25lbnQuY29sdW1ucy50b0FycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMuc3VzcGVuZFNlcnZpY2Uuc2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdFByb2dyZXNzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQWxsUGFnZXMgPSB0aGlzLmFsbFBhZ2VzICYmIHBhZ2VTaXplIDwgdG90YWw7XG4gICAgICAgIGlmICh0aGlzLnJlbmRlckFsbFBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNraXAgPSBjb21wb25lbnQuc2tpcDtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZSgwLCB0b3RhbCwgY2FsbGJhY2ssIGNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbHVtbnMubGVuZ3RoIHx8IGNvbXBvbmVudC52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb2x1bW5zKGNvbHVtbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdFByb2dyZXNzKCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IHRoaXMuY29tcG9uZW50LndyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzID0gY3JlYXRlRGl2KCdrLWxvYWRpbmctcGRmLW1hc2snKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheSA9IGNsb25lTm9kZSh3cmFwcGVyRWxlbWVudCk7XG4gICAgICAgIHByb2dyZXNzLmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgICAgICBwcm9ncmVzcy5hcHBlbmRDaGlsZChjcmVhdGVEaXYoJ2stbG9hZGluZy1jb2xvcicpKTtcbiAgICAgICAgcHJvZ3Jlc3MuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCQxKCdzcGFuJywgJ2staS1sb2FkaW5nIGstaWNvbicpKTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhlaWdodCA9IHdyYXBwZXJFbGVtZW50LnN0eWxlLmhlaWdodDtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE92ZXJmbG93ID0gd3JhcHBlckVsZW1lbnQuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLmhlaWdodCA9IHdyYXBwZXJFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCc7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LmFwcGVuZENoaWxkKHByb2dyZXNzKTtcbiAgICAgICAgdGhpcy5hcHBseVNjcm9sbChvdmVybGF5KTtcbiAgICB9XG4gICAgYXBwbHlTY3JvbGwob3ZlcmxheSkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBHcmlkUXVlcnkodGhpcy5jb21wb25lbnQud3JhcHBlci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHF1ZXJ5LmNvbnRlbnQoKTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlRdWVyeSA9IG5ldyBHcmlkUXVlcnkob3ZlcmxheSk7XG4gICAgICAgICAgICBjb25zdCBvdmVybGF5Q29udGVudCA9IG92ZXJsYXlRdWVyeS5jb250ZW50KCk7XG4gICAgICAgICAgICBvdmVybGF5Q29udGVudC5zY3JvbGxUb3AgPSBjb250ZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIG92ZXJsYXlDb250ZW50LnNjcm9sbExlZnQgPSBjb250ZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICBvdmVybGF5UXVlcnkuaGVhZGVyKCkuc2Nyb2xsTGVmdCA9IHF1ZXJ5LmhlYWRlcigpLnNjcm9sbExlZnQ7XG4gICAgICAgICAgICBjb25zdCBmb290ZXIgPSBxdWVyeS5mb290ZXIoKTtcbiAgICAgICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICAgICAgICBvdmVybGF5UXVlcnkuZm9vdGVyKCkuc2Nyb2xsTGVmdCA9IGZvb3Rlci5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbG9ja2VkQ29udGVudCA9IHF1ZXJ5LmNvbnRlbnQodHJ1ZSk7XG4gICAgICAgICAgICBpZiAobG9ja2VkQ29udGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlMb2NrZWRDb250ZW50ID0gb3ZlcmxheVF1ZXJ5LmNvbnRlbnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgb3ZlcmxheUxvY2tlZENvbnRlbnQuc2Nyb2xsVG9wID0gbG9ja2VkQ29udGVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgb3ZlcmxheUxvY2tlZENvbnRlbnQuc2Nyb2xsTGVmdCA9IGxvY2tlZENvbnRlbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBkcmF3KCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUV4cG9ydEVsZW1lbnQoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZShlbGVtZW50LCB0aGlzLmZpbGVOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZUV4cG9ydEdyb3VwKHByb21pc2UpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVFeHBvcnRFbGVtZW50KChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydEVsZW1lbnQoZWxlbWVudCkudGhlbihncm91cCA9PiBwcm9taXNlLnJlc29sdmUoZ3JvdXApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZUV4cG9ydEVsZW1lbnQoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXIgPSBjcmVhdGVEaXYoJ2stZ3JpZC1wZGYtZXhwb3J0LWVsZW1lbnQnKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBleHBvcnRFbGVtZW50KHRoaXMuY29tcG9uZW50LndyYXBwZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICBjYWxsYmFjayhlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyYXdPcHRpb25zKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc3VwZXIuZHJhd09wdGlvbnMoKTtcbiAgICAgICAgb3B0aW9ucy5fZGVzdHJ1Y3RpdmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgY2xlYW51cCgpIHtcbiAgICAgICAgc3VwZXIuY2xlYW51cCgpO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2x1bW5zID0gdGhpcy5vcmlnaW5hbENvbHVtbnM7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5vcmlnaW5hbENvbHVtbnM7XG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJBbGxQYWdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZSh0aGlzLnNraXAsIHRoaXMucGFnZVNpemUsIHRoaXMucmVzZXQsIG9yaWdpbmFsQ29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcmlnaW5hbENvbHVtbnMgfHwgdGhpcy5jb21wb25lbnQudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbHVtbnMob3JpZ2luYWxDb2x1bW5zLCB0aGlzLnJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUNvbnRhaW5lcigpO1xuICAgIH1cbiAgICByZW1vdmVDb250YWluZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlUGFnZShza2lwLCBfdGFrZSwgY2FsbGJhY2ssIGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGRmU2VydmljZS5kYXRhQ2hhbmdlZC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoKSB8fCB0aGlzLmNvbXBvbmVudC52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUNvbHVtbnMoY29sdW1ucywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN0YWJsZShjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnlQYWdlQ2hhbmdlKCdwZGYnLCB7IHNraXA6IHNraXAsIHRha2U6IF90YWtlIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2hhbmdlQ29sdW1ucyhjb2x1bW5zLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0YWJsZShjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LmNvbHVtbnMucmVzZXQoY29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5zdXNwZW5kU2VydmljZS5zY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJBbGxQYWdlcyA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHdyYXBwZXJFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvZ3Jlc3MpO1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLm9yaWdpbmFsSGVpZ2h0O1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IHRoaXMub3JpZ2luYWxPdmVyZmxvdztcbiAgICAgICAgZGVsZXRlIHRoaXMucHJvZ3Jlc3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNvbXBvbmVudDtcbiAgICB9XG4gICAgb25TdGFibGUoY2FsbGJhY2spIHtcbiAgICAgICAgLy8gbm90IHN1cmUgaWYgaXQgaXMgYW4gYWN0dWFsIHNjZW5hcmlvLiBvY2N1cnMgaW4gdGhlIHRlc3RzLlxuICAgICAgICAvLyBvblN0YWJsZSBpcyB0cmlnZ2VyZWQgaW4gdGhlIHNhbWUgcGFzcyB3aXRob3V0IHRoZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgICAvLyB0aHVzLCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbmdlcyBhcmUgYXBwbGllZCB3aXRob3V0IHRoZSB0aW1lb3V0LlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNhbGxiYWNrKTtcbiAgICAgICAgfSwgMCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6IGFsaWduXG4gICAgfVxufVxuUERGQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLXBkZicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6ICcnXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBERkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFBERlNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFN1c3BlbmRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfVxuXTtcblBERkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhbGxQYWdlczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uQmFzZSQxLF0gfV0sXG4gICAgbWFyZ2luQ29tcG9uZW50OiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtQREZNYXJnaW5Db21wb25lbnQkMSxdIH1dLFxuICAgIHBhZ2VUZW1wbGF0ZURpcmVjdGl2ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbUERGVGVtcGxhdGVEaXJlY3RpdmUkMSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBleHBvcnQtdG8tUERGYCBjb21tYW5kIG9mIHRoZSBHcmlkLlxuICogWW91IGNhbiBhcHBseSB0aGlzIGRpcmVjdGl2ZSB0byBhbnkgYGJ1dHRvbmAgZWxlbWVudCBpbnNpZGUgYVxuICogW2BUb29sYmFyVGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbW1hbmRjb2x1bW5jb21wb25lbnQgJX0pLlxuICogV2hlbiB0aGUgdXNlciBjbGlja3MgYSBidXR0b24gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRpcmVjdGl2ZSwgdGhlXG4gKiBbYHBkZkV4cG9ydGBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2MtcGRmZXhwb3J0KSBldmVudFxuICogZmlyZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwZGZleHBvcnRfZ3JpZCAlfSkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQ+XG4gKiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGU+XG4gKiAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFBERkNvbW1hbmQ+RXhwb3J0IHRvIFBERjwvYnV0dG9uPlxuICogICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8a2VuZG8tZ3JpZC1wZGYgZmlsZU5hbWU9XCJHcmlkLnBkZlwiPlxuICogICAgICA8L2tlbmRvLWdyaWQtcGRmPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKi9cbmNsYXNzIFBERkNvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKHBkZlNlcnZpY2UsIGVsZW1lbnQsIHJlbmRlcmVyLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UgPSBwZGZTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGRmU2VydmljZS5leHBvcnRDbGljay5lbWl0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcGRmQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblBERkNvbW1hbmREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRQREZDb21tYW5kXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUERGQ29tbWFuZERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFBERlNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5QREZDb21tYW5kRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIG9uQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydjbGljaycsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBwZGZDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLXBkZicsXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzJDUgPSBbXG4gICAgUERGQ29tcG9uZW50LFxuICAgIFBERk1hcmdpbkNvbXBvbmVudCQxLFxuICAgIFBERkNvbW1hbmREaXJlY3RpdmUsXG4gICAgUERGVGVtcGxhdGVEaXJlY3RpdmUkMVxuXTtcbmNvbnN0IGRlY2xhcmF0aW9ucyQxID0gW1xuICAgIFBERkNvbXBvbmVudCxcbiAgICBQREZNYXJnaW5Db21wb25lbnQkMSxcbiAgICBQREZDb21tYW5kRGlyZWN0aXZlLFxuICAgIFBERlRlbXBsYXRlRGlyZWN0aXZlJDFcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBHcmlkIFBERiBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgR3JpZCBhbmQgUERGIG1vZHVsZXNcbiAqIGltcG9ydCB7IEdyaWRNb2R1bGUsIFBERk1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBHcmlkTW9kdWxlLCBQREZNb2R1bGVdLCAvLyBpbXBvcnQgR3JpZCBhbmQgUERGIG1vZHVsZXNcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFBERk1vZHVsZSB7XG59XG5QREZNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9ucyQxXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzJDVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYGV4Y2VsRXhwb3J0YCBldmVudC5cbiAqL1xuY2xhc3MgRXhjZWxFeHBvcnRFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKHdvcmtib29rKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMud29ya2Jvb2sgPSB3b3JrYm9vaztcbiAgICB9XG59XG5cbi8qIHRzbGludDpkaXNhYmxlIG9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgZmV0Y2hDb21wb25lbnREYXRhID0gKGNvbXBvbmVudCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGNvbXBvbmVudC52aWV3Lm1hcChpdGVtID0+IGl0ZW0pLFxuICAgICAgICBncm91cDogY29tcG9uZW50Lmdyb3VwXG4gICAgfTtcbn07XG5jb25zdCB0b0V4Y2VsQ29sdW1uID0gKGNvbHVtbikgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgIGxvY2tlZDogQm9vbGVhbihjb2x1bW4ubG9ja2VkKSxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgICAgbGV2ZWw6IGNvbHVtbi5sZXZlbCxcbiAgICAgICAgaGlkZGVuOiAhY29sdW1uLmlzVmlzaWJsZSxcbiAgICAgICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogY29sdW1uLmdyb3VwSGVhZGVyVGVtcGxhdGUsXG4gICAgICAgIGdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGU6IGNvbHVtbi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlLFxuICAgICAgICBncm91cEZvb3RlclRlbXBsYXRlOiBjb2x1bW4uZ3JvdXBGb290ZXJUZW1wbGF0ZSxcbiAgICAgICAgZm9vdGVyVGVtcGxhdGU6IGNvbHVtbi5mb290ZXJUZW1wbGF0ZVxuICAgIH07XG59O1xuY29uc3QgdG9FeGNlbENvbHVtbnMgPSAoY29sdW1ucykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIHNvcnRDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRvRXhjZWxDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbkFycmF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleGNlbENvbHVtbiA9IHRvRXhjZWxDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgIGV4Y2VsQ29sdW1uLmNoaWxkcmVuID0gW2V4Y2VsQ29sdW1uXS5jb25jYXQodG9FeGNlbENvbHVtbnMoY29sdW1uLmNoaWxkcmVuQXJyYXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4Y2VsQ29sdW1uKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3QgY29tcG9uZW50Q29sdW1ucyA9IChjb21wb25lbnQpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gdG9FeGNlbENvbHVtbnMoY29tcG9uZW50LmNvbHVtbnMudG9BcnJheSgpKTtcbiAgICByZXR1cm4gb3JkZXJCeShjb2x1bW5zLCBbeyBmaWVsZDogJ2xvY2tlZCcsIGRpcjogJ2Rlc2MnIH1dKTtcbn07XG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgZXhwb3J0IG9mIEdyaWQgaW4gRXhjZWwgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBleGNlbGV4cG9ydF9ncmlkICV9KSkuXG4gKi9cbmNsYXNzIEV4Y2VsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihleGNlbFNlcnZpY2UsIGxvY2FsaXphdGlvbiwgem9uZSkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZmlsZSBuYW1lIG9mIHRoZSBleHBvcnRlZCBFeGNlbCBmaWxlLlxuICAgICAgICAgKiBAZGVmYXVsdCBcIkV4cG9ydC54bHN4XCJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnRXhwb3J0Lnhsc3gnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLnNhdmVTdWJzY3JpcHRpb24gPSBleGNlbFNlcnZpY2Uuc2F2ZVRvRXhjZWwuc3Vic2NyaWJlKHRoaXMuc2F2ZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzYXZlKGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBkYXRhID0gKHRoaXMuZmV0Y2hEYXRhIHx8IGZldGNoQ29tcG9uZW50RGF0YSkoY29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZXhwb3J0RGF0YSA9IChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRhdGFTdWJzY3JpcHRpb247XG4gICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEoY29tcG9uZW50LCByZXN1bHQpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIGRhdGEudGhlbihleHBvcnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gZGF0YS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShleHBvcnREYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGV4cG9ydERhdGEoZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZXhwb3J0RGF0YShjb21wb25lbnQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gd29ya2Jvb2tPcHRpb25zKHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucy5sZW5ndGggPyB0aGlzLmNvbHVtbnMgOiBjb21wb25lbnRDb2x1bW5zKGNvbXBvbmVudCksXG4gICAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YSxcbiAgICAgICAgICAgIGdyb3VwOiByZXN1bHQuZ3JvdXAsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLmZpbHRlcmFibGUsXG4gICAgICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgICAgICBkYXRlOiB0aGlzLmRhdGUsXG4gICAgICAgICAgICBwYWRkaW5nQ2VsbE9wdGlvbnM6IHRoaXMucGFkZGluZ0NlbGxPcHRpb25zLFxuICAgICAgICAgICAgaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zOiB0aGlzLmhlYWRlclBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgICAgIHJ0bDogdGhpcy5sb2NhbGl6YXRpb24ucnRsLFxuICAgICAgICAgICAgY29sbGFwc2libGU6IHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgRXhjZWxFeHBvcnRFdmVudChvcHRpb25zKTtcbiAgICAgICAgY29tcG9uZW50LmV4Y2VsRXhwb3J0LmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuc2F2ZUZpbGUob3B0aW9ucykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNhdmVGaWxlKG9wdGlvbnMpIHtcbiAgICAgICAgdG9EYXRhVVJMKG9wdGlvbnMpLnRoZW4oKGRhdGFVUkwpID0+IHtcbiAgICAgICAgICAgIHNhdmVBcyhkYXRhVVJMLCB0aGlzLmZpbGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VQcm94eTogdGhpcy5mb3JjZVByb3h5LFxuICAgICAgICAgICAgICAgIHByb3h5VVJMOiB0aGlzLnByb3h5VVJMXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuRXhjZWxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZXhjZWwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FeGNlbENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEV4Y2VsU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5FeGNlbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWxlTmFtZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3JlYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9yY2VQcm94eTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcHJveHlVUkw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZldGNoRGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFkZGluZ0NlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbGxhcHNpYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDb2x1bW5CYXNlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0sXSB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgZXhwb3J0LXRvLUV4Y2VsYCBjb21tYW5kIG9mIHRoZSBHcmlkLiBZb3UgY2FuIGFwcGx5IHRoaXNcbiAqIGRpcmVjdGl2ZSB0byBhbnkgYGJ1dHRvbmAgZWxlbWVudCBpbnNpZGUgYVxuICogW2BUb29sYmFyVGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbW1hbmRjb2x1bW5jb21wb25lbnQgJX0pLlxuICogV2hlbiB0aGUgdXNlciBjbGlja3MgYSBidXR0b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmUsIHRoZVxuICogW2BleGNlbEV4cG9ydGBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2MtZXhjZWxleHBvcnQpIGV2ZW50XG4gKiBmaXJlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGV4Y2VsZXhwb3J0X2dyaWQgJX0pKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICogICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRFeGNlbENvbW1hbmQ+RXhwb3J0IHRvIFBERjwvYnV0dG9uPlxuICogICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkdyaWQueGxzeFwiPlxuICogICAgICA8L2tlbmRvLWdyaWQtZXhjZWw+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqL1xuY2xhc3MgRXhjZWxDb21tYW5kRGlyZWN0aXZlIGV4dGVuZHMgQnV0dG9uIHtcbiAgICBjb25zdHJ1Y3RvcihleGNlbFNlcnZpY2UsIGVsZW1lbnQsIHJlbmRlcmVyLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmV4Y2VsU2VydmljZSA9IGV4Y2VsU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmV4Y2VsU2VydmljZS5leHBvcnRDbGljay5lbWl0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZXhjZWxDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuRXhjZWxDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRXhjZWxDb21tYW5kXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRXhjZWxDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRXhjZWxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuRXhjZWxDb21tYW5kRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIG9uQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydjbGljaycsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBleGNlbENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtZXhjZWwnLF0gfV1cbn07XG5cbmNvbnN0IGRlY2xhcmF0aW9ucyQyID0gW0V4Y2VsQ29tcG9uZW50LCBFeGNlbENvbW1hbmREaXJlY3RpdmVdO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRXhjZWwgY29tcG9uZW50IG9mIHRoZSBHcmlkLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIEdyaWQgYW5kIEV4Y2VsIG1vZHVsZXNcbiAqIGltcG9ydCB7IEdyaWRNb2R1bGUsIEV4Y2VsTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIEdyaWRNb2R1bGUsIEV4Y2VsTW9kdWxlXSwgLy8gaW1wb3J0IEdyaWQgYW5kIEV4Y2VsIG1vZHVsZXNcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEV4Y2VsTW9kdWxlIHtcbn1cbkV4Y2VsTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtkZWNsYXJhdGlvbnMkMl0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2RlY2xhcmF0aW9ucyQyLCBFeGNlbEV4cG9ydE1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgeyBDb2x1bW5DaG9vc2VyQ29tcG9uZW50LCBDb2x1bW5MaXN0Q29tcG9uZW50LCBDb2x1bW5NZW51Q2hvb3NlckNvbXBvbmVudCwgQ29sdW1uTWVudUZpbHRlckNvbXBvbmVudCwgQ29sdW1uTWVudUl0ZW1CYXNlLCBDb2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSwgQ29sdW1uTWVudUl0ZW1Db21wb25lbnQsIENvbHVtbk1lbnVMb2NrQ29tcG9uZW50LCBDb2x1bW5NZW51U29ydENvbXBvbmVudCwgQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLCBDb2x1bW5NZW51TW9kdWxlLCBDb2x1bW5NZW51U2VydmljZSwgQ29sdW1uSGFuZGxlRGlyZWN0aXZlLCBDb2x1bW5SZXNpemluZ1NlcnZpY2UsIFRhYmxlRGlyZWN0aXZlLCBDb2x1bW5JbmZvU2VydmljZSwgRG9tRXZlbnRzU2VydmljZSwgRXhwYW5kU3RhdGVTZXJ2aWNlLCBJZFNlcnZpY2UsIFByZXZlbnRhYmxlRXZlbnQsIFNvcnRTZXJ2aWNlLCBDaGFuZ2VOb3RpZmljYXRpb25TZXJ2aWNlLCBDb2x1bW5SZW9yZGVyU2VydmljZSwgRHJhZ0FuZERyb3BNb2R1bGUsIERyYWdBbmREcm9wU2VydmljZSwgRHJhZ0hpbnRTZXJ2aWNlLCBEcmFnZ2FibGVDb2x1bW5EaXJlY3RpdmUsIERyb3BDdWVTZXJ2aWNlLCBEcm9wVGFyZ2V0RGlyZWN0aXZlLCBFZGl0aW5nRGlyZWN0aXZlQmFzZSwgUm93RWRpdGluZ0RpcmVjdGl2ZUJhc2UsIEFkZENvbW1hbmREaXJlY3RpdmUsIENhbmNlbENvbW1hbmREaXJlY3RpdmUsIEVkaXRDb21tYW5kRGlyZWN0aXZlLCBFZGl0U2VydmljZSBhcyBFZGl0U2VydmljZSQxLCBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSwgUmVtb3ZlQ29tbWFuZERpcmVjdGl2ZSwgU2F2ZUNvbW1hbmREaXJlY3RpdmUsIEV4Y2VsQ29tbWFuZERpcmVjdGl2ZSwgQm9vbGVhbkZpbHRlckNvbXBvbmVudCwgQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQsIEZpbHRlckNlbGxIb3N0RGlyZWN0aXZlLCBGaWx0ZXJDZWxsT3BlcmF0b3JzQ29tcG9uZW50LCBGaWx0ZXJDZWxsV3JhcHBlckNvbXBvbmVudCwgRGF0ZUZpbHRlckNvbXBvbmVudCwgRmlsdGVySG9zdERpcmVjdGl2ZSwgRmlsdGVySW5wdXRXcmFwcGVyQ29tcG9uZW50LCBGaWx0ZXJJbnB1dERpcmVjdGl2ZSwgRmlsdGVyUm93Q29tcG9uZW50LCBEYXRlRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LCBGaWx0ZXJNZW51Q29udGFpbmVyQ29tcG9uZW50LCBGaWx0ZXJNZW51SG9zdERpcmVjdGl2ZSwgRmlsdGVyTWVudUlucHV0V3JhcHBlckNvbXBvbmVudCwgRmlsdGVyTWVudUNvbXBvbmVudCwgTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudCwgU3RyaW5nRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LCBOdW1lcmljRmlsdGVyQ29tcG9uZW50LCBGaWx0ZXJPcGVyYXRvckJhc2UsIFNoYXJlZEZpbHRlck1vZHVsZSwgU3RyaW5nRmlsdGVyQ29tcG9uZW50LCBHcm91cEhlYWRlckNvbXBvbmVudCwgR3JvdXBJbmRpY2F0b3JDb21wb25lbnQsIEdyb3VwSW5mb1NlcnZpY2UsIEdyb3VwUGFuZWxDb21wb25lbnQsIEdyb3Vwc1NlcnZpY2UsIEJyb3dzZXJTdXBwb3J0U2VydmljZSwgUmVzaXplU2VydmljZSwgUmVzcG9uc2l2ZVNlcnZpY2UsIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBNZXNzYWdlcywgRm9jdXNHcm91cCwgRm9jdXNSb290LCBMb2dpY2FsQ2VsbERpcmVjdGl2ZSwgTG9naWNhbFJvd0RpcmVjdGl2ZSwgTmF2aWdhdGlvblNlcnZpY2UsIFBhZ2VyQ29udGV4dFNlcnZpY2UsIFBhZ2VyRWxlbWVudENvbXBvbmVudCwgUERGQ29tbWFuZERpcmVjdGl2ZSwgUERGVGVtcGxhdGVEaXJlY3RpdmUkMSBhcyBQREZUZW1wbGF0ZURpcmVjdGl2ZSwgQ2VsbENvbXBvbmVudCwgQ0VMTF9DT05URVhULCBFTVBUWV9DRUxMX0NPTlRFWFQsIEZpZWxkQWNjZXNzb3JQaXBlLCBEZXRhaWxzU2VydmljZSwgREVGQVVMVF9TQ1JPTExFUl9GQUNUT1JZLCBTQ1JPTExFUl9GQUNUT1JZX1RPS0VOLCBTY3JvbGxSZXF1ZXN0U2VydmljZSwgU2Nyb2xsU3luY1NlcnZpY2UsIFNjcm9sbGVyU2VydmljZSwgQ2VsbFNlbGVjdGlvblNlcnZpY2UsIEdyaWRNYXJxdWVlRGlyZWN0aXZlLCBTZWxlY3RBbGxDaGVja2JveERpcmVjdGl2ZSwgU2VsZWN0aW9uQ2hlY2tib3hEaXJlY3RpdmUsIFNlbGVjdGlvbiwgU2VsZWN0aW9uU2VydmljZSwgR3JpZE1vZHVsZSwgU2hhcmVkTW9kdWxlLCBHcmlkQ29tcG9uZW50LCBDb2x1bW5CYXNlJDEgYXMgQ29sdW1uQmFzZSwgQ29sdW1uQ29tcG9uZW50LCBDb21tYW5kQ29sdW1uQ29tcG9uZW50LCBTcGFuQ29sdW1uQ29tcG9uZW50LCBDb2x1bW5Hcm91cENvbXBvbmVudCwgQ2hlY2tib3hDb2x1bW5Db21wb25lbnQsIFRvb2xiYXJDb21wb25lbnQsIFRvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZSwgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIFBhZ2VyVGVtcGxhdGVEaXJlY3RpdmUsIEV4cGFuZERldGFpbHNEaXJlY3RpdmUsIERldGFpbFRlbXBsYXRlRGlyZWN0aXZlLCBEZXRhaWxFeHBhbmRFdmVudCwgRGV0YWlsQ29sbGFwc2VFdmVudCwgR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZURpcmVjdGl2ZSwgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSwgUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlLCBUZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUsIE5vUmVjb3Jkc1RlbXBsYXRlRGlyZWN0aXZlLCBEYXRhQmluZGluZ0RpcmVjdGl2ZSwgU2VsZWN0aW9uRGlyZWN0aXZlLCBGaWx0ZXJTZXJ2aWNlLCBGaWx0ZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIEZpbHRlckNlbGxDb21wb25lbnQsIFN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQsIERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50LCBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCwgRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLCBOdW1lcmljRmlsdGVyTWVudUNvbXBvbmVudCwgU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudCwgRGF0ZUZpbHRlck1lbnVDb21wb25lbnQsIEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50LCBCZWZvcmVFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBCZWZvcmVGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgQWZ0ZXJFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBBZnRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBDb250YWluc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBEb2VzTm90Q29udGFpbkZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBFbmRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBJc0VtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIElzTm90RW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgSXNOb3ROdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIElzTnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBOb3RFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBTdGFydHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIE51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LCBBdXRvQ29tcGxldGVGaWx0ZXJDZWxsQ29tcG9uZW50LCBHcmVhdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIEdyZWF0ZXJPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgTGVzc09yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBMZXNzRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIFBhZ2VyUHJldkJ1dHRvbnNDb21wb25lbnQsIFBhZ2VyTmV4dEJ1dHRvbnNDb21wb25lbnQsIFBhZ2VyTnVtZXJpY0J1dHRvbnNDb21wb25lbnQsIFBhZ2VySW5wdXRDb21wb25lbnQsIFBhZ2VySW5mb0NvbXBvbmVudCwgUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQsIFJvd0ZpbHRlck1vZHVsZSwgRmlsdGVyTWVudU1vZHVsZSwgQm9keU1vZHVsZSwgR3JvdXBNb2R1bGUsIEhlYWRlck1vZHVsZSwgRm9vdGVyTW9kdWxlLCBQYWdlck1vZHVsZSwgVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLCBSZWFjdGl2ZUVkaXRpbmdEaXJlY3RpdmUsIEluQ2VsbEVkaXRpbmdEaXJlY3RpdmUsIEVkaXRUZW1wbGF0ZURpcmVjdGl2ZSwgQ29sR3JvdXBDb21wb25lbnQsIEhlYWRlckNvbXBvbmVudCwgTGlzdENvbXBvbmVudCwgRm9vdGVyQ29tcG9uZW50LCBUYWJsZUJvZHlDb21wb25lbnQsIFBhZ2VyQ29tcG9uZW50LCBDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgTG9hZGluZ0NvbXBvbmVudCwgUERGTW9kdWxlLCBQREZDb21wb25lbnQsIFBERk1hcmdpbkNvbXBvbmVudCQxIGFzIFBERk1hcmdpbkNvbXBvbmVudCwgUERGU2VydmljZSwgRXhjZWxNb2R1bGUsIEV4Y2VsQ29tcG9uZW50LCBFeGNlbFNlcnZpY2UsIEV4Y2VsRXhwb3J0RXZlbnQsIENlbGxDbG9zZUV2ZW50LCBTdXNwZW5kU2VydmljZSwgR3JvdXBCaW5kaW5nRGlyZWN0aXZlLCBzbGljZSwgY291bnQsIFNraXAsIENvbHVtblJlb3JkZXJFdmVudCwgRm9jdXNhYmxlRGlyZWN0aXZlLCBDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlRXZlbnQsIENvbHVtbk1lbnVDb21wb25lbnQsIFNpbmdsZVBvcHVwU2VydmljZSwgUG9wdXBDbG9zZUV2ZW50IH07XG4iXX0=","import { empty } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nexport var NotificationKind;\n(function (NotificationKind) {\n NotificationKind[\"NEXT\"] = \"N\";\n NotificationKind[\"ERROR\"] = \"E\";\n NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind || (NotificationKind = {}));\nexport class Notification {\n constructor(kind, value, error) {\n this.kind = kind;\n this.value = value;\n this.error = error;\n this.hasValue = kind === 'N';\n }\n observe(observer) {\n switch (this.kind) {\n case 'N':\n return observer.next && observer.next(this.value);\n case 'E':\n return observer.error && observer.error(this.error);\n case 'C':\n return observer.complete && observer.complete();\n }\n }\n do(next, error, complete) {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return next && next(this.value);\n case 'E':\n return error && error(this.error);\n case 'C':\n return complete && complete();\n }\n }\n accept(nextOrObserver, error, complete) {\n if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n return this.observe(nextOrObserver);\n }\n else {\n return this.do(nextOrObserver, error, complete);\n }\n }\n toObservable() {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return of(this.value);\n case 'E':\n return throwError(this.error);\n case 'C':\n return empty();\n }\n throw new Error('unexpected notification kind value');\n }\n static createNext(value) {\n if (typeof value !== 'undefined') {\n return new Notification('N', value);\n }\n return Notification.undefinedValueNotification;\n }\n static createError(err) {\n return new Notification('E', undefined, err);\n }\n static createComplete() {\n return Notification.completeNotification;\n }\n}\nNotification.completeNotification = new Notification('C');\nNotification.undefinedValueNotification = new Notification('N', undefined);\n//# sourceMappingURL=Notification.js.map","import { Directive, Input, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, NgModule } from '@angular/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { MatCommonModule } from '@angular/material/core';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Content of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\n\nconst _c0 = [\"*\", [[\"mat-card-footer\"]]];\nconst _c1 = [\"*\", \"mat-card-footer\"];\nconst _c2 = [[[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], [[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], \"*\"];\nconst _c3 = [\"[mat-card-avatar], [matCardAvatar]\", \"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"*\"];\nconst _c4 = [[[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], [[\"img\"]], \"*\"];\nconst _c5 = [\"mat-card-title, mat-card-subtitle,\\n [mat-card-title], [mat-card-subtitle],\\n [matCardTitle], [matCardSubtitle]\", \"img\", \"*\"];\nclass MatCardContent {\n}\nMatCardContent.ɵfac = function MatCardContent_Factory(t) { return new (t || MatCardContent)(); };\nMatCardContent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardContent, selectors: [[\"mat-card-content\"], [\"\", \"mat-card-content\", \"\"], [\"\", \"matCardContent\", \"\"]], hostAttrs: [1, \"mat-card-content\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardContent, [{\n type: Directive,\n args: [{\n selector: 'mat-card-content, [mat-card-content], [matCardContent]',\n host: { 'class': 'mat-card-content' }\n }]\n }], null, null); })();\n/**\n * Title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardTitle {\n}\nMatCardTitle.ɵfac = function MatCardTitle_Factory(t) { return new (t || MatCardTitle)(); };\nMatCardTitle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardTitle, selectors: [[\"mat-card-title\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"matCardTitle\", \"\"]], hostAttrs: [1, \"mat-card-title\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardTitle, [{\n type: Directive,\n args: [{\n selector: `mat-card-title, [mat-card-title], [matCardTitle]`,\n host: {\n 'class': 'mat-card-title'\n }\n }]\n }], null, null); })();\n/**\n * Sub-title of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardSubtitle {\n}\nMatCardSubtitle.ɵfac = function MatCardSubtitle_Factory(t) { return new (t || MatCardSubtitle)(); };\nMatCardSubtitle.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardSubtitle, selectors: [[\"mat-card-subtitle\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], hostAttrs: [1, \"mat-card-subtitle\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardSubtitle, [{\n type: Directive,\n args: [{\n selector: `mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]`,\n host: {\n 'class': 'mat-card-subtitle'\n }\n }]\n }], null, null); })();\n/**\n * Action section of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardActions {\n constructor() {\n /** Position of the actions inside the card. */\n this.align = 'start';\n }\n}\nMatCardActions.ɵfac = function MatCardActions_Factory(t) { return new (t || MatCardActions)(); };\nMatCardActions.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardActions, selectors: [[\"mat-card-actions\"]], hostAttrs: [1, \"mat-card-actions\"], hostVars: 2, hostBindings: function MatCardActions_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-card-actions-align-end\", ctx.align === \"end\");\n } }, inputs: { align: \"align\" }, exportAs: [\"matCardActions\"] });\nMatCardActions.propDecorators = {\n align: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardActions, [{\n type: Directive,\n args: [{\n selector: 'mat-card-actions',\n exportAs: 'matCardActions',\n host: {\n 'class': 'mat-card-actions',\n '[class.mat-card-actions-align-end]': 'align === \"end\"'\n }\n }]\n }], function () { return []; }, { align: [{\n type: Input\n }] }); })();\n/**\n * Footer of a card, needed as it's used as a selector in the API.\n * @docs-private\n */\nclass MatCardFooter {\n}\nMatCardFooter.ɵfac = function MatCardFooter_Factory(t) { return new (t || MatCardFooter)(); };\nMatCardFooter.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardFooter, selectors: [[\"mat-card-footer\"]], hostAttrs: [1, \"mat-card-footer\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardFooter, [{\n type: Directive,\n args: [{\n selector: 'mat-card-footer',\n host: { 'class': 'mat-card-footer' }\n }]\n }], null, null); })();\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardImage {\n}\nMatCardImage.ɵfac = function MatCardImage_Factory(t) { return new (t || MatCardImage)(); };\nMatCardImage.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardImage, selectors: [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"]], hostAttrs: [1, \"mat-card-image\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-image], [matCardImage]',\n host: { 'class': 'mat-card-image' }\n }]\n }], null, null); })();\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardSmImage {\n}\nMatCardSmImage.ɵfac = function MatCardSmImage_Factory(t) { return new (t || MatCardSmImage)(); };\nMatCardSmImage.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardSmImage, selectors: [[\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"]], hostAttrs: [1, \"mat-card-sm-image\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardSmImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-sm-image], [matCardImageSmall]',\n host: { 'class': 'mat-card-sm-image' }\n }]\n }], null, null); })();\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardMdImage {\n}\nMatCardMdImage.ɵfac = function MatCardMdImage_Factory(t) { return new (t || MatCardMdImage)(); };\nMatCardMdImage.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardMdImage, selectors: [[\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"]], hostAttrs: [1, \"mat-card-md-image\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardMdImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-md-image], [matCardImageMedium]',\n host: { 'class': 'mat-card-md-image' }\n }]\n }], null, null); })();\n/**\n * Image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardLgImage {\n}\nMatCardLgImage.ɵfac = function MatCardLgImage_Factory(t) { return new (t || MatCardLgImage)(); };\nMatCardLgImage.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardLgImage, selectors: [[\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"]], hostAttrs: [1, \"mat-card-lg-image\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardLgImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-lg-image], [matCardImageLarge]',\n host: { 'class': 'mat-card-lg-image' }\n }]\n }], null, null); })();\n/**\n * Large image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardXlImage {\n}\nMatCardXlImage.ɵfac = function MatCardXlImage_Factory(t) { return new (t || MatCardXlImage)(); };\nMatCardXlImage.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardXlImage, selectors: [[\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]], hostAttrs: [1, \"mat-card-xl-image\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardXlImage, [{\n type: Directive,\n args: [{\n selector: '[mat-card-xl-image], [matCardImageXLarge]',\n host: { 'class': 'mat-card-xl-image' }\n }]\n }], null, null); })();\n/**\n * Avatar image used in a card, needed to add the mat- CSS styling.\n * @docs-private\n */\nclass MatCardAvatar {\n}\nMatCardAvatar.ɵfac = function MatCardAvatar_Factory(t) { return new (t || MatCardAvatar)(); };\nMatCardAvatar.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCardAvatar, selectors: [[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], hostAttrs: [1, \"mat-card-avatar\"] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardAvatar, [{\n type: Directive,\n args: [{\n selector: '[mat-card-avatar], [matCardAvatar]',\n host: { 'class': 'mat-card-avatar' }\n }]\n }], null, null); })();\n/**\n * A basic content container component that adds the styles of a Material design card.\n *\n * While this component can be used alone, it also provides a number\n * of preset styles for common card sections, including:\n * - mat-card-title\n * - mat-card-subtitle\n * - mat-card-content\n * - mat-card-actions\n * - mat-card-footer\n */\nclass MatCard {\n // @breaking-change 9.0.0 `_animationMode` parameter to be made required.\n constructor(_animationMode) {\n this._animationMode = _animationMode;\n }\n}\nMatCard.ɵfac = function MatCard_Factory(t) { return new (t || MatCard)(ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatCard.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCard, selectors: [[\"mat-card\"]], hostAttrs: [1, \"mat-card\", \"mat-focus-indicator\"], hostVars: 2, hostBindings: function MatCard_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, exportAs: [\"matCard\"], ngContentSelectors: _c1, decls: 2, vars: 0, template: function MatCard_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵprojection(1, 1);\n } }, styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}._mat-animation-noopable.mat-card{transition:none;animation:none}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child,.mat-card-actions .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatCard.ctorParameters = () => [\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCard, [{\n type: Component,\n args: [{\n selector: 'mat-card',\n exportAs: 'matCard',\n template: \"\\n\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-card mat-focus-indicator',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"'\n },\n styles: [\".mat-card{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:block;position:relative;padding:16px;border-radius:4px}._mat-animation-noopable.mat-card{transition:none;animation:none}.mat-card .mat-divider-horizontal{position:absolute;left:0;width:100%}[dir=rtl] .mat-card .mat-divider-horizontal{left:auto;right:0}.mat-card .mat-divider-horizontal.mat-divider-inset{position:static;margin:0}[dir=rtl] .mat-card .mat-divider-horizontal.mat-divider-inset{margin-right:0}.cdk-high-contrast-active .mat-card{outline:solid 1px}.mat-card-actions,.mat-card-subtitle,.mat-card-content{display:block;margin-bottom:16px}.mat-card-title{display:block;margin-bottom:8px}.mat-card-actions{margin-left:-8px;margin-right:-8px;padding:8px 0}.mat-card-actions-align-end{display:flex;justify-content:flex-end}.mat-card-image{width:calc(100% + 32px);margin:0 -16px 16px -16px}.mat-card-footer{display:block;margin:0 -16px -16px -16px}.mat-card-actions .mat-button,.mat-card-actions .mat-raised-button,.mat-card-actions .mat-stroked-button{margin:0 8px}.mat-card-header{display:flex;flex-direction:row}.mat-card-header .mat-card-title{margin-bottom:12px}.mat-card-header-text{margin:0 16px}.mat-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;object-fit:cover}.mat-card-title-group{display:flex;justify-content:space-between}.mat-card-sm-image{width:80px;height:80px}.mat-card-md-image{width:112px;height:112px}.mat-card-lg-image{width:152px;height:152px}.mat-card-xl-image{width:240px;height:240px;margin:-8px}.mat-card-title-group>.mat-card-xl-image{margin:-8px 0 8px}@media(max-width: 599px){.mat-card-title-group{margin:0}.mat-card-xl-image{margin-left:0;margin-right:0}}.mat-card>:first-child,.mat-card-content>:first-child{margin-top:0}.mat-card>:last-child:not(.mat-card-footer),.mat-card-content>:last-child:not(.mat-card-footer){margin-bottom:0}.mat-card-image:first-child{margin-top:-16px;border-top-left-radius:inherit;border-top-right-radius:inherit}.mat-card>.mat-card-actions:last-child{margin-bottom:-8px;padding-bottom:0}.mat-card-actions .mat-button:first-child,.mat-card-actions .mat-raised-button:first-child,.mat-card-actions .mat-stroked-button:first-child{margin-left:0;margin-right:0}.mat-card-title:not(:first-child),.mat-card-subtitle:not(:first-child){margin-top:-4px}.mat-card-header .mat-card-subtitle:not(:first-child){margin-top:-8px}.mat-card>.mat-card-xl-image:first-child{margin-top:-8px}.mat-card>.mat-card-xl-image:last-child{margin-bottom:-8px}\\n\"]\n }]\n }], function () { return [{ type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, null); })();\n/**\n * Component intended to be used within the `` component. It adds styles for a\n * preset header section (i.e. a title, subtitle, and avatar layout).\n * @docs-private\n */\nclass MatCardHeader {\n}\nMatCardHeader.ɵfac = function MatCardHeader_Factory(t) { return new (t || MatCardHeader)(); };\nMatCardHeader.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCardHeader, selectors: [[\"mat-card-header\"]], hostAttrs: [1, \"mat-card-header\"], ngContentSelectors: _c3, decls: 4, vars: 0, consts: [[1, \"mat-card-header-text\"]], template: function MatCardHeader_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c2);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 0);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(3, 2);\n } }, encapsulation: 2, changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardHeader, [{\n type: Component,\n args: [{\n selector: 'mat-card-header',\n template: \"\\n
    \\n \\n
    \\n\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'class': 'mat-card-header' }\n }]\n }], null, null); })();\n/**\n * Component intended to be used within the `` component. It adds styles for a preset\n * layout that groups an image with a title section.\n * @docs-private\n */\nclass MatCardTitleGroup {\n}\nMatCardTitleGroup.ɵfac = function MatCardTitleGroup_Factory(t) { return new (t || MatCardTitleGroup)(); };\nMatCardTitleGroup.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCardTitleGroup, selectors: [[\"mat-card-title-group\"]], hostAttrs: [1, \"mat-card-title-group\"], ngContentSelectors: _c5, decls: 4, vars: 0, template: function MatCardTitleGroup_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c4);\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵprojection(3, 2);\n } }, encapsulation: 2, changeDetection: 0 });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardTitleGroup, [{\n type: Component,\n args: [{\n selector: 'mat-card-title-group',\n template: \"
    \\n \\n
    \\n\\n\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'class': 'mat-card-title-group' }\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatCardModule {\n}\nMatCardModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatCardModule });\nMatCardModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatCardModule_Factory(t) { return new (t || MatCardModule)(); }, imports: [[MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatCardModule, { declarations: function () { return [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar]; }, imports: function () { return [MatCommonModule]; }, exports: function () { return [MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle, MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage, MatCardXlImage, MatCardAvatar, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCardModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [\n MatCard,\n MatCardHeader,\n MatCardTitleGroup,\n MatCardContent,\n MatCardTitle,\n MatCardSubtitle,\n MatCardActions,\n MatCardFooter,\n MatCardSmImage,\n MatCardMdImage,\n MatCardLgImage,\n MatCardImage,\n MatCardXlImage,\n MatCardAvatar,\n MatCommonModule,\n ],\n declarations: [\n MatCard, MatCardHeader, MatCardTitleGroup, MatCardContent, MatCardTitle, MatCardSubtitle,\n MatCardActions, MatCardFooter, MatCardSmImage, MatCardMdImage, MatCardLgImage, MatCardImage,\n MatCardXlImage, MatCardAvatar,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n\n//# sourceMappingURL=card.js.map","import { EmptyError } from '../util/EmptyError';\nimport { Subscriber } from '../Subscriber';\nexport function throwIfEmpty(errorFactory = defaultErrorFactory) {\n return (source) => {\n return source.lift(new ThrowIfEmptyOperator(errorFactory));\n };\n}\nclass ThrowIfEmptyOperator {\n constructor(errorFactory) {\n this.errorFactory = errorFactory;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));\n }\n}\nclass ThrowIfEmptySubscriber extends Subscriber {\n constructor(destination, errorFactory) {\n super(destination);\n this.errorFactory = errorFactory;\n this.hasValue = false;\n }\n _next(value) {\n this.hasValue = true;\n this.destination.next(value);\n }\n _complete() {\n if (!this.hasValue) {\n let err;\n try {\n err = this.errorFactory();\n }\n catch (e) {\n err = e;\n }\n this.destination.error(err);\n }\n else {\n return this.destination.complete();\n }\n }\n}\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n//# sourceMappingURL=throwIfEmpty.js.map","import HasObservers from '../core/has-observers';\nimport Point from './point';\nimport Size from './size';\n\nclass Rect extends HasObservers {\n constructor(origin = new Point(), size = new Size()) {\n super();\n\n this.setOrigin(origin);\n this.setSize(size);\n }\n\n clone() {\n return new Rect(\n this.origin.clone(),\n this.size.clone()\n );\n }\n\n equals(other) {\n return other &&\n other.origin.equals(this.origin) &&\n other.size.equals(this.size);\n }\n\n setOrigin(value) {\n this._observerField(\"origin\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getOrigin() {\n return this.origin;\n }\n\n setSize(value) {\n this._observerField(\"size\", Size.create(value));\n this.geometryChange();\n return this;\n }\n\n getSize() {\n return this.size;\n }\n\n width() {\n return this.size.width;\n }\n\n height() {\n return this.size.height;\n }\n\n topLeft() {\n return this.origin.clone();\n }\n\n bottomRight() {\n return this.origin.clone().translate(this.width(), this.height());\n }\n\n topRight() {\n return this.origin.clone().translate(this.width(), 0);\n }\n\n bottomLeft() {\n return this.origin.clone().translate(0, this.height());\n }\n\n center() {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n }\n\n bbox(matrix) {\n const tl = this.topLeft().transformCopy(matrix);\n const tr = this.topRight().transformCopy(matrix);\n const br = this.bottomRight().transformCopy(matrix);\n const bl = this.bottomLeft().transformCopy(matrix);\n\n return Rect.fromPoints(tl, tr, br, bl);\n }\n\n transformCopy(m) {\n return Rect.fromPoints(\n this.topLeft().transform(m),\n this.bottomRight().transform(m)\n );\n }\n\n expand(x, y = x) {\n\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n\n this.origin.translate(-x, -y);\n\n return this;\n }\n\n expandCopy(x, y) {\n return this.clone().expand(x, y);\n }\n\n containsPoint(point) {\n const origin = this.origin;\n const bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n }\n\n _isOnPath(point, width) {\n const rectOuter = this.expandCopy(width, width);\n const rectInner = this.expandCopy(-width, -width);\n\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n\n static fromPoints() {\n const topLeft = Point.min.apply(null, arguments);\n const bottomRight = Point.max.apply(null, arguments);\n const size = new Size(\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n\n return new Rect(topLeft, size);\n }\n\n static union(a, b) {\n return Rect.fromPoints(\n Point.min(a.topLeft(), b.topLeft()),\n Point.max(a.bottomRight(), b.bottomRight())\n );\n }\n\n static intersect(a, b) {\n const rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n\n const rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n\n if (rect1.left <= rect2.right &&\n rect2.left <= rect1.right &&\n rect1.top <= rect2.bottom &&\n rect2.top <= rect1.bottom) {\n return Rect.fromPoints(\n new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n );\n }\n }\n}\n\nexport default Rect;\n","import { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from '../internal/symbol/rxSubscriber';\nexport class SubjectSubscriber extends Subscriber {\n constructor(destination) {\n super(destination);\n this.destination = destination;\n }\n}\nexport class Subject extends Observable {\n constructor() {\n super();\n this.observers = [];\n this.closed = false;\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n [rxSubscriberSymbol]() {\n return new SubjectSubscriber(this);\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n next(value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n if (!this.isStopped) {\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n }\n error(err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].error(err);\n }\n this.observers.length = 0;\n }\n complete() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.isStopped = true;\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].complete();\n }\n this.observers.length = 0;\n }\n unsubscribe() {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n }\n _trySubscribe(subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return super._trySubscribe(subscriber);\n }\n }\n _subscribe(subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n }\n else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n}\nSubject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n};\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n const { destination } = this;\n if (destination && destination.next) {\n destination.next(value);\n }\n }\n error(err) {\n const { destination } = this;\n if (destination && destination.error) {\n this.destination.error(err);\n }\n }\n complete() {\n const { destination } = this;\n if (destination && destination.complete) {\n this.destination.complete();\n }\n }\n _subscribe(subscriber) {\n const { source } = this;\n if (source) {\n return this.source.subscribe(subscriber);\n }\n else {\n return Subscription.EMPTY;\n }\n }\n}\n//# sourceMappingURL=Subject.js.map","import { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { _getShadowRoot, Platform } from '@angular/cdk/platform';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Base reference size of the spinner.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/platform';\nimport * as ɵngcc2 from '@angular/common';\n\nfunction MatProgressSpinner__svg_circle_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"animation-name\", \"mat-progress-spinner-stroke-rotate-\" + ctx_r0._spinnerAnimationLabel)(\"stroke-dashoffset\", ctx_r0._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r0._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r0._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r0._getCircleRadius());\n} }\nfunction MatProgressSpinner__svg_circle_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"stroke-dashoffset\", ctx_r1._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r1._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r1._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r1._getCircleRadius());\n} }\nfunction MatSpinner__svg_circle_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"animation-name\", \"mat-progress-spinner-stroke-rotate-\" + ctx_r0._spinnerAnimationLabel)(\"stroke-dashoffset\", ctx_r0._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r0._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r0._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r0._getCircleRadius());\n} }\nfunction MatSpinner__svg_circle_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelement(0, \"circle\", 3);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"stroke-dashoffset\", ctx_r1._getStrokeDashOffset(), \"px\")(\"stroke-dasharray\", ctx_r1._getStrokeCircumference(), \"px\")(\"stroke-width\", ctx_r1._getCircleStrokeWidth(), \"%\");\n ɵngcc0.ɵɵattribute(\"r\", ctx_r1._getCircleRadius());\n} }\nconst _c0 = \".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\";\nconst BASE_SIZE = 100;\n/**\n * Base reference stroke width of the spinner.\n * @docs-private\n */\nconst BASE_STROKE_WIDTH = 10;\n// Boilerplate for applying mixins to MatProgressSpinner.\n/** @docs-private */\nclass MatProgressSpinnerBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatProgressSpinnerMixinBase = mixinColor(MatProgressSpinnerBase, 'primary');\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\nconst MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS = new InjectionToken('mat-progress-spinner-default-options', {\n providedIn: 'root',\n factory: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY() {\n return { diameter: BASE_SIZE };\n}\n// .0001 percentage difference is necessary in order to avoid unwanted animation frames\n// for example because the animation duration is 4 seconds, .1% accounts to 4ms\n// which are enough to see the flicker described in\n// https://github.com/angular/components/issues/8984\nconst INDETERMINATE_ANIMATION_TEMPLATE = `\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\n 0% { stroke-dashoffset: START_VALUE; transform: rotate(0); }\n 12.5% { stroke-dashoffset: END_VALUE; transform: rotate(0); }\n 12.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n 25% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n\n 25.0001% { stroke-dashoffset: START_VALUE; transform: rotate(270deg); }\n 37.5% { stroke-dashoffset: END_VALUE; transform: rotate(270deg); }\n 37.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n 50% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n\n 50.0001% { stroke-dashoffset: START_VALUE; transform: rotate(180deg); }\n 62.5% { stroke-dashoffset: END_VALUE; transform: rotate(180deg); }\n 62.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n 75% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n\n 75.0001% { stroke-dashoffset: START_VALUE; transform: rotate(90deg); }\n 87.5% { stroke-dashoffset: END_VALUE; transform: rotate(90deg); }\n 87.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n 100% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n }\n`;\n/**\n * `` component.\n */\nclass MatProgressSpinner extends _MatProgressSpinnerMixinBase {\n constructor(_elementRef, platform, _document, animationMode, defaults) {\n super(_elementRef);\n this._elementRef = _elementRef;\n this._document = _document;\n this._diameter = BASE_SIZE;\n this._value = 0;\n this._fallbackAnimation = false;\n /** Mode of the progress circle */\n this.mode = 'determinate';\n const trackedDiameters = MatProgressSpinner._diameters;\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // The base size is already inserted via the component's structural styles. We still\n // need to track it so we don't end up adding the same styles again.\n if (!trackedDiameters.has(_document.head)) {\n trackedDiameters.set(_document.head, new Set([BASE_SIZE]));\n }\n this._fallbackAnimation = platform.EDGE || platform.TRIDENT;\n this._noopAnimations = animationMode === 'NoopAnimations' &&\n (!!defaults && !defaults._forceAnimations);\n if (defaults) {\n if (defaults.diameter) {\n this.diameter = defaults.diameter;\n }\n if (defaults.strokeWidth) {\n this.strokeWidth = defaults.strokeWidth;\n }\n }\n }\n /** The diameter of the progress spinner (will set width and height of svg). */\n get diameter() { return this._diameter; }\n set diameter(size) {\n this._diameter = coerceNumberProperty(size);\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // If this is set before `ngOnInit`, the style root may not have been resolved yet.\n if (!this._fallbackAnimation && this._styleRoot) {\n this._attachStyleNode();\n }\n }\n /** Stroke width of the progress spinner. */\n get strokeWidth() {\n return this._strokeWidth || this.diameter / 10;\n }\n set strokeWidth(value) {\n this._strokeWidth = coerceNumberProperty(value);\n }\n /** Value of the progress circle. */\n get value() {\n return this.mode === 'determinate' ? this._value : 0;\n }\n set value(newValue) {\n this._value = Math.max(0, Math.min(100, coerceNumberProperty(newValue)));\n }\n ngOnInit() {\n const element = this._elementRef.nativeElement;\n // Note that we need to look up the root node in ngOnInit, rather than the constructor, because\n // Angular seems to create the element outside the shadow root and then moves it inside, if the\n // node is inside an `ngIf` and a ShadowDom-encapsulated component.\n this._styleRoot = _getShadowRoot(element) || this._document.head;\n this._attachStyleNode();\n // On IE and Edge, we can't animate the `stroke-dashoffset`\n // reliably so we fall back to a non-spec animation.\n const animationClass = `mat-progress-spinner-indeterminate${this._fallbackAnimation ? '-fallback' : ''}-animation`;\n element.classList.add(animationClass);\n }\n /** The radius of the spinner, adjusted for stroke width. */\n _getCircleRadius() {\n return (this.diameter - BASE_STROKE_WIDTH) / 2;\n }\n /** The view box of the spinner's svg element. */\n _getViewBox() {\n const viewBox = this._getCircleRadius() * 2 + this.strokeWidth;\n return `0 0 ${viewBox} ${viewBox}`;\n }\n /** The stroke circumference of the svg circle. */\n _getStrokeCircumference() {\n return 2 * Math.PI * this._getCircleRadius();\n }\n /** The dash offset of the svg circle. */\n _getStrokeDashOffset() {\n if (this.mode === 'determinate') {\n return this._getStrokeCircumference() * (100 - this._value) / 100;\n }\n // In fallback mode set the circle to 80% and rotate it with CSS.\n if (this._fallbackAnimation && this.mode === 'indeterminate') {\n return this._getStrokeCircumference() * 0.2;\n }\n return null;\n }\n /** Stroke width of the circle in percent. */\n _getCircleStrokeWidth() {\n return this.strokeWidth / this.diameter * 100;\n }\n /** Dynamically generates a style tag containing the correct animation for this diameter. */\n _attachStyleNode() {\n const styleRoot = this._styleRoot;\n const currentDiameter = this._diameter;\n const diameters = MatProgressSpinner._diameters;\n let diametersForElement = diameters.get(styleRoot);\n if (!diametersForElement || !diametersForElement.has(currentDiameter)) {\n const styleTag = this._document.createElement('style');\n styleTag.setAttribute('mat-spinner-animation', this._spinnerAnimationLabel);\n styleTag.textContent = this._getAnimationText();\n styleRoot.appendChild(styleTag);\n if (!diametersForElement) {\n diametersForElement = new Set();\n diameters.set(styleRoot, diametersForElement);\n }\n diametersForElement.add(currentDiameter);\n }\n }\n /** Generates animation styles adjusted for the spinner's diameter. */\n _getAnimationText() {\n const strokeCircumference = this._getStrokeCircumference();\n return INDETERMINATE_ANIMATION_TEMPLATE\n // Animation should begin at 5% and end at 80%\n .replace(/START_VALUE/g, `${0.95 * strokeCircumference}`)\n .replace(/END_VALUE/g, `${0.2 * strokeCircumference}`)\n .replace(/DIAMETER/g, `${this._spinnerAnimationLabel}`);\n }\n /** Returns the circle diameter formatted for use with the animation-name CSS property. */\n _getSpinnerAnimationLabel() {\n // The string of a float point number will include a period ‘.’ character,\n // which is not valid for a CSS animation-name.\n return this.diameter.toString().replace('.', '_');\n }\n}\nMatProgressSpinner.ɵfac = function MatProgressSpinner_Factory(t) { return new (t || MatProgressSpinner)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)); };\nMatProgressSpinner.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatProgressSpinner, selectors: [[\"mat-progress-spinner\"]], hostAttrs: [\"role\", \"progressbar\", 1, \"mat-progress-spinner\"], hostVars: 10, hostBindings: function MatProgressSpinner_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-valuemin\", ctx.mode === \"determinate\" ? 0 : null)(\"aria-valuemax\", ctx.mode === \"determinate\" ? 100 : null)(\"aria-valuenow\", ctx.mode === \"determinate\" ? ctx.value : null)(\"mode\", ctx.mode);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._noopAnimations);\n } }, inputs: { color: \"color\", mode: \"mode\", diameter: \"diameter\", strokeWidth: \"strokeWidth\", value: \"value\" }, exportAs: [\"matProgressSpinner\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 8, consts: [[\"preserveAspectRatio\", \"xMidYMid meet\", \"focusable\", \"false\", 3, \"ngSwitch\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"animation-name\", \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\"]], template: function MatProgressSpinner_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 0);\n ɵngcc0.ɵɵtemplate(1, MatProgressSpinner__svg_circle_1_Template, 1, 9, \"circle\", 1);\n ɵngcc0.ɵɵtemplate(2, MatProgressSpinner__svg_circle_2_Template, 1, 7, \"circle\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.mode === \"indeterminate\");\n ɵngcc0.ɵɵattribute(\"viewBox\", ctx._getViewBox());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n } }, directives: [ɵngcc2.NgSwitch, ɵngcc2.NgSwitchCase], styles: [_c0], encapsulation: 2, changeDetection: 0 });\n/**\n * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\n * We need to keep track of which elements the diameters were attached to, because for\n * elements in the Shadow DOM the style tags are attached to the shadow root, rather\n * than the document head.\n */\nMatProgressSpinner._diameters = new WeakMap();\nMatProgressSpinner.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS,] }] }\n];\nMatProgressSpinner.propDecorators = {\n diameter: [{ type: Input }],\n strokeWidth: [{ type: Input }],\n mode: [{ type: Input }],\n value: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatProgressSpinner, [{\n type: Component,\n args: [{\n selector: 'mat-progress-spinner',\n exportAs: 'matProgressSpinner',\n host: {\n 'role': 'progressbar',\n 'class': 'mat-progress-spinner',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter',\n '[attr.aria-valuemin]': 'mode === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode === \"determinate\" ? 100 : null',\n '[attr.aria-valuenow]': 'mode === \"determinate\" ? value : null',\n '[attr.mode]': 'mode'\n },\n inputs: ['color'],\n template: \"\\n\\n\\n\\n \\n \\n\\n \\n\\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS]\n }] }]; }, { mode: [{\n type: Input\n }], diameter: [{\n type: Input\n }], strokeWidth: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n/**\n * `` component.\n *\n * This is a component definition to be used as a convenience reference to create an\n * indeterminate `` instance.\n */\nclass MatSpinner extends MatProgressSpinner {\n constructor(elementRef, platform, document, animationMode, defaults) {\n super(elementRef, platform, document, animationMode, defaults);\n this.mode = 'indeterminate';\n }\n}\nMatSpinner.ɵfac = function MatSpinner_Factory(t) { return new (t || MatSpinner)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.Platform), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS)); };\nMatSpinner.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSpinner, selectors: [[\"mat-spinner\"]], hostAttrs: [\"role\", \"progressbar\", \"mode\", \"indeterminate\", 1, \"mat-spinner\", \"mat-progress-spinner\"], hostVars: 6, hostBindings: function MatSpinner_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._noopAnimations);\n } }, inputs: { color: \"color\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 8, consts: [[\"preserveAspectRatio\", \"xMidYMid meet\", \"focusable\", \"false\", 3, \"ngSwitch\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"animation-name\", \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\", 3, \"stroke-dashoffset\", \"stroke-dasharray\", \"stroke-width\", 4, \"ngSwitchCase\"], [\"cx\", \"50%\", \"cy\", \"50%\"]], template: function MatSpinner_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 0);\n ɵngcc0.ɵɵtemplate(1, MatSpinner__svg_circle_1_Template, 1, 9, \"circle\", 1);\n ɵngcc0.ɵɵtemplate(2, MatSpinner__svg_circle_2_Template, 1, 7, \"circle\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.diameter, \"px\")(\"height\", ctx.diameter, \"px\");\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.mode === \"indeterminate\");\n ɵngcc0.ɵɵattribute(\"viewBox\", ctx._getViewBox());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n } }, directives: [ɵngcc2.NgSwitch, ɵngcc2.NgSwitchCase], styles: [_c0], encapsulation: 2, changeDetection: 0 });\nMatSpinner.ctorParameters = () => [\n { type: ElementRef },\n { type: Platform },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSpinner, [{\n type: Component,\n args: [{\n selector: 'mat-spinner',\n host: {\n 'role': 'progressbar',\n 'mode': 'indeterminate',\n 'class': 'mat-spinner mat-progress-spinner',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter'\n },\n inputs: ['color'],\n template: \"\\n\\n\\n\\n \\n \\n\\n \\n\\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transform-origin:center;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:currentColor}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{animation:mat-progress-spinner-stroke-rotate-fallback 10000ms cubic-bezier(0.87, 0.03, 0.33, 1) infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition-property:stroke}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-fallback-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}@keyframes mat-progress-spinner-stroke-rotate-fallback{0%{transform:rotate(0deg)}25%{transform:rotate(1170deg)}50%{transform:rotate(2340deg)}75%{transform:rotate(3510deg)}100%{transform:rotate(4680deg)}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressSpinnerModule {\n}\nMatProgressSpinnerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatProgressSpinnerModule });\nMatProgressSpinnerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatProgressSpinnerModule_Factory(t) { return new (t || MatProgressSpinnerModule)(); }, imports: [[MatCommonModule, CommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatProgressSpinnerModule, { declarations: function () { return [MatProgressSpinner, MatSpinner]; }, imports: function () { return [MatCommonModule, CommonModule]; }, exports: function () { return [MatProgressSpinner, MatSpinner, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatProgressSpinnerModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, CommonModule],\n exports: [\n MatProgressSpinner,\n MatSpinner,\n MatCommonModule\n ],\n declarations: [\n MatProgressSpinner,\n MatSpinner\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS, MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, MatProgressSpinner, MatProgressSpinnerModule, MatSpinner };\n\n//# sourceMappingURL=progress-spinner.js.map","import OptionsStore from '../core/options-store';\nimport Rect from '../geometry/rect';\nimport Matrix from '../geometry/matrix';\nimport createTransform from '../geometry/transform';\nimport toMatrix from '../geometry/to-matrix';\nimport HasObservers from '../core/has-observers';\nimport { defined, definitionId, isTransparent, valueOrDefault } from '../util';\n\nclass Element extends HasObservers {\n get nodeType() {\n return \"Rect\";\n }\n\n constructor(options) {\n super();\n\n this._initOptions(options);\n }\n\n _initOptions(options = {}) {\n const { clip, transform } = options;\n\n if (transform) {\n options.transform = createTransform(transform);\n }\n\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n }\n\n transform(value) {\n if (defined(value)) {\n this.options.set(\"transform\", createTransform(value));\n } else {\n return this.options.get(\"transform\");\n }\n }\n\n parentTransform() {\n let element = this;\n let parentMatrix;\n\n while (element.parent) {\n element = element.parent;\n let transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n\n if (parentMatrix) {\n return createTransform(parentMatrix);\n }\n }\n\n currentTransform(parentTransform = this.parentTransform()) {\n const elementTransform = this.transform();\n const elementMatrix = toMatrix(elementTransform);\n\n let parentMatrix = toMatrix(parentTransform);\n let combinedMatrix;\n\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n\n if (combinedMatrix) {\n return createTransform(combinedMatrix);\n }\n }\n\n visible(value) {\n if (defined(value)) {\n this.options.set(\"visible\", value);\n return this;\n }\n\n return this.options.get(\"visible\") !== false;\n }\n\n clip(value) {\n const options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set(\"clip\", value);\n return this;\n }\n\n return options.get(\"clip\");\n }\n\n opacity(value) {\n if (defined(value)) {\n this.options.set(\"opacity\", value);\n return this;\n }\n\n return valueOrDefault(this.options.get(\"opacity\"), 1);\n }\n\n clippedBBox(transformation) {\n const bbox = this._clippedBBox(transformation);\n if (bbox) {\n const clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n }\n\n containsPoint(point, parentTransform) {\n if (this.visible()) {\n const transform = this.currentTransform(parentTransform);\n let transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n }\n return false;\n }\n\n _hasFill() {\n const fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n }\n\n _hasStroke() {\n const stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n }\n\n _clippedBBox(transformation) {\n return this.bbox(transformation);\n }\n}\n\nexport default Element;\n","import { Subscriber } from '../Subscriber';\nexport function mapTo(value) {\n return (source) => source.lift(new MapToOperator(value));\n}\nclass MapToOperator {\n constructor(value) {\n this.value = value;\n }\n call(subscriber, source) {\n return source.subscribe(new MapToSubscriber(subscriber, this.value));\n }\n}\nclass MapToSubscriber extends Subscriber {\n constructor(destination, value) {\n super(destination);\n this.value = value;\n }\n _next(x) {\n this.destination.next(this.value);\n }\n}\n//# sourceMappingURL=mapTo.js.map","import { Platform, PlatformModule } from '@angular/cdk/platform';\nimport { CdkScrollable, ScrollDispatcher, ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, Inject, forwardRef, ElementRef, NgZone, EventEmitter, Optional, Input, HostBinding, Output, HostListener, QueryList, ContentChildren, ContentChild, ViewChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { FocusTrapFactory, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/cdk/a11y';\nimport * as ɵngcc3 from '@angular/cdk/platform';\nimport * as ɵngcc4 from '@angular/cdk/bidi';\nimport * as ɵngcc5 from '@angular/common';\n\nconst _c0 = [\"*\"];\nfunction MatDrawerContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatDrawerContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatDrawerContainer_mat_drawer_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-drawer-content\");\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c1 = [[[\"mat-drawer\"]], [[\"mat-drawer-content\"]], \"*\"];\nconst _c2 = [\"mat-drawer\", \"mat-drawer-content\", \"*\"];\nfunction MatSidenavContainer_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function MatSidenavContainer_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2._onBackdropClicked(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"mat-drawer-shown\", ctx_r0._isShowingBackdrop());\n} }\nfunction MatSidenavContainer_mat_sidenav_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"mat-sidenav-content\", 3);\n ɵngcc0.ɵɵprojection(1, 2);\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c3 = [[[\"mat-sidenav\"]], [[\"mat-sidenav-content\"]], \"*\"];\nconst _c4 = [\"mat-sidenav\", \"mat-sidenav-content\", \"*\"];\nconst _c5 = \".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\";\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n ])\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = function MatDrawerContent_Factory(t) { return new (t || MatDrawerContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatDrawerContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatDrawerContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContent, selectors: [[\"mat-drawer-content\"]], hostAttrs: [1, \"mat-drawer-content\"], hostVars: 4, hostBindings: function MatDrawerContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatDrawerContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatDrawerContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatDrawerContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatDrawerContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContent, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator\n // metadata is not inherited by child classes, instead the host binding data is defined in a way\n // that can be inherited.\n // tslint:disable:no-host-decorator-in-concrete\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange = \n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus();\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd.pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n })).subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() { return this._position; }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value != this._position) {\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() { return this._mode; }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() { return this._disableClose; }\n set disableClose(value) { this._disableClose = coerceBooleanProperty(value); }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we disable auto focusing in `side` mode, because we don't know how the\n // sidenav is being used, but in some cases it still makes sense to do it. If the consumer\n // explicitly enabled `autoFocus`, we take it as them always wanting to enable it.\n return value == null ? this.mode !== 'side' : value;\n }\n set autoFocus(value) { this._autoFocus = coerceBooleanProperty(value); }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() { return this._opened; }\n set opened(value) { this.toggle(coerceBooleanProperty(value)); }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this.autoFocus || !this._focusTrap) {\n return;\n }\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n // If there were no focusable elements, focus the sidenav itself so the keyboard navigation\n // still works. We need to check that `focus` is a function due to Universal.\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n this._elementRef.nativeElement.focus();\n }\n });\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus() {\n if (!this.autoFocus) {\n return;\n }\n // Note that we don't check via `instanceof HTMLElement` so that we can cover SVGs as well.\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, this._openedVia);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n this._openedVia = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n var _a;\n const activeEl = (_a = this._doc) === null || _a === void 0 ? void 0 : _a.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterContentInit() {\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurring of the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true);\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n return this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), openedVia);\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param openedVia Focus origin that can be optionally set when opening a drawer. The\n * origin will be used later when focus is restored on drawer close.\n */\n _setOpen(isOpen, restoreFocus, openedVia = 'program') {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n this._openedVia = openedVia;\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus();\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener(event) {\n this._animationStarted.next(event);\n }\n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener(event) {\n this._animationEnd.next(event);\n }\n}\nMatDrawer.ɵfac = function MatDrawer_Factory(t) { return new (t || MatDrawer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusTrapFactory), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Platform), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DOCUMENT, 8), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_CONTAINER, 8)); };\nMatDrawer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawer, selectors: [[\"mat-drawer\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\"], hostVars: 12, hostBindings: function MatDrawer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@transform.start\", function MatDrawer_animation_transform_start_HostBindingHandler($event) { return ctx._animationStartListener($event); })(\"@transform.done\", function MatDrawer_animation_transform_done_HostBindingHandler($event) { return ctx._animationDoneListener($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@transform\", ctx._animationState);\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened);\n } }, inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", openedStart: \"openedStart\", _closedStream: \"closed\", closedStart: \"closedStart\", onPositionChanged: \"positionChanged\" }, exportAs: [\"matDrawer\"], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatDrawer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatDrawer.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusTrapFactory },\n { type: FocusMonitor },\n { type: Platform },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },\n { type: MatDrawerContainer, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DRAWER_CONTAINER,] }] }\n];\nMatDrawer.propDecorators = {\n position: [{ type: Input }],\n mode: [{ type: Input }],\n disableClose: [{ type: Input }],\n autoFocus: [{ type: Input }],\n opened: [{ type: Input }],\n _animationState: [{ type: HostBinding, args: ['@transform',] }],\n openedChange: [{ type: Output }],\n _openedStream: [{ type: Output, args: ['opened',] }],\n openedStart: [{ type: Output }],\n _closedStream: [{ type: Output, args: ['closed',] }],\n closedStart: [{ type: Output }],\n onPositionChanged: [{ type: Output, args: ['positionChanged',] }],\n _animationStartListener: [{ type: HostListener, args: ['@transform.start', ['$event'],] }],\n _animationDoneListener: [{ type: HostListener, args: ['@transform.done', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer',\n exportAs: 'matDrawer',\n template: \"
    \\r\\n \\r\\n
    \\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.FocusTrapFactory }, { type: ɵngcc2.FocusMonitor }, { type: ɵngcc3.Platform }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }]; }, { _animationState: [{\n type: HostBinding,\n args: ['@transform']\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], openedStart: [{\n type: Output\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], closedStart: [{\n type: Output\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationStartListener: [{\n type: HostListener,\n args: ['@transform.start', ['$event']]\n }], \n // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.\n // In Ivy the `host` bindings will be merged when this class is extended, whereas in\n // ViewEngine they're overwritten.\n // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.\n // tslint:disable-next-line:no-host-decorator-in-concrete\n _animationDoneListener: [{\n type: HostListener,\n args: ['@transform.done', ['$event']]\n }] }); })();\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler.change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() { return this._start; }\n /** The drawer child with the `end` position. */\n get end() { return this._end; }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() { return this._autosize; }\n set autosize(value) { this._autosize = coerceBooleanProperty(value); }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject.pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted.pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over');\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = function MatDrawerContainer_Factory(t) { return new (t || MatDrawerContainer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(MAT_DRAWER_DEFAULT_AUTOSIZE), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatDrawerContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDrawerContainer, selectors: [[\"mat-drawer-container\"]], contentQueries: function MatDrawerContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawerContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatDrawer, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, viewQuery: function MatDrawerContainer_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatDrawerContent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._userContent = _t.first);\n } }, hostAttrs: [1, \"mat-drawer-container\"], hostVars: 2, hostBindings: function MatDrawerContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, exportAs: [\"matDrawerContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }])], ngContentSelectors: _c2, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"]], template: function MatDrawerContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c1);\n ɵngcc0.ɵɵtemplate(0, MatDrawerContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatDrawerContainer_mat_drawer_content_3_Template, 2, 0, \"mat-drawer-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatDrawerContent], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatDrawerContainer.ctorParameters = () => [\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: ElementRef },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ViewportRuler },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_DRAWER_DEFAULT_AUTOSIZE,] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatDrawerContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatDrawerContent,] }],\n _userContent: [{ type: ViewChild, args: [MatDrawerContent,] }],\n autosize: [{ type: Input }],\n hasBackdrop: [{ type: Input }],\n backdropClick: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDrawerContainer, [{\n type: Component,\n args: [{\n selector: 'mat-drawer-container',\n exportAs: 'matDrawerContainer',\n template: \"
    \\n\\n\\n\\n\\n\\n\\n \\n\\n\",\n host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc4.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { backdropClick: [{\n type: Output\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = function MatSidenavContent_Factory(t) { return new (t || MatSidenavContent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(forwardRef(() => MatSidenavContainer)), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ScrollDispatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nMatSidenavContent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContent, selectors: [[\"mat-sidenav-content\"]], hostAttrs: [1, \"mat-drawer-content\", \"mat-sidenav-content\"], hostVars: 4, hostBindings: function MatSidenavContent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"margin-left\", ctx._container._contentMargins.left, \"px\")(\"margin-right\", ctx._container._contentMargins.right, \"px\");\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function MatSidenavContent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2, changeDetection: 0 });\nMatSidenavContent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: MatSidenavContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatSidenavContainer),] }] },\n { type: ElementRef },\n { type: ScrollDispatcher },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContent, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.ScrollDispatcher }, { type: ɵngcc0.NgZone }]; }, null); })();\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() { return this._fixedInViewport; }\n set fixedInViewport(value) { this._fixedInViewport = coerceBooleanProperty(value); }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() { return this._fixedTopGap; }\n set fixedTopGap(value) { this._fixedTopGap = coerceNumberProperty(value); }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() { return this._fixedBottomGap; }\n set fixedBottomGap(value) { this._fixedBottomGap = coerceNumberProperty(value); }\n}\nMatSidenav.ɵfac = function MatSidenav_Factory(t) { return ɵMatSidenav_BaseFactory(t || MatSidenav); };\nMatSidenav.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenav, selectors: [[\"mat-sidenav\"]], hostAttrs: [\"tabIndex\", \"-1\", 1, \"mat-drawer\", \"mat-sidenav\"], hostVars: 17, hostBindings: function MatSidenav_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"align\", null);\n ɵngcc0.ɵɵstyleProp(\"top\", ctx.fixedInViewport ? ctx.fixedTopGap : null, \"px\")(\"bottom\", ctx.fixedInViewport ? ctx.fixedBottomGap : null, \"px\");\n ɵngcc0.ɵɵclassProp(\"mat-drawer-end\", ctx.position === \"end\")(\"mat-drawer-over\", ctx.mode === \"over\")(\"mat-drawer-push\", ctx.mode === \"push\")(\"mat-drawer-side\", ctx.mode === \"side\")(\"mat-drawer-opened\", ctx.opened)(\"mat-sidenav-fixed\", ctx.fixedInViewport);\n } }, inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, exportAs: [\"matSidenav\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c0, decls: 2, vars: 0, consts: [[1, \"mat-drawer-inner-container\"]], template: function MatSidenav_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2, data: { animation: [matDrawerAnimations.transformDrawer] }, changeDetection: 0 });\nMatSidenav.propDecorators = {\n fixedInViewport: [{ type: Input }],\n fixedTopGap: [{ type: Input }],\n fixedBottomGap: [{ type: Input }]\n};\nconst ɵMatSidenav_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenav);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenav, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav',\n exportAs: 'matSidenav',\n template: \"
    \\r\\n \\r\\n
    \\r\\n\",\n animations: [matDrawerAnimations.transformDrawer],\n host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n }]\n }], null, { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] }); })();\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = function MatSidenavContainer_Factory(t) { return ɵMatSidenavContainer_BaseFactory(t || MatSidenavContainer); };\nMatSidenavContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSidenavContainer, selectors: [[\"mat-sidenav-container\"]], contentQueries: function MatSidenavContainer_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenavContent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatSidenav, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._allDrawers = _t);\n } }, hostAttrs: [1, \"mat-drawer-container\", \"mat-sidenav-container\"], hostVars: 2, hostBindings: function MatSidenavContainer_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"mat-drawer-container-explicit-backdrop\", ctx._backdropOverride);\n } }, exportAs: [\"matSidenavContainer\"], features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c4, decls: 4, vars: 2, consts: [[\"class\", \"mat-drawer-backdrop\", 3, \"mat-drawer-shown\", \"click\", 4, \"ngIf\"], [\"cdkScrollable\", \"\", 4, \"ngIf\"], [1, \"mat-drawer-backdrop\", 3, \"click\"], [\"cdkScrollable\", \"\"]], template: function MatSidenavContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c3);\n ɵngcc0.ɵɵtemplate(0, MatSidenavContainer_div_0_Template, 1, 2, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, MatSidenavContainer_mat_sidenav_content_3_Template, 2, 0, \"mat-sidenav-content\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasBackdrop);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx._content);\n } }, directives: [ɵngcc5.NgIf, MatSidenavContent, ɵngcc1.CdkScrollable], styles: [_c5], encapsulation: 2, changeDetection: 0 });\nMatSidenavContainer.propDecorators = {\n _allDrawers: [{ type: ContentChildren, args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n },] }],\n _content: [{ type: ContentChild, args: [MatSidenavContent,] }]\n};\nconst ɵMatSidenavContainer_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSidenavContainer);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavContainer, [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-container',\n exportAs: 'matSidenavContainer',\n template: \"
    \\n\\n\\n\\n\\n\\n\\n \\n\\n\",\n host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer\n }],\n styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"]\n }]\n }], null, { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSidenavModule });\nMatSidenavModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSidenavModule_Factory(t) { return new (t || MatSidenavModule)(); }, imports: [[\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ], CdkScrollableModule,\n MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSidenavModule, { declarations: function () { return [MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; }, imports: function () { return [CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule]; }, exports: function () { return [CdkScrollableModule,\n MatCommonModule, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSidenavModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n MatCommonModule,\n PlatformModule,\n CdkScrollableModule,\n ],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError, MAT_DRAWER_CONTAINER as ɵangular_material_src_material_sidenav_sidenav_a };\n\n//# sourceMappingURL=sidenav.js.map","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Injectable, NgModule, NgZone, Inject, Input, ɵɵdefineInjectable, ɵɵinject } from '@angular/core';\nimport { BaseDirective2, StyleBuilder, StyleUtils, MediaMarshaller, CoreModule, LAYOUT_CONFIG, validateBasis } from '@angular/flex-layout/core';\nimport { Directionality, BidiModule } from '@angular/cdk/bidi';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: utils/layout-validator.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n * @type {?}\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/flex-layout/core';\nimport * as ɵngcc2 from '@angular/cdk/bidi';\nconst INLINE = 'inline';\n/** @type {?} */\nconst LAYOUT_VALUES = ['row', 'column', 'row-reverse', 'column-reverse'];\n/**\n * Validate the direction|'direction wrap' value and then update the host's inline flexbox styles\n * @param {?} value\n * @return {?}\n */\nfunction buildLayoutCSS(value) {\n let [direction, wrap, isInline] = validateValue(value);\n return buildCSS(direction, wrap, isInline);\n}\n/**\n * Validate the value to be one of the acceptable value options\n * Use default fallback of 'row'\n * @param {?} value\n * @return {?}\n */\nfunction validateValue(value) {\n value = value ? value.toLowerCase() : '';\n let [direction, wrap, inline] = value.split(' ');\n // First value must be the `flex-direction`\n if (!LAYOUT_VALUES.find((/**\n * @param {?} x\n * @return {?}\n */\n x => x === direction))) {\n direction = LAYOUT_VALUES[0];\n }\n if (wrap === INLINE) {\n wrap = (inline !== INLINE) ? inline : '';\n inline = INLINE;\n }\n return [direction, validateWrapValue(wrap), !!inline];\n}\n/**\n * Determine if the validated, flex-direction value specifies\n * a horizontal/row flow.\n * @param {?} value\n * @return {?}\n */\nfunction isFlowHorizontal(value) {\n let [flow,] = validateValue(value);\n return flow.indexOf('row') > -1;\n}\n/**\n * Convert layout-wrap='' to expected flex-wrap style\n * @param {?} value\n * @return {?}\n */\nfunction validateWrapValue(value) {\n if (!!value) {\n switch (value.toLowerCase()) {\n case 'reverse':\n case 'wrap-reverse':\n case 'reverse-wrap':\n value = 'wrap-reverse';\n break;\n case 'no':\n case 'none':\n case 'nowrap':\n value = 'nowrap';\n break;\n // All other values fallback to 'wrap'\n default:\n value = 'wrap';\n break;\n }\n }\n return value;\n}\n/**\n * Build the CSS that should be assigned to the element instance\n * BUG:\n * 1) min-height on a column flex container won’t apply to its flex item children in IE 10-11.\n * Use height instead if possible; height : vh;\n *\n * This way any padding or border specified on the child elements are\n * laid out and drawn inside that element's specified width and height.\n * @param {?} direction\n * @param {?=} wrap\n * @param {?=} inline\n * @return {?}\n */\nfunction buildCSS(direction, wrap = null, inline = false) {\n return {\n 'display': inline ? 'inline-flex' : 'flex',\n 'box-sizing': 'border-box',\n 'flex-direction': direction,\n 'flex-wrap': !!wrap ? wrap : null\n };\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/layout/layout.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass LayoutStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n return buildLayoutCSS(input);\n }\n}\nLayoutStyleBuilder.ɵfac = function LayoutStyleBuilder_Factory(t) { return ɵLayoutStyleBuilder_BaseFactory(t || LayoutStyleBuilder); };\n/** @nocollapse */ LayoutStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function LayoutStyleBuilder_Factory() { return new LayoutStyleBuilder(); }, token: LayoutStyleBuilder, providedIn: \"root\" });\nconst ɵLayoutStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(LayoutStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/** @type {?} */\nconst inputs = [\n 'fxLayout', 'fxLayout.xs', 'fxLayout.sm', 'fxLayout.md',\n 'fxLayout.lg', 'fxLayout.xl', 'fxLayout.lt-sm', 'fxLayout.lt-md',\n 'fxLayout.lt-lg', 'fxLayout.lt-xl', 'fxLayout.gt-xs', 'fxLayout.gt-sm',\n 'fxLayout.gt-md', 'fxLayout.gt-lg'\n];\n/** @type {?} */\nconst selector = `\n [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md],\n [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md],\n [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm],\n [fxLayout.gt-md], [fxLayout.gt-lg]\n`;\n/**\n * 'layout' flexbox styling directive\n * Defines the positioning flow direction for the child elements: row or column\n * Optional values: column or row (default)\n * @see https://css-tricks.com/almanac/properties/f/flex-direction/\n *\n */\nclass LayoutDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'layout';\n this.styleCache = layoutCache;\n this.init();\n }\n}\nLayoutDirective.ɵfac = function LayoutDirective_Factory(t) { return new (t || LayoutDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(LayoutStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nLayoutDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LayoutDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLayoutDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: LayoutStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: LayoutStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\nclass DefaultLayoutDirective extends LayoutDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs;\n }\n}\nDefaultLayoutDirective.ɵfac = function DefaultLayoutDirective_Factory(t) { return ɵDefaultLayoutDirective_BaseFactory(t || DefaultLayoutDirective); };\nDefaultLayoutDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultLayoutDirective, selectors: [[\"\", \"fxLayout\", \"\"], [\"\", \"fxLayout.xs\", \"\"], [\"\", \"fxLayout.sm\", \"\"], [\"\", \"fxLayout.md\", \"\"], [\"\", \"fxLayout.lg\", \"\"], [\"\", \"fxLayout.xl\", \"\"], [\"\", \"fxLayout.lt-sm\", \"\"], [\"\", \"fxLayout.lt-md\", \"\"], [\"\", \"fxLayout.lt-lg\", \"\"], [\"\", \"fxLayout.lt-xl\", \"\"], [\"\", \"fxLayout.gt-xs\", \"\"], [\"\", \"fxLayout.gt-sm\", \"\"], [\"\", \"fxLayout.gt-md\", \"\"], [\"\", \"fxLayout.gt-lg\", \"\"]], inputs: { fxLayout: \"fxLayout\", \"fxLayout.xs\": \"fxLayout.xs\", \"fxLayout.sm\": \"fxLayout.sm\", \"fxLayout.md\": \"fxLayout.md\", \"fxLayout.lg\": \"fxLayout.lg\", \"fxLayout.xl\": \"fxLayout.xl\", \"fxLayout.lt-sm\": \"fxLayout.lt-sm\", \"fxLayout.lt-md\": \"fxLayout.lt-md\", \"fxLayout.lt-lg\": \"fxLayout.lt-lg\", \"fxLayout.lt-xl\": \"fxLayout.lt-xl\", \"fxLayout.gt-xs\": \"fxLayout.gt-xs\", \"fxLayout.gt-sm\": \"fxLayout.gt-sm\", \"fxLayout.gt-md\": \"fxLayout.gt-md\", \"fxLayout.gt-lg\": \"fxLayout.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultLayoutDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultLayoutDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultLayoutDirective, [{\n type: Directive,\n args: [{ selector, inputs }]\n }], null, null); })();\n/** @type {?} */\nconst layoutCache = new Map();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/layout-gap/layout-gap.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst CLEAR_MARGIN_CSS = {\n 'margin-left': null,\n 'margin-right': null,\n 'margin-top': null,\n 'margin-bottom': null\n};\nclass LayoutGapStyleBuilder extends StyleBuilder {\n /**\n * @param {?} _styler\n */\n constructor(_styler) {\n super();\n this._styler = _styler;\n }\n /**\n * @param {?} gapValue\n * @param {?} parent\n * @return {?}\n */\n buildStyles(gapValue, parent) {\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n // Add the margin to the host element\n return buildGridMargin(gapValue, parent.directionality);\n }\n else {\n return {};\n }\n }\n /**\n * @param {?} gapValue\n * @param {?} _styles\n * @param {?} parent\n * @return {?}\n */\n sideEffect(gapValue, _styles, parent) {\n /** @type {?} */\n const items = parent.items;\n if (gapValue.endsWith(GRID_SPECIFIER)) {\n gapValue = gapValue.slice(0, gapValue.indexOf(GRID_SPECIFIER));\n // For each `element` children, set the padding\n /** @type {?} */\n const paddingStyles = buildGridPadding(gapValue, parent.directionality);\n this._styler.applyStyleToElements(paddingStyles, parent.items);\n }\n else {\n /** @type {?} */\n const lastItem = (/** @type {?} */ (items.pop()));\n // For each `element` children EXCEPT the last,\n // set the margin right/bottom styles...\n /** @type {?} */\n const gapCss = buildGapCSS(gapValue, parent);\n this._styler.applyStyleToElements(gapCss, items);\n // Clear all gaps for all visible elements\n this._styler.applyStyleToElements(CLEAR_MARGIN_CSS, [lastItem]);\n }\n }\n}\nLayoutGapStyleBuilder.ɵfac = function LayoutGapStyleBuilder_Factory(t) { return new (t || LayoutGapStyleBuilder)(ɵngcc0.ɵɵinject(ɵngcc1.StyleUtils)); };\n/** @nocollapse */ LayoutGapStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function LayoutGapStyleBuilder_Factory() { return new LayoutGapStyleBuilder(ɵɵinject(StyleUtils)); }, token: LayoutGapStyleBuilder, providedIn: \"root\" });\n/** @nocollapse */\nLayoutGapStyleBuilder.ctorParameters = () => [\n { type: StyleUtils }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutGapStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: ɵngcc1.StyleUtils }]; }, null); })();\n/** @type {?} */\nconst inputs$1 = [\n 'fxLayoutGap', 'fxLayoutGap.xs', 'fxLayoutGap.sm', 'fxLayoutGap.md',\n 'fxLayoutGap.lg', 'fxLayoutGap.xl', 'fxLayoutGap.lt-sm', 'fxLayoutGap.lt-md',\n 'fxLayoutGap.lt-lg', 'fxLayoutGap.lt-xl', 'fxLayoutGap.gt-xs', 'fxLayoutGap.gt-sm',\n 'fxLayoutGap.gt-md', 'fxLayoutGap.gt-lg'\n];\n/** @type {?} */\nconst selector$1 = `\n [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md],\n [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md],\n [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm],\n [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]\n`;\n/**\n * 'layout-padding' styling directive\n * Defines padding of child elements in a layout container\n */\nclass LayoutGapDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} zone\n * @param {?} directionality\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, zone, directionality, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.zone = zone;\n this.directionality = directionality;\n this.styleUtils = styleUtils;\n this.layout = 'row'; // default flex-direction\n // default flex-direction\n this.DIRECTIVE_KEY = 'layout-gap';\n this.observerSubject = new Subject();\n /** @type {?} */\n const extraTriggers = [this.directionality.change, this.observerSubject.asObservable()];\n this.init(extraTriggers);\n this.marshal\n .trackValue(this.nativeElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n }\n /**\n * Special accessor to query for all child 'element' nodes regardless of type, class, etc\n * @protected\n * @return {?}\n */\n get childrenNodes() {\n /** @type {?} */\n const obj = this.nativeElement.children;\n /** @type {?} */\n const buffer = [];\n // iterate backwards ensuring that length is an UInt32\n for (let i = obj.length; i--;) {\n buffer[i] = obj[i];\n }\n return buffer;\n }\n // *********************************************\n // Lifecycle Methods\n // *********************************************\n /**\n * @return {?}\n */\n ngAfterContentInit() {\n this.buildChildObservable();\n this.triggerUpdate();\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * Cache the parent container 'flex-direction' and update the 'margin' styles\n * @protected\n * @param {?} matcher\n * @return {?}\n */\n onLayoutChange(matcher) {\n /** @type {?} */\n const layout = matcher.value;\n // Make sure to filter out 'wrap' option\n /** @type {?} */\n const direction = layout.split(' ');\n this.layout = direction[0];\n if (!LAYOUT_VALUES.find((/**\n * @param {?} x\n * @return {?}\n */\n x => x === this.layout))) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n /**\n *\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n // Gather all non-hidden Element nodes\n /** @type {?} */\n const items = this.childrenNodes\n .filter((/**\n * @param {?} el\n * @return {?}\n */\n el => el.nodeType === 1 && this.willDisplay(el)))\n .sort((/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\n (a, b) => {\n /** @type {?} */\n const orderA = +this.styler.lookupStyle(a, 'order');\n /** @type {?} */\n const orderB = +this.styler.lookupStyle(b, 'order');\n if (isNaN(orderA) || isNaN(orderB) || orderA === orderB) {\n return 0;\n }\n else {\n return orderA > orderB ? 1 : -1;\n }\n }));\n if (items.length > 0) {\n /** @type {?} */\n const directionality = this.directionality.value;\n /** @type {?} */\n const layout = this.layout;\n if (layout === 'row' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheRowRtl;\n }\n else if (layout === 'row' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheRowLtr;\n }\n else if (layout === 'column' && directionality === 'rtl') {\n this.styleCache = layoutGapCacheColumnRtl;\n }\n else if (layout === 'column' && directionality !== 'rtl') {\n this.styleCache = layoutGapCacheColumnLtr;\n }\n this.addStyles(value, { directionality, items, layout });\n }\n }\n /**\n * We need to override clearStyles because in most cases mru isn't populated\n * @protected\n * @return {?}\n */\n clearStyles() {\n /** @type {?} */\n const gridMode = Object.keys(this.mru).length > 0;\n /** @type {?} */\n const childrenStyle = gridMode ? 'padding' :\n getMarginType(this.directionality.value, this.layout);\n // If there are styles on the parent remove them\n if (gridMode) {\n super.clearStyles();\n }\n // Then remove the children styles too\n this.styleUtils.applyStyleToElements({ [childrenStyle]: '' }, this.childrenNodes);\n }\n /**\n * Determine if an element will show or hide based on current activation\n * @protected\n * @param {?} source\n * @return {?}\n */\n willDisplay(source) {\n /** @type {?} */\n const value = this.marshal.getValue(source, 'show-hide');\n return value === true ||\n (value === undefined && this.styleUtils.lookupStyle(source, 'display') !== 'none');\n }\n /**\n * @protected\n * @return {?}\n */\n buildChildObservable() {\n this.zone.runOutsideAngular((/**\n * @return {?}\n */\n () => {\n if (typeof MutationObserver !== 'undefined') {\n this.observer = new MutationObserver((/**\n * @param {?} mutations\n * @return {?}\n */\n (mutations) => {\n /** @type {?} */\n const validatedChanges = (/**\n * @param {?} it\n * @return {?}\n */\n (it) => {\n return (it.addedNodes && it.addedNodes.length > 0) ||\n (it.removedNodes && it.removedNodes.length > 0);\n });\n // update gap styles only for child 'added' or 'removed' events\n if (mutations.some(validatedChanges)) {\n this.observerSubject.next();\n }\n }));\n this.observer.observe(this.nativeElement, { childList: true });\n }\n }));\n }\n}\nLayoutGapDirective.ɵfac = function LayoutGapDirective_Factory(t) { return new (t || LayoutGapDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(LayoutGapStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nLayoutGapDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LayoutGapDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLayoutGapDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Directionality },\n { type: StyleUtils },\n { type: LayoutGapStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutGapDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc2.Directionality }, { type: ɵngcc1.StyleUtils }, { type: LayoutGapStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\nclass DefaultLayoutGapDirective extends LayoutGapDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$1;\n }\n}\nDefaultLayoutGapDirective.ɵfac = function DefaultLayoutGapDirective_Factory(t) { return ɵDefaultLayoutGapDirective_BaseFactory(t || DefaultLayoutGapDirective); };\nDefaultLayoutGapDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultLayoutGapDirective, selectors: [[\"\", \"fxLayoutGap\", \"\"], [\"\", \"fxLayoutGap.xs\", \"\"], [\"\", \"fxLayoutGap.sm\", \"\"], [\"\", \"fxLayoutGap.md\", \"\"], [\"\", \"fxLayoutGap.lg\", \"\"], [\"\", \"fxLayoutGap.xl\", \"\"], [\"\", \"fxLayoutGap.lt-sm\", \"\"], [\"\", \"fxLayoutGap.lt-md\", \"\"], [\"\", \"fxLayoutGap.lt-lg\", \"\"], [\"\", \"fxLayoutGap.lt-xl\", \"\"], [\"\", \"fxLayoutGap.gt-xs\", \"\"], [\"\", \"fxLayoutGap.gt-sm\", \"\"], [\"\", \"fxLayoutGap.gt-md\", \"\"], [\"\", \"fxLayoutGap.gt-lg\", \"\"]], inputs: { fxLayoutGap: \"fxLayoutGap\", \"fxLayoutGap.xs\": \"fxLayoutGap.xs\", \"fxLayoutGap.sm\": \"fxLayoutGap.sm\", \"fxLayoutGap.md\": \"fxLayoutGap.md\", \"fxLayoutGap.lg\": \"fxLayoutGap.lg\", \"fxLayoutGap.xl\": \"fxLayoutGap.xl\", \"fxLayoutGap.lt-sm\": \"fxLayoutGap.lt-sm\", \"fxLayoutGap.lt-md\": \"fxLayoutGap.lt-md\", \"fxLayoutGap.lt-lg\": \"fxLayoutGap.lt-lg\", \"fxLayoutGap.lt-xl\": \"fxLayoutGap.lt-xl\", \"fxLayoutGap.gt-xs\": \"fxLayoutGap.gt-xs\", \"fxLayoutGap.gt-sm\": \"fxLayoutGap.gt-sm\", \"fxLayoutGap.gt-md\": \"fxLayoutGap.gt-md\", \"fxLayoutGap.gt-lg\": \"fxLayoutGap.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultLayoutGapDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultLayoutGapDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultLayoutGapDirective, [{\n type: Directive,\n args: [{ selector: selector$1, inputs: inputs$1 }]\n }], null, null); })();\n/** @type {?} */\nconst layoutGapCacheRowRtl = new Map();\n/** @type {?} */\nconst layoutGapCacheColumnRtl = new Map();\n/** @type {?} */\nconst layoutGapCacheRowLtr = new Map();\n/** @type {?} */\nconst layoutGapCacheColumnLtr = new Map();\n/** @type {?} */\nconst GRID_SPECIFIER = ' grid';\n/**\n * @param {?} value\n * @param {?} directionality\n * @return {?}\n */\nfunction buildGridPadding(value, directionality) {\n const [between, below] = value.split(' ');\n /** @type {?} */\n const bottom = below || between;\n /** @type {?} */\n let paddingRight = '0px';\n /** @type {?} */\n let paddingBottom = bottom;\n /** @type {?} */\n let paddingLeft = '0px';\n if (directionality === 'rtl') {\n paddingLeft = between;\n }\n else {\n paddingRight = between;\n }\n return { 'padding': `0px ${paddingRight} ${paddingBottom} ${paddingLeft}` };\n}\n/**\n * @param {?} value\n * @param {?} directionality\n * @return {?}\n */\nfunction buildGridMargin(value, directionality) {\n const [between, below] = value.split(' ');\n /** @type {?} */\n const bottom = below || between;\n /** @type {?} */\n const minus = (/**\n * @param {?} str\n * @return {?}\n */\n (str) => `-${str}`);\n /** @type {?} */\n let marginRight = '0px';\n /** @type {?} */\n let marginBottom = minus(bottom);\n /** @type {?} */\n let marginLeft = '0px';\n if (directionality === 'rtl') {\n marginLeft = minus(between);\n }\n else {\n marginRight = minus(between);\n }\n return { 'margin': `0px ${marginRight} ${marginBottom} ${marginLeft}` };\n}\n/**\n * @param {?} directionality\n * @param {?} layout\n * @return {?}\n */\nfunction getMarginType(directionality, layout) {\n switch (layout) {\n case 'column':\n return 'margin-bottom';\n case 'column-reverse':\n return 'margin-top';\n case 'row':\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n case 'row-reverse':\n return directionality === 'rtl' ? 'margin-right' : 'margin-left';\n default:\n return directionality === 'rtl' ? 'margin-left' : 'margin-right';\n }\n}\n/**\n * @param {?} gapValue\n * @param {?} parent\n * @return {?}\n */\nfunction buildGapCSS(gapValue, parent) {\n /** @type {?} */\n const key = getMarginType(parent.directionality, parent.layout);\n /** @type {?} */\n const margins = Object.assign({}, CLEAR_MARGIN_CSS);\n margins[key] = gapValue;\n return margins;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: utils/object-extend.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\n * similar to Object.assign.\n *\n * @param {?} dest The object which will have properties copied to it.\n * @param {...?} sources The source objects from which properties will be copied.\n * @return {?}\n */\nfunction extendObject(dest, ...sources) {\n if (dest == null) {\n throw TypeError('Cannot convert undefined or null to object');\n }\n for (let source of sources) {\n if (source != null) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n dest[key] = source[key];\n }\n }\n }\n }\n return dest;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/flex/flex.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FlexStyleBuilder extends StyleBuilder {\n /**\n * @param {?} layoutConfig\n */\n constructor(layoutConfig) {\n super();\n this.layoutConfig = layoutConfig;\n }\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n let [grow, shrink, ...basisParts] = input.split(' ');\n /** @type {?} */\n let basis = basisParts.join(' ');\n // The flex-direction of this element's flex container. Defaults to 'row'.\n /** @type {?} */\n const direction = (parent.direction.indexOf('column') > -1) ? 'column' : 'row';\n /** @type {?} */\n const max = isFlowHorizontal(direction) ? 'max-width' : 'max-height';\n /** @type {?} */\n const min = isFlowHorizontal(direction) ? 'min-width' : 'min-height';\n /** @type {?} */\n const hasCalc = String(basis).indexOf('calc') > -1;\n /** @type {?} */\n const usingCalc = hasCalc || (basis === 'auto');\n /** @type {?} */\n const isPercent = String(basis).indexOf('%') > -1 && !hasCalc;\n /** @type {?} */\n const hasUnits = String(basis).indexOf('px') > -1 || String(basis).indexOf('rem') > -1 ||\n String(basis).indexOf('em') > -1 || String(basis).indexOf('vw') > -1 ||\n String(basis).indexOf('vh') > -1;\n /** @type {?} */\n let isValue = (hasCalc || hasUnits);\n grow = (grow == '0') ? 0 : grow;\n shrink = (shrink == '0') ? 0 : shrink;\n // make box inflexible when shrink and grow are both zero\n // should not set a min when the grow is zero\n // should not set a max when the shrink is zero\n /** @type {?} */\n const isFixed = !grow && !shrink;\n /** @type {?} */\n let css = {};\n // flex-basis allows you to specify the initial/starting main-axis size of the element,\n // before anything else is computed. It can either be a percentage or an absolute value.\n // It is, however, not the breaking point for flex-grow/shrink properties\n //\n // flex-grow can be seen as this:\n // 0: Do not stretch. Either size to element's content width, or obey 'flex-basis'.\n // 1: (Default value). Stretch; will be the same size to all other flex items on\n // the same row since they have a default value of 1.\n // ≥2 (integer n): Stretch. Will be n times the size of other elements\n // with 'flex-grow: 1' on the same row.\n // Use `null` to clear existing styles.\n /** @type {?} */\n const clearStyles = {\n 'max-width': null,\n 'max-height': null,\n 'min-width': null,\n 'min-height': null\n };\n switch (basis || '') {\n case '':\n /** @type {?} */\n const useColumnBasisZero = this.layoutConfig.useColumnBasisZero !== false;\n basis = direction === 'row' ? '0%' : (useColumnBasisZero ? '0.000000001px' : 'auto');\n break;\n case 'initial': // default\n case 'nogrow':\n grow = 0;\n basis = 'auto';\n break;\n case 'grow':\n basis = '100%';\n break;\n case 'noshrink':\n shrink = 0;\n basis = 'auto';\n break;\n case 'auto':\n break;\n case 'none':\n grow = 0;\n shrink = 0;\n basis = 'auto';\n break;\n default:\n // Defaults to percentage sizing unless `px` is explicitly set\n if (!isValue && !isPercent && !isNaN((/** @type {?} */ (basis)))) {\n basis = basis + '%';\n }\n // Fix for issue 280\n if (basis === '0%') {\n isValue = true;\n }\n if (basis === '0px') {\n basis = '0%';\n }\n // fix issue #5345\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': isValue ? basis : '100%'\n });\n }\n else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${isValue ? basis : '100%'}`\n });\n }\n break;\n }\n if (!(css['flex'] || css['flex-grow'])) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n }\n else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n }\n // Fix for issues 277, 534, and 728\n if (basis !== '0%' && basis !== '0px' && basis !== '0.000000001px' && basis !== 'auto') {\n css[min] = isFixed || (isValue && grow) ? basis : null;\n css[max] = isFixed || (!usingCalc && shrink) ? basis : null;\n }\n // Fix for issue 528\n if (!css[min] && !css[max]) {\n if (hasCalc) {\n css = extendObject(clearStyles, {\n 'flex-grow': grow,\n 'flex-shrink': shrink,\n 'flex-basis': basis\n });\n }\n else {\n css = extendObject(clearStyles, {\n 'flex': `${grow} ${shrink} ${basis}`\n });\n }\n }\n else {\n // Fix for issue 660\n if (parent.hasWrap) {\n css[hasCalc ? 'flex-basis' : 'flex'] = css[max] ?\n (hasCalc ? css[max] : `${grow} ${shrink} ${css[max]}`) :\n (hasCalc ? css[min] : `${grow} ${shrink} ${css[min]}`);\n }\n }\n return (/** @type {?} */ (extendObject(css, { 'box-sizing': 'border-box' })));\n }\n}\nFlexStyleBuilder.ɵfac = function FlexStyleBuilder_Factory(t) { return new (t || FlexStyleBuilder)(ɵngcc0.ɵɵinject(LAYOUT_CONFIG)); };\n/** @nocollapse */ FlexStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function FlexStyleBuilder_Factory() { return new FlexStyleBuilder(ɵɵinject(LAYOUT_CONFIG)); }, token: FlexStyleBuilder, providedIn: \"root\" });\n/** @nocollapse */\nFlexStyleBuilder.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LAYOUT_CONFIG,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [LAYOUT_CONFIG]\n }] }]; }, null); })();\n/** @type {?} */\nconst inputs$2 = [\n 'fxFlex', 'fxFlex.xs', 'fxFlex.sm', 'fxFlex.md',\n 'fxFlex.lg', 'fxFlex.xl', 'fxFlex.lt-sm', 'fxFlex.lt-md',\n 'fxFlex.lt-lg', 'fxFlex.lt-xl', 'fxFlex.gt-xs', 'fxFlex.gt-sm',\n 'fxFlex.gt-md', 'fxFlex.gt-lg'\n];\n/** @type {?} */\nconst selector$2 = `\n [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md],\n [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md],\n [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm],\n [fxFlex.gt-md], [fxFlex.gt-lg]\n`;\n/**\n * Directive to control the size of a flex item using flex-basis, flex-grow, and flex-shrink.\n * Corresponds to the css `flex` shorthand property.\n *\n * @see https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n */\nclass FlexDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} layoutConfig\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, layoutConfig, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.layoutConfig = layoutConfig;\n this.marshal = marshal;\n this.DIRECTIVE_KEY = 'flex';\n this.direction = undefined;\n this.wrap = undefined;\n this.flexGrow = '1';\n this.flexShrink = '1';\n this.init();\n }\n /**\n * @return {?}\n */\n get shrink() { return this.flexShrink; }\n /**\n * @param {?} value\n * @return {?}\n */\n set shrink(value) {\n this.flexShrink = value || '1';\n this.triggerReflow();\n }\n /**\n * @return {?}\n */\n get grow() { return this.flexGrow; }\n /**\n * @param {?} value\n * @return {?}\n */\n set grow(value) {\n this.flexGrow = value || '1';\n this.triggerReflow();\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n if (this.parentElement) {\n this.marshal.trackValue(this.parentElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n this.marshal.trackValue(this.nativeElement, 'layout-align')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.triggerReflow.bind(this));\n }\n }\n /**\n * Caches the parent container's 'flex-direction' and updates the element's style.\n * Used as a handler for layout change events from the parent flex container.\n * @protected\n * @param {?} matcher\n * @return {?}\n */\n onLayoutChange(matcher) {\n /** @type {?} */\n const layout = matcher.value;\n /** @type {?} */\n const layoutParts = layout.split(' ');\n this.direction = layoutParts[0];\n this.wrap = layoutParts[1] !== undefined && layoutParts[1] === 'wrap';\n this.triggerUpdate();\n }\n /**\n * Input to this is exclusively the basis input value\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n /** @type {?} */\n const addFlexToParent = this.layoutConfig.addFlexToParent !== false;\n if (this.direction === undefined) {\n this.direction = this.getFlexFlowDirection((/** @type {?} */ (this.parentElement)), addFlexToParent);\n }\n if (this.wrap === undefined) {\n this.wrap = this.hasWrap((/** @type {?} */ (this.parentElement)));\n }\n /** @type {?} */\n const direction = this.direction;\n /** @type {?} */\n const isHorizontal = direction.startsWith('row');\n /** @type {?} */\n const hasWrap = this.wrap;\n if (isHorizontal && hasWrap) {\n this.styleCache = flexRowWrapCache;\n }\n else if (isHorizontal && !hasWrap) {\n this.styleCache = flexRowCache;\n }\n else if (!isHorizontal && hasWrap) {\n this.styleCache = flexColumnWrapCache;\n }\n else if (!isHorizontal && !hasWrap) {\n this.styleCache = flexColumnCache;\n }\n /** @type {?} */\n const basis = String(value).replace(';', '');\n /** @type {?} */\n const parts = validateBasis(basis, this.flexGrow, this.flexShrink);\n this.addStyles(parts.join(' '), { direction, hasWrap });\n }\n /**\n * Trigger a style reflow, usually based on a shrink/grow input event\n * @protected\n * @return {?}\n */\n triggerReflow() {\n /** @type {?} */\n const activatedValue = this.activatedValue;\n if (activatedValue !== undefined) {\n /** @type {?} */\n const parts = validateBasis(activatedValue + '', this.flexGrow, this.flexShrink);\n this.marshal.updateElement(this.nativeElement, this.DIRECTIVE_KEY, parts.join(' '));\n }\n }\n}\nFlexDirective.ɵfac = function FlexDirective_Factory(t) { return new (t || FlexDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(LAYOUT_CONFIG), ɵngcc0.ɵɵdirectiveInject(FlexStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nFlexDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FlexDirective, inputs: { shrink: [\"fxShrink\", \"shrink\"], grow: [\"fxGrow\", \"grow\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFlexDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: undefined, decorators: [{ type: Inject, args: [LAYOUT_CONFIG,] }] },\n { type: FlexStyleBuilder },\n { type: MediaMarshaller }\n];\nFlexDirective.propDecorators = {\n shrink: [{ type: Input, args: ['fxShrink',] }],\n grow: [{ type: Input, args: ['fxGrow',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: undefined, decorators: [{\n type: Inject,\n args: [LAYOUT_CONFIG]\n }] }, { type: FlexStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, { shrink: [{\n type: Input,\n args: ['fxShrink']\n }], grow: [{\n type: Input,\n args: ['fxGrow']\n }] }); })();\nclass DefaultFlexDirective extends FlexDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$2;\n }\n}\nDefaultFlexDirective.ɵfac = function DefaultFlexDirective_Factory(t) { return ɵDefaultFlexDirective_BaseFactory(t || DefaultFlexDirective); };\nDefaultFlexDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultFlexDirective, selectors: [[\"\", \"fxFlex\", \"\"], [\"\", \"fxFlex.xs\", \"\"], [\"\", \"fxFlex.sm\", \"\"], [\"\", \"fxFlex.md\", \"\"], [\"\", \"fxFlex.lg\", \"\"], [\"\", \"fxFlex.xl\", \"\"], [\"\", \"fxFlex.lt-sm\", \"\"], [\"\", \"fxFlex.lt-md\", \"\"], [\"\", \"fxFlex.lt-lg\", \"\"], [\"\", \"fxFlex.lt-xl\", \"\"], [\"\", \"fxFlex.gt-xs\", \"\"], [\"\", \"fxFlex.gt-sm\", \"\"], [\"\", \"fxFlex.gt-md\", \"\"], [\"\", \"fxFlex.gt-lg\", \"\"]], inputs: { fxFlex: \"fxFlex\", \"fxFlex.xs\": \"fxFlex.xs\", \"fxFlex.sm\": \"fxFlex.sm\", \"fxFlex.md\": \"fxFlex.md\", \"fxFlex.lg\": \"fxFlex.lg\", \"fxFlex.xl\": \"fxFlex.xl\", \"fxFlex.lt-sm\": \"fxFlex.lt-sm\", \"fxFlex.lt-md\": \"fxFlex.lt-md\", \"fxFlex.lt-lg\": \"fxFlex.lt-lg\", \"fxFlex.lt-xl\": \"fxFlex.lt-xl\", \"fxFlex.gt-xs\": \"fxFlex.gt-xs\", \"fxFlex.gt-sm\": \"fxFlex.gt-sm\", \"fxFlex.gt-md\": \"fxFlex.gt-md\", \"fxFlex.gt-lg\": \"fxFlex.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultFlexDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultFlexDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultFlexDirective, [{\n type: Directive,\n args: [{ inputs: inputs$2, selector: selector$2 }]\n }], null, null); })();\n/** @type {?} */\nconst flexRowCache = new Map();\n/** @type {?} */\nconst flexColumnCache = new Map();\n/** @type {?} */\nconst flexRowWrapCache = new Map();\n/** @type {?} */\nconst flexColumnWrapCache = new Map();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/flex-order/flex-order.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FlexOrderStyleBuilder extends StyleBuilder {\n /**\n * @param {?} value\n * @return {?}\n */\n buildStyles(value) {\n return { order: (value && parseInt(value, 10)) || '' };\n }\n}\nFlexOrderStyleBuilder.ɵfac = function FlexOrderStyleBuilder_Factory(t) { return ɵFlexOrderStyleBuilder_BaseFactory(t || FlexOrderStyleBuilder); };\n/** @nocollapse */ FlexOrderStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function FlexOrderStyleBuilder_Factory() { return new FlexOrderStyleBuilder(); }, token: FlexOrderStyleBuilder, providedIn: \"root\" });\nconst ɵFlexOrderStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(FlexOrderStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexOrderStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/** @type {?} */\nconst inputs$3 = [\n 'fxFlexOrder', 'fxFlexOrder.xs', 'fxFlexOrder.sm', 'fxFlexOrder.md',\n 'fxFlexOrder.lg', 'fxFlexOrder.xl', 'fxFlexOrder.lt-sm', 'fxFlexOrder.lt-md',\n 'fxFlexOrder.lt-lg', 'fxFlexOrder.lt-xl', 'fxFlexOrder.gt-xs', 'fxFlexOrder.gt-sm',\n 'fxFlexOrder.gt-md', 'fxFlexOrder.gt-lg'\n];\n/** @type {?} */\nconst selector$3 = `\n [fxFlexOrder], [fxFlexOrder.xs], [fxFlexOrder.sm], [fxFlexOrder.md],\n [fxFlexOrder.lg], [fxFlexOrder.xl], [fxFlexOrder.lt-sm], [fxFlexOrder.lt-md],\n [fxFlexOrder.lt-lg], [fxFlexOrder.lt-xl], [fxFlexOrder.gt-xs], [fxFlexOrder.gt-sm],\n [fxFlexOrder.gt-md], [fxFlexOrder.gt-lg]\n`;\n/**\n * 'flex-order' flexbox styling directive\n * Configures the positional ordering of the element in a sorted layout container\n * @see https://css-tricks.com/almanac/properties/o/order/\n */\nclass FlexOrderDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'flex-order';\n this.styleCache = flexOrderCache;\n this.init();\n }\n}\nFlexOrderDirective.ɵfac = function FlexOrderDirective_Factory(t) { return new (t || FlexOrderDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(FlexOrderStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nFlexOrderDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FlexOrderDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFlexOrderDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: FlexOrderStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexOrderDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: FlexOrderStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst flexOrderCache = new Map();\nclass DefaultFlexOrderDirective extends FlexOrderDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$3;\n }\n}\nDefaultFlexOrderDirective.ɵfac = function DefaultFlexOrderDirective_Factory(t) { return ɵDefaultFlexOrderDirective_BaseFactory(t || DefaultFlexOrderDirective); };\nDefaultFlexOrderDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultFlexOrderDirective, selectors: [[\"\", \"fxFlexOrder\", \"\"], [\"\", \"fxFlexOrder.xs\", \"\"], [\"\", \"fxFlexOrder.sm\", \"\"], [\"\", \"fxFlexOrder.md\", \"\"], [\"\", \"fxFlexOrder.lg\", \"\"], [\"\", \"fxFlexOrder.xl\", \"\"], [\"\", \"fxFlexOrder.lt-sm\", \"\"], [\"\", \"fxFlexOrder.lt-md\", \"\"], [\"\", \"fxFlexOrder.lt-lg\", \"\"], [\"\", \"fxFlexOrder.lt-xl\", \"\"], [\"\", \"fxFlexOrder.gt-xs\", \"\"], [\"\", \"fxFlexOrder.gt-sm\", \"\"], [\"\", \"fxFlexOrder.gt-md\", \"\"], [\"\", \"fxFlexOrder.gt-lg\", \"\"]], inputs: { fxFlexOrder: \"fxFlexOrder\", \"fxFlexOrder.xs\": \"fxFlexOrder.xs\", \"fxFlexOrder.sm\": \"fxFlexOrder.sm\", \"fxFlexOrder.md\": \"fxFlexOrder.md\", \"fxFlexOrder.lg\": \"fxFlexOrder.lg\", \"fxFlexOrder.xl\": \"fxFlexOrder.xl\", \"fxFlexOrder.lt-sm\": \"fxFlexOrder.lt-sm\", \"fxFlexOrder.lt-md\": \"fxFlexOrder.lt-md\", \"fxFlexOrder.lt-lg\": \"fxFlexOrder.lt-lg\", \"fxFlexOrder.lt-xl\": \"fxFlexOrder.lt-xl\", \"fxFlexOrder.gt-xs\": \"fxFlexOrder.gt-xs\", \"fxFlexOrder.gt-sm\": \"fxFlexOrder.gt-sm\", \"fxFlexOrder.gt-md\": \"fxFlexOrder.gt-md\", \"fxFlexOrder.gt-lg\": \"fxFlexOrder.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultFlexOrderDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultFlexOrderDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultFlexOrderDirective, [{\n type: Directive,\n args: [{ selector: selector$3, inputs: inputs$3 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/flex-offset/flex-offset.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FlexOffsetStyleBuilder extends StyleBuilder {\n /**\n * @param {?} offset\n * @param {?} parent\n * @return {?}\n */\n buildStyles(offset, parent) {\n if (offset === '') {\n offset = '0';\n }\n /** @type {?} */\n const isPercent = String(offset).indexOf('%') > -1;\n /** @type {?} */\n const isPx = String(offset).indexOf('px') > -1;\n if (!isPx && !isPercent && !isNaN(+offset)) {\n offset = offset + '%';\n }\n /** @type {?} */\n const horizontalLayoutKey = parent.isRtl ? 'margin-right' : 'margin-left';\n /** @type {?} */\n const styles = isFlowHorizontal(parent.layout) ?\n { [horizontalLayoutKey]: `${offset}` } : { 'margin-top': `${offset}` };\n return styles;\n }\n}\nFlexOffsetStyleBuilder.ɵfac = function FlexOffsetStyleBuilder_Factory(t) { return ɵFlexOffsetStyleBuilder_BaseFactory(t || FlexOffsetStyleBuilder); };\n/** @nocollapse */ FlexOffsetStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function FlexOffsetStyleBuilder_Factory() { return new FlexOffsetStyleBuilder(); }, token: FlexOffsetStyleBuilder, providedIn: \"root\" });\nconst ɵFlexOffsetStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(FlexOffsetStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexOffsetStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/** @type {?} */\nconst inputs$4 = [\n 'fxFlexOffset', 'fxFlexOffset.xs', 'fxFlexOffset.sm', 'fxFlexOffset.md',\n 'fxFlexOffset.lg', 'fxFlexOffset.xl', 'fxFlexOffset.lt-sm', 'fxFlexOffset.lt-md',\n 'fxFlexOffset.lt-lg', 'fxFlexOffset.lt-xl', 'fxFlexOffset.gt-xs', 'fxFlexOffset.gt-sm',\n 'fxFlexOffset.gt-md', 'fxFlexOffset.gt-lg'\n];\n/** @type {?} */\nconst selector$4 = `\n [fxFlexOffset], [fxFlexOffset.xs], [fxFlexOffset.sm], [fxFlexOffset.md],\n [fxFlexOffset.lg], [fxFlexOffset.xl], [fxFlexOffset.lt-sm], [fxFlexOffset.lt-md],\n [fxFlexOffset.lt-lg], [fxFlexOffset.lt-xl], [fxFlexOffset.gt-xs], [fxFlexOffset.gt-sm],\n [fxFlexOffset.gt-md], [fxFlexOffset.gt-lg]\n`;\n/**\n * 'flex-offset' flexbox styling directive\n * Configures the 'margin-left' of the element in a layout container\n */\nclass FlexOffsetDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} directionality\n * @param {?} styleBuilder\n * @param {?} marshal\n * @param {?} styler\n */\n constructor(elRef, directionality, styleBuilder, marshal, styler) {\n super(elRef, styleBuilder, styler, marshal);\n this.directionality = directionality;\n this.DIRECTIVE_KEY = 'flex-offset';\n this.init([this.directionality.change]);\n // Parent DOM `layout-gap` with affect the nested child with `flex-offset`\n if (this.parentElement) {\n this.marshal\n .trackValue(this.parentElement, 'layout-gap')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.triggerUpdate.bind(this));\n }\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * Using the current fxFlexOffset value, update the inline CSS\n * NOTE: this will assign `margin-left` if the parent flex-direction == 'row',\n * otherwise `margin-top` is used for the offset.\n * @protected\n * @param {?=} value\n * @return {?}\n */\n updateWithValue(value = '') {\n // The flex-direction of this element's flex container. Defaults to 'row'.\n /** @type {?} */\n const layout = this.getFlexFlowDirection((/** @type {?} */ (this.parentElement)), true);\n /** @type {?} */\n const isRtl = this.directionality.value === 'rtl';\n if (layout === 'row' && isRtl) {\n this.styleCache = flexOffsetCacheRowRtl;\n }\n else if (layout === 'row' && !isRtl) {\n this.styleCache = flexOffsetCacheRowLtr;\n }\n else if (layout === 'column' && isRtl) {\n this.styleCache = flexOffsetCacheColumnRtl;\n }\n else if (layout === 'column' && !isRtl) {\n this.styleCache = flexOffsetCacheColumnLtr;\n }\n this.addStyles(value + '', { layout, isRtl });\n }\n}\nFlexOffsetDirective.ɵfac = function FlexOffsetDirective_Factory(t) { return new (t || FlexOffsetDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.Directionality), ɵngcc0.ɵɵdirectiveInject(FlexOffsetStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils)); };\nFlexOffsetDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FlexOffsetDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFlexOffsetDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Directionality },\n { type: FlexOffsetStyleBuilder },\n { type: MediaMarshaller },\n { type: StyleUtils }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexOffsetDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.Directionality }, { type: FlexOffsetStyleBuilder }, { type: ɵngcc1.MediaMarshaller }, { type: ɵngcc1.StyleUtils }]; }, null); })();\nclass DefaultFlexOffsetDirective extends FlexOffsetDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$4;\n }\n}\nDefaultFlexOffsetDirective.ɵfac = function DefaultFlexOffsetDirective_Factory(t) { return ɵDefaultFlexOffsetDirective_BaseFactory(t || DefaultFlexOffsetDirective); };\nDefaultFlexOffsetDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultFlexOffsetDirective, selectors: [[\"\", \"fxFlexOffset\", \"\"], [\"\", \"fxFlexOffset.xs\", \"\"], [\"\", \"fxFlexOffset.sm\", \"\"], [\"\", \"fxFlexOffset.md\", \"\"], [\"\", \"fxFlexOffset.lg\", \"\"], [\"\", \"fxFlexOffset.xl\", \"\"], [\"\", \"fxFlexOffset.lt-sm\", \"\"], [\"\", \"fxFlexOffset.lt-md\", \"\"], [\"\", \"fxFlexOffset.lt-lg\", \"\"], [\"\", \"fxFlexOffset.lt-xl\", \"\"], [\"\", \"fxFlexOffset.gt-xs\", \"\"], [\"\", \"fxFlexOffset.gt-sm\", \"\"], [\"\", \"fxFlexOffset.gt-md\", \"\"], [\"\", \"fxFlexOffset.gt-lg\", \"\"]], inputs: { fxFlexOffset: \"fxFlexOffset\", \"fxFlexOffset.xs\": \"fxFlexOffset.xs\", \"fxFlexOffset.sm\": \"fxFlexOffset.sm\", \"fxFlexOffset.md\": \"fxFlexOffset.md\", \"fxFlexOffset.lg\": \"fxFlexOffset.lg\", \"fxFlexOffset.xl\": \"fxFlexOffset.xl\", \"fxFlexOffset.lt-sm\": \"fxFlexOffset.lt-sm\", \"fxFlexOffset.lt-md\": \"fxFlexOffset.lt-md\", \"fxFlexOffset.lt-lg\": \"fxFlexOffset.lt-lg\", \"fxFlexOffset.lt-xl\": \"fxFlexOffset.lt-xl\", \"fxFlexOffset.gt-xs\": \"fxFlexOffset.gt-xs\", \"fxFlexOffset.gt-sm\": \"fxFlexOffset.gt-sm\", \"fxFlexOffset.gt-md\": \"fxFlexOffset.gt-md\", \"fxFlexOffset.gt-lg\": \"fxFlexOffset.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultFlexOffsetDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultFlexOffsetDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultFlexOffsetDirective, [{\n type: Directive,\n args: [{ selector: selector$4, inputs: inputs$4 }]\n }], null, null); })();\n/** @type {?} */\nconst flexOffsetCacheRowRtl = new Map();\n/** @type {?} */\nconst flexOffsetCacheColumnRtl = new Map();\n/** @type {?} */\nconst flexOffsetCacheRowLtr = new Map();\n/** @type {?} */\nconst flexOffsetCacheColumnLtr = new Map();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/flex-align/flex-align.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass FlexAlignStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n input = input || 'stretch';\n /** @type {?} */\n const styles = {};\n // Cross-axis\n switch (input) {\n case 'start':\n styles['align-self'] = 'flex-start';\n break;\n case 'end':\n styles['align-self'] = 'flex-end';\n break;\n default:\n styles['align-self'] = input;\n break;\n }\n return styles;\n }\n}\nFlexAlignStyleBuilder.ɵfac = function FlexAlignStyleBuilder_Factory(t) { return ɵFlexAlignStyleBuilder_BaseFactory(t || FlexAlignStyleBuilder); };\n/** @nocollapse */ FlexAlignStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function FlexAlignStyleBuilder_Factory() { return new FlexAlignStyleBuilder(); }, token: FlexAlignStyleBuilder, providedIn: \"root\" });\nconst ɵFlexAlignStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(FlexAlignStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexAlignStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/** @type {?} */\nconst inputs$5 = [\n 'fxFlexAlign', 'fxFlexAlign.xs', 'fxFlexAlign.sm', 'fxFlexAlign.md',\n 'fxFlexAlign.lg', 'fxFlexAlign.xl', 'fxFlexAlign.lt-sm', 'fxFlexAlign.lt-md',\n 'fxFlexAlign.lt-lg', 'fxFlexAlign.lt-xl', 'fxFlexAlign.gt-xs', 'fxFlexAlign.gt-sm',\n 'fxFlexAlign.gt-md', 'fxFlexAlign.gt-lg'\n];\n/** @type {?} */\nconst selector$5 = `\n [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md],\n [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md],\n [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm],\n [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]\n`;\n/**\n * 'flex-align' flexbox styling directive\n * Allows element-specific overrides for cross-axis alignments in a layout container\n * @see https://css-tricks.com/almanac/properties/a/align-self/\n */\nclass FlexAlignDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'flex-align';\n this.styleCache = flexAlignCache;\n this.init();\n }\n}\nFlexAlignDirective.ɵfac = function FlexAlignDirective_Factory(t) { return new (t || FlexAlignDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(FlexAlignStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nFlexAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FlexAlignDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFlexAlignDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: FlexAlignStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexAlignDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: FlexAlignStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst flexAlignCache = new Map();\nclass DefaultFlexAlignDirective extends FlexAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$5;\n }\n}\nDefaultFlexAlignDirective.ɵfac = function DefaultFlexAlignDirective_Factory(t) { return ɵDefaultFlexAlignDirective_BaseFactory(t || DefaultFlexAlignDirective); };\nDefaultFlexAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultFlexAlignDirective, selectors: [[\"\", \"fxFlexAlign\", \"\"], [\"\", \"fxFlexAlign.xs\", \"\"], [\"\", \"fxFlexAlign.sm\", \"\"], [\"\", \"fxFlexAlign.md\", \"\"], [\"\", \"fxFlexAlign.lg\", \"\"], [\"\", \"fxFlexAlign.xl\", \"\"], [\"\", \"fxFlexAlign.lt-sm\", \"\"], [\"\", \"fxFlexAlign.lt-md\", \"\"], [\"\", \"fxFlexAlign.lt-lg\", \"\"], [\"\", \"fxFlexAlign.lt-xl\", \"\"], [\"\", \"fxFlexAlign.gt-xs\", \"\"], [\"\", \"fxFlexAlign.gt-sm\", \"\"], [\"\", \"fxFlexAlign.gt-md\", \"\"], [\"\", \"fxFlexAlign.gt-lg\", \"\"]], inputs: { fxFlexAlign: \"fxFlexAlign\", \"fxFlexAlign.xs\": \"fxFlexAlign.xs\", \"fxFlexAlign.sm\": \"fxFlexAlign.sm\", \"fxFlexAlign.md\": \"fxFlexAlign.md\", \"fxFlexAlign.lg\": \"fxFlexAlign.lg\", \"fxFlexAlign.xl\": \"fxFlexAlign.xl\", \"fxFlexAlign.lt-sm\": \"fxFlexAlign.lt-sm\", \"fxFlexAlign.lt-md\": \"fxFlexAlign.lt-md\", \"fxFlexAlign.lt-lg\": \"fxFlexAlign.lt-lg\", \"fxFlexAlign.lt-xl\": \"fxFlexAlign.lt-xl\", \"fxFlexAlign.gt-xs\": \"fxFlexAlign.gt-xs\", \"fxFlexAlign.gt-sm\": \"fxFlexAlign.gt-sm\", \"fxFlexAlign.gt-md\": \"fxFlexAlign.gt-md\", \"fxFlexAlign.gt-lg\": \"fxFlexAlign.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultFlexAlignDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultFlexAlignDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultFlexAlignDirective, [{\n type: Directive,\n args: [{ selector: selector$5, inputs: inputs$5 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/flex-fill/flex-fill.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst FLEX_FILL_CSS = {\n 'margin': 0,\n 'width': '100%',\n 'height': '100%',\n 'min-width': '100%',\n 'min-height': '100%'\n};\nclass FlexFillStyleBuilder extends StyleBuilder {\n /**\n * @param {?} _input\n * @return {?}\n */\n buildStyles(_input) {\n return FLEX_FILL_CSS;\n }\n}\nFlexFillStyleBuilder.ɵfac = function FlexFillStyleBuilder_Factory(t) { return ɵFlexFillStyleBuilder_BaseFactory(t || FlexFillStyleBuilder); };\n/** @nocollapse */ FlexFillStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function FlexFillStyleBuilder_Factory() { return new FlexFillStyleBuilder(); }, token: FlexFillStyleBuilder, providedIn: \"root\" });\nconst ɵFlexFillStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(FlexFillStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexFillStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/**\n * 'fxFill' flexbox styling directive\n * Maximizes width and height of element in a layout container\n *\n * NOTE: fxFill is NOT responsive API!!\n */\nclass FlexFillDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.styleCache = flexFillCache;\n this.addStyles('');\n }\n}\nFlexFillDirective.ɵfac = function FlexFillDirective_Factory(t) { return new (t || FlexFillDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(FlexFillStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nFlexFillDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FlexFillDirective, selectors: [[\"\", \"fxFill\", \"\"], [\"\", \"fxFlexFill\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFlexFillDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: FlexFillStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexFillDirective, [{\n type: Directive,\n args: [{ selector: `[fxFill], [fxFlexFill]` }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: FlexFillStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst flexFillCache = new Map();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/layout-align/layout-align.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass LayoutAlignStyleBuilder extends StyleBuilder {\n /**\n * @param {?} align\n * @param {?} parent\n * @return {?}\n */\n buildStyles(align, parent) {\n /** @type {?} */\n const css = {};\n const [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['justify-content'] = 'center';\n break;\n case 'space-around':\n css['justify-content'] = 'space-around';\n break;\n case 'space-between':\n css['justify-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['justify-content'] = 'space-evenly';\n break;\n case 'end':\n case 'flex-end':\n css['justify-content'] = 'flex-end';\n break;\n case 'start':\n case 'flex-start':\n default:\n css['justify-content'] = 'flex-start'; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'flex-start':\n css['align-items'] = css['align-content'] = 'flex-start';\n break;\n case 'center':\n css['align-items'] = css['align-content'] = 'center';\n break;\n case 'end':\n case 'flex-end':\n css['align-items'] = css['align-content'] = 'flex-end';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n css['align-items'] = 'stretch';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n css['align-items'] = 'stretch';\n break;\n case 'baseline':\n css['align-content'] = 'stretch';\n css['align-items'] = 'baseline';\n break;\n case 'stretch':\n default: // 'stretch'\n css['align-items'] = css['align-content'] = 'stretch'; // default cross axis\n break;\n }\n return (/** @type {?} */ (extendObject(css, {\n 'display': parent.inline ? 'inline-flex' : 'flex',\n 'flex-direction': parent.layout,\n 'box-sizing': 'border-box',\n 'max-width': crossAxis === 'stretch' ?\n !isFlowHorizontal(parent.layout) ? '100%' : null : null,\n 'max-height': crossAxis === 'stretch' ?\n isFlowHorizontal(parent.layout) ? '100%' : null : null,\n })));\n }\n}\nLayoutAlignStyleBuilder.ɵfac = function LayoutAlignStyleBuilder_Factory(t) { return ɵLayoutAlignStyleBuilder_BaseFactory(t || LayoutAlignStyleBuilder); };\n/** @nocollapse */ LayoutAlignStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function LayoutAlignStyleBuilder_Factory() { return new LayoutAlignStyleBuilder(); }, token: LayoutAlignStyleBuilder, providedIn: \"root\" });\nconst ɵLayoutAlignStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(LayoutAlignStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutAlignStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\n/** @type {?} */\nconst inputs$6 = [\n 'fxLayoutAlign', 'fxLayoutAlign.xs', 'fxLayoutAlign.sm', 'fxLayoutAlign.md',\n 'fxLayoutAlign.lg', 'fxLayoutAlign.xl', 'fxLayoutAlign.lt-sm', 'fxLayoutAlign.lt-md',\n 'fxLayoutAlign.lt-lg', 'fxLayoutAlign.lt-xl', 'fxLayoutAlign.gt-xs', 'fxLayoutAlign.gt-sm',\n 'fxLayoutAlign.gt-md', 'fxLayoutAlign.gt-lg'\n];\n/** @type {?} */\nconst selector$6 = `\n [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md],\n [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md],\n [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm],\n [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]\n`;\n/**\n * 'layout-align' flexbox styling directive\n * Defines positioning of child elements along main and cross axis in a layout container\n * Optional values: {main-axis} values or {main-axis cross-axis} value pairs\n *\n * @see https://css-tricks.com/almanac/properties/j/justify-content/\n * @see https://css-tricks.com/almanac/properties/a/align-items/\n * @see https://css-tricks.com/almanac/properties/a/align-content/\n */\nclass LayoutAlignDirective extends BaseDirective2 {\n // default inline value\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'layout-align';\n this.layout = 'row'; // default flex-direction\n // default flex-direction\n this.inline = false; // default inline value\n this.init();\n this.marshal.trackValue(this.nativeElement, 'layout')\n .pipe(takeUntil(this.destroySubject))\n .subscribe(this.onLayoutChange.bind(this));\n }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n *\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n /** @type {?} */\n const layout = this.layout || 'row';\n /** @type {?} */\n const inline = this.inline;\n if (layout === 'row' && inline) {\n this.styleCache = layoutAlignHorizontalInlineCache;\n }\n else if (layout === 'row' && !inline) {\n this.styleCache = layoutAlignHorizontalCache;\n }\n else if (layout === 'row-reverse' && inline) {\n this.styleCache = layoutAlignHorizontalRevInlineCache;\n }\n else if (layout === 'row-reverse' && !inline) {\n this.styleCache = layoutAlignHorizontalRevCache;\n }\n else if (layout === 'column' && inline) {\n this.styleCache = layoutAlignVerticalInlineCache;\n }\n else if (layout === 'column' && !inline) {\n this.styleCache = layoutAlignVerticalCache;\n }\n else if (layout === 'column-reverse' && inline) {\n this.styleCache = layoutAlignVerticalRevInlineCache;\n }\n else if (layout === 'column-reverse' && !inline) {\n this.styleCache = layoutAlignVerticalRevCache;\n }\n this.addStyles(value, { layout, inline });\n }\n /**\n * Cache the parent container 'flex-direction' and update the 'flex' styles\n * @protected\n * @param {?} matcher\n * @return {?}\n */\n onLayoutChange(matcher) {\n /** @type {?} */\n const layoutKeys = matcher.value.split(' ');\n this.layout = layoutKeys[0];\n this.inline = matcher.value.includes('inline');\n if (!LAYOUT_VALUES.find((/**\n * @param {?} x\n * @return {?}\n */\n x => x === this.layout))) {\n this.layout = 'row';\n }\n this.triggerUpdate();\n }\n}\nLayoutAlignDirective.ɵfac = function LayoutAlignDirective_Factory(t) { return new (t || LayoutAlignDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(LayoutAlignStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nLayoutAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LayoutAlignDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLayoutAlignDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: LayoutAlignStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutAlignDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: LayoutAlignStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\nclass DefaultLayoutAlignDirective extends LayoutAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$6;\n }\n}\nDefaultLayoutAlignDirective.ɵfac = function DefaultLayoutAlignDirective_Factory(t) { return ɵDefaultLayoutAlignDirective_BaseFactory(t || DefaultLayoutAlignDirective); };\nDefaultLayoutAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultLayoutAlignDirective, selectors: [[\"\", \"fxLayoutAlign\", \"\"], [\"\", \"fxLayoutAlign.xs\", \"\"], [\"\", \"fxLayoutAlign.sm\", \"\"], [\"\", \"fxLayoutAlign.md\", \"\"], [\"\", \"fxLayoutAlign.lg\", \"\"], [\"\", \"fxLayoutAlign.xl\", \"\"], [\"\", \"fxLayoutAlign.lt-sm\", \"\"], [\"\", \"fxLayoutAlign.lt-md\", \"\"], [\"\", \"fxLayoutAlign.lt-lg\", \"\"], [\"\", \"fxLayoutAlign.lt-xl\", \"\"], [\"\", \"fxLayoutAlign.gt-xs\", \"\"], [\"\", \"fxLayoutAlign.gt-sm\", \"\"], [\"\", \"fxLayoutAlign.gt-md\", \"\"], [\"\", \"fxLayoutAlign.gt-lg\", \"\"]], inputs: { fxLayoutAlign: \"fxLayoutAlign\", \"fxLayoutAlign.xs\": \"fxLayoutAlign.xs\", \"fxLayoutAlign.sm\": \"fxLayoutAlign.sm\", \"fxLayoutAlign.md\": \"fxLayoutAlign.md\", \"fxLayoutAlign.lg\": \"fxLayoutAlign.lg\", \"fxLayoutAlign.xl\": \"fxLayoutAlign.xl\", \"fxLayoutAlign.lt-sm\": \"fxLayoutAlign.lt-sm\", \"fxLayoutAlign.lt-md\": \"fxLayoutAlign.lt-md\", \"fxLayoutAlign.lt-lg\": \"fxLayoutAlign.lt-lg\", \"fxLayoutAlign.lt-xl\": \"fxLayoutAlign.lt-xl\", \"fxLayoutAlign.gt-xs\": \"fxLayoutAlign.gt-xs\", \"fxLayoutAlign.gt-sm\": \"fxLayoutAlign.gt-sm\", \"fxLayoutAlign.gt-md\": \"fxLayoutAlign.gt-md\", \"fxLayoutAlign.gt-lg\": \"fxLayoutAlign.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultLayoutAlignDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultLayoutAlignDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultLayoutAlignDirective, [{\n type: Directive,\n args: [{ selector: selector$6, inputs: inputs$6 }]\n }], null, null); })();\n/** @type {?} */\nconst layoutAlignHorizontalCache = new Map();\n/** @type {?} */\nconst layoutAlignVerticalCache = new Map();\n/** @type {?} */\nconst layoutAlignHorizontalRevCache = new Map();\n/** @type {?} */\nconst layoutAlignVerticalRevCache = new Map();\n/** @type {?} */\nconst layoutAlignHorizontalInlineCache = new Map();\n/** @type {?} */\nconst layoutAlignVerticalInlineCache = new Map();\n/** @type {?} */\nconst layoutAlignHorizontalRevInlineCache = new Map();\n/** @type {?} */\nconst layoutAlignVerticalRevInlineCache = new Map();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst ALL_DIRECTIVES = [\n DefaultLayoutDirective,\n DefaultLayoutGapDirective,\n DefaultLayoutAlignDirective,\n DefaultFlexOrderDirective,\n DefaultFlexOffsetDirective,\n FlexFillDirective,\n DefaultFlexAlignDirective,\n DefaultFlexDirective,\n];\n/**\n * *****************************************************************\n * Define module for the Flex API\n * *****************************************************************\n */\nclass FlexModule {\n}\nFlexModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FlexModule });\nFlexModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FlexModule_Factory(t) { return new (t || FlexModule)(); }, imports: [[CoreModule, BidiModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FlexModule, { declarations: function () { return [DefaultLayoutDirective, DefaultLayoutGapDirective, DefaultLayoutAlignDirective, DefaultFlexOrderDirective, DefaultFlexOffsetDirective, FlexFillDirective, DefaultFlexAlignDirective, DefaultFlexDirective]; }, imports: function () { return [CoreModule, BidiModule]; }, exports: function () { return [DefaultLayoutDirective, DefaultLayoutGapDirective, DefaultLayoutAlignDirective, DefaultFlexOrderDirective, DefaultFlexOffsetDirective, FlexFillDirective, DefaultFlexAlignDirective, DefaultFlexDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexModule, [{\n type: NgModule,\n args: [{\n imports: [CoreModule, BidiModule],\n declarations: [...ALL_DIRECTIVES],\n exports: [...ALL_DIRECTIVES]\n }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/public-api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: flex/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { FlexModule, FlexStyleBuilder, FlexDirective, DefaultFlexDirective, FlexAlignStyleBuilder, FlexAlignDirective, DefaultFlexAlignDirective, FlexFillStyleBuilder, FlexFillDirective, FlexOffsetStyleBuilder, FlexOffsetDirective, DefaultFlexOffsetDirective, FlexOrderStyleBuilder, FlexOrderDirective, DefaultFlexOrderDirective, LayoutStyleBuilder, LayoutDirective, DefaultLayoutDirective, LayoutAlignStyleBuilder, LayoutAlignDirective, DefaultLayoutAlignDirective, LayoutGapStyleBuilder, LayoutGapDirective, DefaultLayoutGapDirective };\n\n//# sourceMappingURL=flex.js.map","export function isObject(x) {\n return x !== null && typeof x === 'object';\n}\n//# sourceMappingURL=isObject.js.map","export default function createStackElements(elements) {\n const stackElements = [];\n\n for (let idx = 0; idx < elements.length; idx++) {\n let element = elements[idx];\n let bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n\n return stackElements;\n}","import { InjectionToken } from '@angular/core';\n\nexport const POPOVER_VIEW_DATA = new InjectionToken('POPOVER_VIEW_DATA');\n","export class Scheduler {\n constructor(SchedulerAction, now = Scheduler.now) {\n this.SchedulerAction = SchedulerAction;\n this.now = now;\n }\n schedule(work, delay = 0, state) {\n return new this.SchedulerAction(this, work).schedule(state, delay);\n }\n}\nScheduler.now = () => Date.now();\n//# sourceMappingURL=Scheduler.js.map","import { isArray } from './isArray';\nexport function isNumeric(val) {\n return !isArray(val) && (val - parseFloat(val) + 1) >= 0;\n}\n//# sourceMappingURL=isNumeric.js.map","import renderAttr from './render-attribute';\n\nexport default function renderAllAttr(attrs) {\n let output = \"\";\n for (let i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n\n return output;\n}","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Directive, ElementRef, Injectable, NgModule, Input, ɵɵdefineInjectable } from '@angular/core';\nimport { MediaMarshaller, BaseDirective2, StyleBuilder, StyleUtils, CoreModule } from '@angular/flex-layout/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/grid-align/grid-align.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/flex-layout/core';\nconst ROW_DEFAULT = 'stretch';\n/** @type {?} */\nconst COL_DEFAULT = 'stretch';\nclass GridAlignStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n return buildCss(input || ROW_DEFAULT);\n }\n}\nGridAlignStyleBuilder.ɵfac = function GridAlignStyleBuilder_Factory(t) { return ɵGridAlignStyleBuilder_BaseFactory(t || GridAlignStyleBuilder); };\n/** @nocollapse */ GridAlignStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridAlignStyleBuilder_Factory() { return new GridAlignStyleBuilder(); }, token: GridAlignStyleBuilder, providedIn: \"root\" });\nconst ɵGridAlignStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAlignStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAlignDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align';\n this.styleCache = alignCache;\n this.init();\n }\n}\nGridAlignDirective.ɵfac = function GridAlignDirective_Factory(t) { return new (t || GridAlignDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridAlignStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAlignDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAlignDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridAlignStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridAlignStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst alignCache = new Map();\n/** @type {?} */\nconst inputs = [\n 'gdGridAlign',\n 'gdGridAlign.xs', 'gdGridAlign.sm', 'gdGridAlign.md', 'gdGridAlign.lg', 'gdGridAlign.xl',\n 'gdGridAlign.lt-sm', 'gdGridAlign.lt-md', 'gdGridAlign.lt-lg', 'gdGridAlign.lt-xl',\n 'gdGridAlign.gt-xs', 'gdGridAlign.gt-sm', 'gdGridAlign.gt-md', 'gdGridAlign.gt-lg'\n];\n/** @type {?} */\nconst selector = `\n [gdGridAlign],\n [gdGridAlign.xs], [gdGridAlign.sm], [gdGridAlign.md], [gdGridAlign.lg],[gdGridAlign.xl],\n [gdGridAlign.lt-sm], [gdGridAlign.lt-md], [gdGridAlign.lt-lg], [gdGridAlign.lt-xl],\n [gdGridAlign.gt-xs], [gdGridAlign.gt-sm], [gdGridAlign.gt-md], [gdGridAlign.gt-lg]\n`;\n/**\n * 'align' CSS Grid styling directive for grid children\n * Defines positioning of child elements along row and column axis in a grid container\n * Optional values: {row-axis} values or {row-axis column-axis} value pairs\n *\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-justify-self\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#prop-align-self\n */\nclass DefaultGridAlignDirective extends GridAlignDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs;\n }\n}\nDefaultGridAlignDirective.ɵfac = function DefaultGridAlignDirective_Factory(t) { return ɵDefaultGridAlignDirective_BaseFactory(t || DefaultGridAlignDirective); };\nDefaultGridAlignDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAlignDirective, selectors: [[\"\", \"gdGridAlign\", \"\"], [\"\", \"gdGridAlign.xs\", \"\"], [\"\", \"gdGridAlign.sm\", \"\"], [\"\", \"gdGridAlign.md\", \"\"], [\"\", \"gdGridAlign.lg\", \"\"], [\"\", \"gdGridAlign.xl\", \"\"], [\"\", \"gdGridAlign.lt-sm\", \"\"], [\"\", \"gdGridAlign.lt-md\", \"\"], [\"\", \"gdGridAlign.lt-lg\", \"\"], [\"\", \"gdGridAlign.lt-xl\", \"\"], [\"\", \"gdGridAlign.gt-xs\", \"\"], [\"\", \"gdGridAlign.gt-sm\", \"\"], [\"\", \"gdGridAlign.gt-md\", \"\"], [\"\", \"gdGridAlign.gt-lg\", \"\"]], inputs: { gdGridAlign: \"gdGridAlign\", \"gdGridAlign.xs\": \"gdGridAlign.xs\", \"gdGridAlign.sm\": \"gdGridAlign.sm\", \"gdGridAlign.md\": \"gdGridAlign.md\", \"gdGridAlign.lg\": \"gdGridAlign.lg\", \"gdGridAlign.xl\": \"gdGridAlign.xl\", \"gdGridAlign.lt-sm\": \"gdGridAlign.lt-sm\", \"gdGridAlign.lt-md\": \"gdGridAlign.lt-md\", \"gdGridAlign.lt-lg\": \"gdGridAlign.lt-lg\", \"gdGridAlign.lt-xl\": \"gdGridAlign.lt-xl\", \"gdGridAlign.gt-xs\": \"gdGridAlign.gt-xs\", \"gdGridAlign.gt-sm\": \"gdGridAlign.gt-sm\", \"gdGridAlign.gt-md\": \"gdGridAlign.gt-md\", \"gdGridAlign.gt-lg\": \"gdGridAlign.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAlignDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAlignDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAlignDirective, [{\n type: Directive,\n args: [{ selector, inputs }]\n }], null, null); })();\n/**\n * @param {?=} align\n * @return {?}\n */\nfunction buildCss(align = '') {\n /** @type {?} */\n const css = {};\n const [rowAxis, columnAxis] = align.split(' ');\n // Row axis\n switch (rowAxis) {\n case 'end':\n css['justify-self'] = 'end';\n break;\n case 'center':\n css['justify-self'] = 'center';\n break;\n case 'stretch':\n css['justify-self'] = 'stretch';\n break;\n case 'start':\n css['justify-self'] = 'start';\n break;\n default:\n css['justify-self'] = ROW_DEFAULT; // default row axis\n break;\n }\n // Column axis\n switch (columnAxis) {\n case 'end':\n css['align-self'] = 'end';\n break;\n case 'center':\n css['align-self'] = 'center';\n break;\n case 'stretch':\n css['align-self'] = 'stretch';\n break;\n case 'start':\n css['align-self'] = 'start';\n break;\n default:\n css['align-self'] = COL_DEFAULT; // default column axis\n break;\n }\n return css;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/align-columns/align-columns.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_MAIN = 'start';\n/** @type {?} */\nconst DEFAULT_CROSS = 'stretch';\nclass GridAlignColumnsStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n return buildCss$1(input || `${DEFAULT_MAIN} ${DEFAULT_CROSS}`, parent.inline);\n }\n}\nGridAlignColumnsStyleBuilder.ɵfac = function GridAlignColumnsStyleBuilder_Factory(t) { return ɵGridAlignColumnsStyleBuilder_BaseFactory(t || GridAlignColumnsStyleBuilder); };\n/** @nocollapse */ GridAlignColumnsStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridAlignColumnsStyleBuilder_Factory() { return new GridAlignColumnsStyleBuilder(); }, token: GridAlignColumnsStyleBuilder, providedIn: \"root\" });\nconst ɵGridAlignColumnsStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAlignColumnsStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignColumnsStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAlignColumnsDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align-columns';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? alignColumnsInlineCache : alignColumnsCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridAlignColumnsDirective.ɵfac = function GridAlignColumnsDirective_Factory(t) { return new (t || GridAlignColumnsDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridAlignColumnsStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAlignColumnsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAlignColumnsDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAlignColumnsDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridAlignColumnsStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\nGridAlignColumnsDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignColumnsDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridAlignColumnsStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst alignColumnsCache = new Map();\n/** @type {?} */\nconst alignColumnsInlineCache = new Map();\n/** @type {?} */\nconst inputs$1 = [\n 'gdAlignColumns',\n 'gdAlignColumns.xs', 'gdAlignColumns.sm', 'gdAlignColumns.md',\n 'gdAlignColumns.lg', 'gdAlignColumns.xl', 'gdAlignColumns.lt-sm',\n 'gdAlignColumns.lt-md', 'gdAlignColumns.lt-lg', 'gdAlignColumns.lt-xl',\n 'gdAlignColumns.gt-xs', 'gdAlignColumns.gt-sm', 'gdAlignColumns.gt-md',\n 'gdAlignColumns.gt-lg'\n];\n/** @type {?} */\nconst selector$1 = `\n [gdAlignColumns],\n [gdAlignColumns.xs], [gdAlignColumns.sm], [gdAlignColumns.md],\n [gdAlignColumns.lg], [gdAlignColumns.xl], [gdAlignColumns.lt-sm],\n [gdAlignColumns.lt-md], [gdAlignColumns.lt-lg], [gdAlignColumns.lt-xl],\n [gdAlignColumns.gt-xs], [gdAlignColumns.gt-sm], [gdAlignColumns.gt-md],\n [gdAlignColumns.gt-lg]\n`;\n/**\n * 'column alignment' CSS Grid styling directive\n * Configures the alignment in the column direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-19\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-21\n */\nclass DefaultGridAlignColumnsDirective extends GridAlignColumnsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$1;\n }\n}\nDefaultGridAlignColumnsDirective.ɵfac = function DefaultGridAlignColumnsDirective_Factory(t) { return ɵDefaultGridAlignColumnsDirective_BaseFactory(t || DefaultGridAlignColumnsDirective); };\nDefaultGridAlignColumnsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAlignColumnsDirective, selectors: [[\"\", \"gdAlignColumns\", \"\"], [\"\", \"gdAlignColumns.xs\", \"\"], [\"\", \"gdAlignColumns.sm\", \"\"], [\"\", \"gdAlignColumns.md\", \"\"], [\"\", \"gdAlignColumns.lg\", \"\"], [\"\", \"gdAlignColumns.xl\", \"\"], [\"\", \"gdAlignColumns.lt-sm\", \"\"], [\"\", \"gdAlignColumns.lt-md\", \"\"], [\"\", \"gdAlignColumns.lt-lg\", \"\"], [\"\", \"gdAlignColumns.lt-xl\", \"\"], [\"\", \"gdAlignColumns.gt-xs\", \"\"], [\"\", \"gdAlignColumns.gt-sm\", \"\"], [\"\", \"gdAlignColumns.gt-md\", \"\"], [\"\", \"gdAlignColumns.gt-lg\", \"\"]], inputs: { gdAlignColumns: \"gdAlignColumns\", \"gdAlignColumns.xs\": \"gdAlignColumns.xs\", \"gdAlignColumns.sm\": \"gdAlignColumns.sm\", \"gdAlignColumns.md\": \"gdAlignColumns.md\", \"gdAlignColumns.lg\": \"gdAlignColumns.lg\", \"gdAlignColumns.xl\": \"gdAlignColumns.xl\", \"gdAlignColumns.lt-sm\": \"gdAlignColumns.lt-sm\", \"gdAlignColumns.lt-md\": \"gdAlignColumns.lt-md\", \"gdAlignColumns.lt-lg\": \"gdAlignColumns.lt-lg\", \"gdAlignColumns.lt-xl\": \"gdAlignColumns.lt-xl\", \"gdAlignColumns.gt-xs\": \"gdAlignColumns.gt-xs\", \"gdAlignColumns.gt-sm\": \"gdAlignColumns.gt-sm\", \"gdAlignColumns.gt-md\": \"gdAlignColumns.gt-md\", \"gdAlignColumns.gt-lg\": \"gdAlignColumns.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAlignColumnsDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAlignColumnsDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAlignColumnsDirective, [{\n type: Directive,\n args: [{ selector: selector$1, inputs: inputs$1 }]\n }], null, null); })();\n/**\n * @param {?} align\n * @param {?} inline\n * @return {?}\n */\nfunction buildCss$1(align, inline) {\n /** @type {?} */\n const css = {};\n const [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n css['align-content'] = 'center';\n break;\n case 'space-around':\n css['align-content'] = 'space-around';\n break;\n case 'space-between':\n css['align-content'] = 'space-between';\n break;\n case 'space-evenly':\n css['align-content'] = 'space-evenly';\n break;\n case 'end':\n css['align-content'] = 'end';\n break;\n case 'start':\n css['align-content'] = 'start';\n break;\n case 'stretch':\n css['align-content'] = 'stretch';\n break;\n default:\n css['align-content'] = DEFAULT_MAIN; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n css['align-items'] = 'start';\n break;\n case 'center':\n css['align-items'] = 'center';\n break;\n case 'end':\n css['align-items'] = 'end';\n break;\n case 'stretch':\n css['align-items'] = 'stretch';\n break;\n default: // 'stretch'\n css['align-items'] = DEFAULT_CROSS; // default cross axis\n break;\n }\n css['display'] = inline ? 'inline-grid' : 'grid';\n return css;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/align-rows/align-rows.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_MAIN$1 = 'start';\n/** @type {?} */\nconst DEFAULT_CROSS$1 = 'stretch';\nclass GridAlignRowsStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n return buildCss$2(input || `${DEFAULT_MAIN$1} ${DEFAULT_CROSS$1}`, parent.inline);\n }\n}\nGridAlignRowsStyleBuilder.ɵfac = function GridAlignRowsStyleBuilder_Factory(t) { return ɵGridAlignRowsStyleBuilder_BaseFactory(t || GridAlignRowsStyleBuilder); };\n/** @nocollapse */ GridAlignRowsStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridAlignRowsStyleBuilder_Factory() { return new GridAlignRowsStyleBuilder(); }, token: GridAlignRowsStyleBuilder, providedIn: \"root\" });\nconst ɵGridAlignRowsStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAlignRowsStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignRowsStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAlignRowsDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-align-rows';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? alignRowsInlineCache : alignRowsCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridAlignRowsDirective.ɵfac = function GridAlignRowsDirective_Factory(t) { return new (t || GridAlignRowsDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridAlignRowsStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAlignRowsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAlignRowsDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAlignRowsDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridAlignRowsStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\nGridAlignRowsDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAlignRowsDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridAlignRowsStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst alignRowsCache = new Map();\n/** @type {?} */\nconst alignRowsInlineCache = new Map();\n/** @type {?} */\nconst inputs$2 = [\n 'gdAlignRows',\n 'gdAlignRows.xs', 'gdAlignRows.sm', 'gdAlignRows.md',\n 'gdAlignRows.lg', 'gdAlignRows.xl', 'gdAlignRows.lt-sm',\n 'gdAlignRows.lt-md', 'gdAlignRows.lt-lg', 'gdAlignRows.lt-xl',\n 'gdAlignRows.gt-xs', 'gdAlignRows.gt-sm', 'gdAlignRows.gt-md',\n 'gdAlignRows.gt-lg'\n];\n/** @type {?} */\nconst selector$2 = `\n [gdAlignRows],\n [gdAlignRows.xs], [gdAlignRows.sm], [gdAlignRows.md],\n [gdAlignRows.lg], [gdAlignRows.xl], [gdAlignRows.lt-sm],\n [gdAlignRows.lt-md], [gdAlignRows.lt-lg], [gdAlignRows.lt-xl],\n [gdAlignRows.gt-xs], [gdAlignRows.gt-sm], [gdAlignRows.gt-md],\n [gdAlignRows.gt-lg]\n`;\n/**\n * 'row alignment' CSS Grid styling directive\n * Configures the alignment in the row direction\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-18\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-20\n */\nclass DefaultGridAlignRowsDirective extends GridAlignRowsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$2;\n }\n}\nDefaultGridAlignRowsDirective.ɵfac = function DefaultGridAlignRowsDirective_Factory(t) { return ɵDefaultGridAlignRowsDirective_BaseFactory(t || DefaultGridAlignRowsDirective); };\nDefaultGridAlignRowsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAlignRowsDirective, selectors: [[\"\", \"gdAlignRows\", \"\"], [\"\", \"gdAlignRows.xs\", \"\"], [\"\", \"gdAlignRows.sm\", \"\"], [\"\", \"gdAlignRows.md\", \"\"], [\"\", \"gdAlignRows.lg\", \"\"], [\"\", \"gdAlignRows.xl\", \"\"], [\"\", \"gdAlignRows.lt-sm\", \"\"], [\"\", \"gdAlignRows.lt-md\", \"\"], [\"\", \"gdAlignRows.lt-lg\", \"\"], [\"\", \"gdAlignRows.lt-xl\", \"\"], [\"\", \"gdAlignRows.gt-xs\", \"\"], [\"\", \"gdAlignRows.gt-sm\", \"\"], [\"\", \"gdAlignRows.gt-md\", \"\"], [\"\", \"gdAlignRows.gt-lg\", \"\"]], inputs: { gdAlignRows: \"gdAlignRows\", \"gdAlignRows.xs\": \"gdAlignRows.xs\", \"gdAlignRows.sm\": \"gdAlignRows.sm\", \"gdAlignRows.md\": \"gdAlignRows.md\", \"gdAlignRows.lg\": \"gdAlignRows.lg\", \"gdAlignRows.xl\": \"gdAlignRows.xl\", \"gdAlignRows.lt-sm\": \"gdAlignRows.lt-sm\", \"gdAlignRows.lt-md\": \"gdAlignRows.lt-md\", \"gdAlignRows.lt-lg\": \"gdAlignRows.lt-lg\", \"gdAlignRows.lt-xl\": \"gdAlignRows.lt-xl\", \"gdAlignRows.gt-xs\": \"gdAlignRows.gt-xs\", \"gdAlignRows.gt-sm\": \"gdAlignRows.gt-sm\", \"gdAlignRows.gt-md\": \"gdAlignRows.gt-md\", \"gdAlignRows.gt-lg\": \"gdAlignRows.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAlignRowsDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAlignRowsDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAlignRowsDirective, [{\n type: Directive,\n args: [{ selector: selector$2, inputs: inputs$2 }]\n }], null, null); })();\n/**\n * @param {?} align\n * @param {?} inline\n * @return {?}\n */\nfunction buildCss$2(align, inline) {\n /** @type {?} */\n const css = {};\n const [mainAxis, crossAxis] = align.split(' ');\n // Main axis\n switch (mainAxis) {\n case 'center':\n case 'space-around':\n case 'space-between':\n case 'space-evenly':\n case 'end':\n case 'start':\n case 'stretch':\n css['justify-content'] = mainAxis;\n break;\n default:\n css['justify-content'] = DEFAULT_MAIN$1; // default main axis\n break;\n }\n // Cross-axis\n switch (crossAxis) {\n case 'start':\n case 'center':\n case 'end':\n case 'stretch':\n css['justify-items'] = crossAxis;\n break;\n default: // 'stretch'\n css['justify-items'] = DEFAULT_CROSS$1; // default cross axis\n break;\n }\n css['display'] = inline ? 'inline-grid' : 'grid';\n return css;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/area/area.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE = 'auto';\nclass GridAreaStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n return { 'grid-area': input || DEFAULT_VALUE };\n }\n}\nGridAreaStyleBuilder.ɵfac = function GridAreaStyleBuilder_Factory(t) { return ɵGridAreaStyleBuilder_BaseFactory(t || GridAreaStyleBuilder); };\n/** @nocollapse */ GridAreaStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridAreaStyleBuilder_Factory() { return new GridAreaStyleBuilder(); }, token: GridAreaStyleBuilder, providedIn: \"root\" });\nconst ɵGridAreaStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAreaStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAreaStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAreaDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-area';\n this.styleCache = gridAreaCache;\n this.init();\n }\n}\nGridAreaDirective.ɵfac = function GridAreaDirective_Factory(t) { return new (t || GridAreaDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(GridAreaStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAreaDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAreaDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAreaDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: GridAreaStyleBuilder },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAreaDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: GridAreaStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst gridAreaCache = new Map();\n/** @type {?} */\nconst inputs$3 = [\n 'gdArea',\n 'gdArea.xs', 'gdArea.sm', 'gdArea.md', 'gdArea.lg', 'gdArea.xl',\n 'gdArea.lt-sm', 'gdArea.lt-md', 'gdArea.lt-lg', 'gdArea.lt-xl',\n 'gdArea.gt-xs', 'gdArea.gt-sm', 'gdArea.gt-md', 'gdArea.gt-lg'\n];\n/** @type {?} */\nconst selector$3 = `\n [gdArea],\n [gdArea.xs], [gdArea.sm], [gdArea.md], [gdArea.lg], [gdArea.xl],\n [gdArea.lt-sm], [gdArea.lt-md], [gdArea.lt-lg], [gdArea.lt-xl],\n [gdArea.gt-xs], [gdArea.gt-sm], [gdArea.gt-md], [gdArea.gt-lg]\n`;\n/**\n * 'grid-area' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-27\n */\nclass DefaultGridAreaDirective extends GridAreaDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$3;\n }\n}\nDefaultGridAreaDirective.ɵfac = function DefaultGridAreaDirective_Factory(t) { return ɵDefaultGridAreaDirective_BaseFactory(t || DefaultGridAreaDirective); };\nDefaultGridAreaDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAreaDirective, selectors: [[\"\", \"gdArea\", \"\"], [\"\", \"gdArea.xs\", \"\"], [\"\", \"gdArea.sm\", \"\"], [\"\", \"gdArea.md\", \"\"], [\"\", \"gdArea.lg\", \"\"], [\"\", \"gdArea.xl\", \"\"], [\"\", \"gdArea.lt-sm\", \"\"], [\"\", \"gdArea.lt-md\", \"\"], [\"\", \"gdArea.lt-lg\", \"\"], [\"\", \"gdArea.lt-xl\", \"\"], [\"\", \"gdArea.gt-xs\", \"\"], [\"\", \"gdArea.gt-sm\", \"\"], [\"\", \"gdArea.gt-md\", \"\"], [\"\", \"gdArea.gt-lg\", \"\"]], inputs: { gdArea: \"gdArea\", \"gdArea.xs\": \"gdArea.xs\", \"gdArea.sm\": \"gdArea.sm\", \"gdArea.md\": \"gdArea.md\", \"gdArea.lg\": \"gdArea.lg\", \"gdArea.xl\": \"gdArea.xl\", \"gdArea.lt-sm\": \"gdArea.lt-sm\", \"gdArea.lt-md\": \"gdArea.lt-md\", \"gdArea.lt-lg\": \"gdArea.lt-lg\", \"gdArea.lt-xl\": \"gdArea.lt-xl\", \"gdArea.gt-xs\": \"gdArea.gt-xs\", \"gdArea.gt-sm\": \"gdArea.gt-sm\", \"gdArea.gt-md\": \"gdArea.gt-md\", \"gdArea.gt-lg\": \"gdArea.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAreaDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAreaDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAreaDirective, [{\n type: Directive,\n args: [{ selector: selector$3, inputs: inputs$3 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/areas/areas.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$1 = 'none';\n/** @type {?} */\nconst DELIMETER = '|';\nclass GridAreasStyleBuiler extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n /** @type {?} */\n const areas = (input || DEFAULT_VALUE$1).split(DELIMETER).map((/**\n * @param {?} v\n * @return {?}\n */\n v => `\"${v.trim()}\"`));\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-template-areas': areas.join(' ')\n };\n }\n}\nGridAreasStyleBuiler.ɵfac = function GridAreasStyleBuiler_Factory(t) { return ɵGridAreasStyleBuiler_BaseFactory(t || GridAreasStyleBuiler); };\n/** @nocollapse */ GridAreasStyleBuiler.ɵprov = ɵɵdefineInjectable({ factory: function GridAreasStyleBuiler_Factory() { return new GridAreasStyleBuiler(); }, token: GridAreasStyleBuiler, providedIn: \"root\" });\nconst ɵGridAreasStyleBuiler_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAreasStyleBuiler);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAreasStyleBuiler, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAreasDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-areas';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? areasInlineCache : areasCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridAreasDirective.ɵfac = function GridAreasDirective_Factory(t) { return new (t || GridAreasDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(GridAreasStyleBuiler), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAreasDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAreasDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAreasDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: GridAreasStyleBuiler },\n { type: MediaMarshaller }\n];\nGridAreasDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAreasDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: GridAreasStyleBuiler }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst areasCache = new Map();\n/** @type {?} */\nconst areasInlineCache = new Map();\n/** @type {?} */\nconst inputs$4 = [\n 'gdAreas',\n 'gdAreas.xs', 'gdAreas.sm', 'gdAreas.md', 'gdAreas.lg', 'gdAreas.xl',\n 'gdAreas.lt-sm', 'gdAreas.lt-md', 'gdAreas.lt-lg', 'gdAreas.lt-xl',\n 'gdAreas.gt-xs', 'gdAreas.gt-sm', 'gdAreas.gt-md', 'gdAreas.gt-lg'\n];\n/** @type {?} */\nconst selector$4 = `\n [gdAreas],\n [gdAreas.xs], [gdAreas.sm], [gdAreas.md], [gdAreas.lg], [gdAreas.xl],\n [gdAreas.lt-sm], [gdAreas.lt-md], [gdAreas.lt-lg], [gdAreas.lt-xl],\n [gdAreas.gt-xs], [gdAreas.gt-sm], [gdAreas.gt-md], [gdAreas.gt-lg]\n`;\n/**\n * 'grid-template-areas' CSS Grid styling directive\n * Configures the names of elements within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-14\n */\nclass DefaultGridAreasDirective extends GridAreasDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$4;\n }\n}\nDefaultGridAreasDirective.ɵfac = function DefaultGridAreasDirective_Factory(t) { return ɵDefaultGridAreasDirective_BaseFactory(t || DefaultGridAreasDirective); };\nDefaultGridAreasDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAreasDirective, selectors: [[\"\", \"gdAreas\", \"\"], [\"\", \"gdAreas.xs\", \"\"], [\"\", \"gdAreas.sm\", \"\"], [\"\", \"gdAreas.md\", \"\"], [\"\", \"gdAreas.lg\", \"\"], [\"\", \"gdAreas.xl\", \"\"], [\"\", \"gdAreas.lt-sm\", \"\"], [\"\", \"gdAreas.lt-md\", \"\"], [\"\", \"gdAreas.lt-lg\", \"\"], [\"\", \"gdAreas.lt-xl\", \"\"], [\"\", \"gdAreas.gt-xs\", \"\"], [\"\", \"gdAreas.gt-sm\", \"\"], [\"\", \"gdAreas.gt-md\", \"\"], [\"\", \"gdAreas.gt-lg\", \"\"]], inputs: { gdAreas: \"gdAreas\", \"gdAreas.xs\": \"gdAreas.xs\", \"gdAreas.sm\": \"gdAreas.sm\", \"gdAreas.md\": \"gdAreas.md\", \"gdAreas.lg\": \"gdAreas.lg\", \"gdAreas.xl\": \"gdAreas.xl\", \"gdAreas.lt-sm\": \"gdAreas.lt-sm\", \"gdAreas.lt-md\": \"gdAreas.lt-md\", \"gdAreas.lt-lg\": \"gdAreas.lt-lg\", \"gdAreas.lt-xl\": \"gdAreas.lt-xl\", \"gdAreas.gt-xs\": \"gdAreas.gt-xs\", \"gdAreas.gt-sm\": \"gdAreas.gt-sm\", \"gdAreas.gt-md\": \"gdAreas.gt-md\", \"gdAreas.gt-lg\": \"gdAreas.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAreasDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAreasDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAreasDirective, [{\n type: Directive,\n args: [{ selector: selector$4, inputs: inputs$4 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/auto/auto.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$2 = 'initial';\nclass GridAutoStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n let [direction, dense] = (input || DEFAULT_VALUE$2).split(' ');\n if (direction !== 'column' && direction !== 'row' && direction !== 'dense') {\n direction = 'row';\n }\n dense = (dense === 'dense' && direction !== 'dense') ? ' dense' : '';\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-flow': direction + dense\n };\n }\n}\nGridAutoStyleBuilder.ɵfac = function GridAutoStyleBuilder_Factory(t) { return ɵGridAutoStyleBuilder_BaseFactory(t || GridAutoStyleBuilder); };\n/** @nocollapse */ GridAutoStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridAutoStyleBuilder_Factory() { return new GridAutoStyleBuilder(); }, token: GridAutoStyleBuilder, providedIn: \"root\" });\nconst ɵGridAutoStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridAutoStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAutoStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridAutoDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this._inline = false;\n this.DIRECTIVE_KEY = 'grid-auto';\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? autoInlineCache : autoCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridAutoDirective.ɵfac = function GridAutoDirective_Factory(t) { return new (t || GridAutoDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridAutoStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridAutoDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridAutoDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridAutoDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridAutoStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\nGridAutoDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridAutoDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridAutoStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst autoCache = new Map();\n/** @type {?} */\nconst autoInlineCache = new Map();\n/** @type {?} */\nconst inputs$5 = [\n 'gdAuto',\n 'gdAuto.xs', 'gdAuto.sm', 'gdAuto.md', 'gdAuto.lg', 'gdAuto.xl',\n 'gdAuto.lt-sm', 'gdAuto.lt-md', 'gdAuto.lt-lg', 'gdAuto.lt-xl',\n 'gdAuto.gt-xs', 'gdAuto.gt-sm', 'gdAuto.gt-md', 'gdAuto.gt-lg'\n];\n/** @type {?} */\nconst selector$5 = `\n [gdAuto],\n [gdAuto.xs], [gdAuto.sm], [gdAuto.md], [gdAuto.lg], [gdAuto.xl],\n [gdAuto.lt-sm], [gdAuto.lt-md], [gdAuto.lt-lg], [gdAuto.lt-xl],\n [gdAuto.gt-xs], [gdAuto.gt-sm], [gdAuto.gt-md], [gdAuto.gt-lg]\n`;\n/**\n * 'grid-auto-flow' CSS Grid styling directive\n * Configures the auto placement algorithm for the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-23\n */\nclass DefaultGridAutoDirective extends GridAutoDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$5;\n }\n}\nDefaultGridAutoDirective.ɵfac = function DefaultGridAutoDirective_Factory(t) { return ɵDefaultGridAutoDirective_BaseFactory(t || DefaultGridAutoDirective); };\nDefaultGridAutoDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridAutoDirective, selectors: [[\"\", \"gdAuto\", \"\"], [\"\", \"gdAuto.xs\", \"\"], [\"\", \"gdAuto.sm\", \"\"], [\"\", \"gdAuto.md\", \"\"], [\"\", \"gdAuto.lg\", \"\"], [\"\", \"gdAuto.xl\", \"\"], [\"\", \"gdAuto.lt-sm\", \"\"], [\"\", \"gdAuto.lt-md\", \"\"], [\"\", \"gdAuto.lt-lg\", \"\"], [\"\", \"gdAuto.lt-xl\", \"\"], [\"\", \"gdAuto.gt-xs\", \"\"], [\"\", \"gdAuto.gt-sm\", \"\"], [\"\", \"gdAuto.gt-md\", \"\"], [\"\", \"gdAuto.gt-lg\", \"\"]], inputs: { gdAuto: \"gdAuto\", \"gdAuto.xs\": \"gdAuto.xs\", \"gdAuto.sm\": \"gdAuto.sm\", \"gdAuto.md\": \"gdAuto.md\", \"gdAuto.lg\": \"gdAuto.lg\", \"gdAuto.xl\": \"gdAuto.xl\", \"gdAuto.lt-sm\": \"gdAuto.lt-sm\", \"gdAuto.lt-md\": \"gdAuto.lt-md\", \"gdAuto.lt-lg\": \"gdAuto.lt-lg\", \"gdAuto.lt-xl\": \"gdAuto.lt-xl\", \"gdAuto.gt-xs\": \"gdAuto.gt-xs\", \"gdAuto.gt-sm\": \"gdAuto.gt-sm\", \"gdAuto.gt-md\": \"gdAuto.gt-md\", \"gdAuto.gt-lg\": \"gdAuto.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridAutoDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridAutoDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridAutoDirective, [{\n type: Directive,\n args: [{ selector: selector$5, inputs: inputs$5 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/column/column.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$3 = 'auto';\nclass GridColumnStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n return { 'grid-column': input || DEFAULT_VALUE$3 };\n }\n}\nGridColumnStyleBuilder.ɵfac = function GridColumnStyleBuilder_Factory(t) { return ɵGridColumnStyleBuilder_BaseFactory(t || GridColumnStyleBuilder); };\n/** @nocollapse */ GridColumnStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridColumnStyleBuilder_Factory() { return new GridColumnStyleBuilder(); }, token: GridColumnStyleBuilder, providedIn: \"root\" });\nconst ɵGridColumnStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridColumnStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridColumnStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridColumnDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-column';\n this.styleCache = columnCache;\n this.init();\n }\n}\nGridColumnDirective.ɵfac = function GridColumnDirective_Factory(t) { return new (t || GridColumnDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridColumnStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridColumnDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridColumnDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridColumnDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridColumnStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridColumnDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridColumnStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst columnCache = new Map();\n/** @type {?} */\nconst inputs$6 = [\n 'gdColumn',\n 'gdColumn.xs', 'gdColumn.sm', 'gdColumn.md', 'gdColumn.lg', 'gdColumn.xl',\n 'gdColumn.lt-sm', 'gdColumn.lt-md', 'gdColumn.lt-lg', 'gdColumn.lt-xl',\n 'gdColumn.gt-xs', 'gdColumn.gt-sm', 'gdColumn.gt-md', 'gdColumn.gt-lg'\n];\n/** @type {?} */\nconst selector$6 = `\n [gdColumn],\n [gdColumn.xs], [gdColumn.sm], [gdColumn.md], [gdColumn.lg], [gdColumn.xl],\n [gdColumn.lt-sm], [gdColumn.lt-md], [gdColumn.lt-lg], [gdColumn.lt-xl],\n [gdColumn.gt-xs], [gdColumn.gt-sm], [gdColumn.gt-md], [gdColumn.gt-lg]\n`;\n/**\n * 'grid-column' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\nclass DefaultGridColumnDirective extends GridColumnDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$6;\n }\n}\nDefaultGridColumnDirective.ɵfac = function DefaultGridColumnDirective_Factory(t) { return ɵDefaultGridColumnDirective_BaseFactory(t || DefaultGridColumnDirective); };\nDefaultGridColumnDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridColumnDirective, selectors: [[\"\", \"gdColumn\", \"\"], [\"\", \"gdColumn.xs\", \"\"], [\"\", \"gdColumn.sm\", \"\"], [\"\", \"gdColumn.md\", \"\"], [\"\", \"gdColumn.lg\", \"\"], [\"\", \"gdColumn.xl\", \"\"], [\"\", \"gdColumn.lt-sm\", \"\"], [\"\", \"gdColumn.lt-md\", \"\"], [\"\", \"gdColumn.lt-lg\", \"\"], [\"\", \"gdColumn.lt-xl\", \"\"], [\"\", \"gdColumn.gt-xs\", \"\"], [\"\", \"gdColumn.gt-sm\", \"\"], [\"\", \"gdColumn.gt-md\", \"\"], [\"\", \"gdColumn.gt-lg\", \"\"]], inputs: { gdColumn: \"gdColumn\", \"gdColumn.xs\": \"gdColumn.xs\", \"gdColumn.sm\": \"gdColumn.sm\", \"gdColumn.md\": \"gdColumn.md\", \"gdColumn.lg\": \"gdColumn.lg\", \"gdColumn.xl\": \"gdColumn.xl\", \"gdColumn.lt-sm\": \"gdColumn.lt-sm\", \"gdColumn.lt-md\": \"gdColumn.lt-md\", \"gdColumn.lt-lg\": \"gdColumn.lt-lg\", \"gdColumn.lt-xl\": \"gdColumn.lt-xl\", \"gdColumn.gt-xs\": \"gdColumn.gt-xs\", \"gdColumn.gt-sm\": \"gdColumn.gt-sm\", \"gdColumn.gt-md\": \"gdColumn.gt-md\", \"gdColumn.gt-lg\": \"gdColumn.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridColumnDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridColumnDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridColumnDirective, [{\n type: Directive,\n args: [{ selector: selector$6, inputs: inputs$6 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/columns/columns.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$4 = 'none';\n/** @type {?} */\nconst AUTO_SPECIFIER = '!';\nclass GridColumnsStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n input = input || DEFAULT_VALUE$4;\n /** @type {?} */\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER));\n auto = true;\n }\n /** @type {?} */\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-columns': '',\n 'grid-template-columns': '',\n };\n /** @type {?} */\n const key = (auto ? 'grid-auto-columns' : 'grid-template-columns');\n css[key] = input;\n return css;\n }\n}\nGridColumnsStyleBuilder.ɵfac = function GridColumnsStyleBuilder_Factory(t) { return ɵGridColumnsStyleBuilder_BaseFactory(t || GridColumnsStyleBuilder); };\n/** @nocollapse */ GridColumnsStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridColumnsStyleBuilder_Factory() { return new GridColumnsStyleBuilder(); }, token: GridColumnsStyleBuilder, providedIn: \"root\" });\nconst ɵGridColumnsStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridColumnsStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridColumnsStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridColumnsDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-columns';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? columnsInlineCache : columnsCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridColumnsDirective.ɵfac = function GridColumnsDirective_Factory(t) { return new (t || GridColumnsDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridColumnsStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridColumnsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridColumnsDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridColumnsDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridColumnsStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\nGridColumnsDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridColumnsDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridColumnsStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst columnsCache = new Map();\n/** @type {?} */\nconst columnsInlineCache = new Map();\n/** @type {?} */\nconst inputs$7 = [\n 'gdColumns',\n 'gdColumns.xs', 'gdColumns.sm', 'gdColumns.md', 'gdColumns.lg', 'gdColumns.xl',\n 'gdColumns.lt-sm', 'gdColumns.lt-md', 'gdColumns.lt-lg', 'gdColumns.lt-xl',\n 'gdColumns.gt-xs', 'gdColumns.gt-sm', 'gdColumns.gt-md', 'gdColumns.gt-lg'\n];\n/** @type {?} */\nconst selector$7 = `\n [gdColumns],\n [gdColumns.xs], [gdColumns.sm], [gdColumns.md], [gdColumns.lg], [gdColumns.xl],\n [gdColumns.lt-sm], [gdColumns.lt-md], [gdColumns.lt-lg], [gdColumns.lt-xl],\n [gdColumns.gt-xs], [gdColumns.gt-sm], [gdColumns.gt-md], [gdColumns.gt-lg]\n`;\n/**\n * 'grid-template-columns' CSS Grid styling directive\n * Configures the sizing for the columns in the grid\n * Syntax: [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\nclass DefaultGridColumnsDirective extends GridColumnsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$7;\n }\n}\nDefaultGridColumnsDirective.ɵfac = function DefaultGridColumnsDirective_Factory(t) { return ɵDefaultGridColumnsDirective_BaseFactory(t || DefaultGridColumnsDirective); };\nDefaultGridColumnsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridColumnsDirective, selectors: [[\"\", \"gdColumns\", \"\"], [\"\", \"gdColumns.xs\", \"\"], [\"\", \"gdColumns.sm\", \"\"], [\"\", \"gdColumns.md\", \"\"], [\"\", \"gdColumns.lg\", \"\"], [\"\", \"gdColumns.xl\", \"\"], [\"\", \"gdColumns.lt-sm\", \"\"], [\"\", \"gdColumns.lt-md\", \"\"], [\"\", \"gdColumns.lt-lg\", \"\"], [\"\", \"gdColumns.lt-xl\", \"\"], [\"\", \"gdColumns.gt-xs\", \"\"], [\"\", \"gdColumns.gt-sm\", \"\"], [\"\", \"gdColumns.gt-md\", \"\"], [\"\", \"gdColumns.gt-lg\", \"\"]], inputs: { gdColumns: \"gdColumns\", \"gdColumns.xs\": \"gdColumns.xs\", \"gdColumns.sm\": \"gdColumns.sm\", \"gdColumns.md\": \"gdColumns.md\", \"gdColumns.lg\": \"gdColumns.lg\", \"gdColumns.xl\": \"gdColumns.xl\", \"gdColumns.lt-sm\": \"gdColumns.lt-sm\", \"gdColumns.lt-md\": \"gdColumns.lt-md\", \"gdColumns.lt-lg\": \"gdColumns.lt-lg\", \"gdColumns.lt-xl\": \"gdColumns.lt-xl\", \"gdColumns.gt-xs\": \"gdColumns.gt-xs\", \"gdColumns.gt-sm\": \"gdColumns.gt-sm\", \"gdColumns.gt-md\": \"gdColumns.gt-md\", \"gdColumns.gt-lg\": \"gdColumns.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridColumnsDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridColumnsDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridColumnsDirective, [{\n type: Directive,\n args: [{ selector: selector$7, inputs: inputs$7 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/gap/gap.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$5 = '0';\nclass GridGapStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n return {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-gap': input || DEFAULT_VALUE$5\n };\n }\n}\nGridGapStyleBuilder.ɵfac = function GridGapStyleBuilder_Factory(t) { return ɵGridGapStyleBuilder_BaseFactory(t || GridGapStyleBuilder); };\n/** @nocollapse */ GridGapStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridGapStyleBuilder_Factory() { return new GridGapStyleBuilder(); }, token: GridGapStyleBuilder, providedIn: \"root\" });\nconst ɵGridGapStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridGapStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridGapStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridGapDirective extends BaseDirective2 {\n /**\n * @param {?} elRef\n * @param {?} styleUtils\n * @param {?} styleBuilder\n * @param {?} marshal\n */\n constructor(elRef, styleUtils, styleBuilder, marshal) {\n super(elRef, styleBuilder, styleUtils, marshal);\n this.DIRECTIVE_KEY = 'grid-gap';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? gapInlineCache : gapCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridGapDirective.ɵfac = function GridGapDirective_Factory(t) { return new (t || GridGapDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(GridGapStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridGapDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridGapDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridGapDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: StyleUtils },\n { type: GridGapStyleBuilder },\n { type: MediaMarshaller }\n];\nGridGapDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridGapDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.StyleUtils }, { type: GridGapStyleBuilder }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst gapCache = new Map();\n/** @type {?} */\nconst gapInlineCache = new Map();\n/** @type {?} */\nconst inputs$8 = [\n 'gdGap',\n 'gdGap.xs', 'gdGap.sm', 'gdGap.md', 'gdGap.lg', 'gdGap.xl',\n 'gdGap.lt-sm', 'gdGap.lt-md', 'gdGap.lt-lg', 'gdGap.lt-xl',\n 'gdGap.gt-xs', 'gdGap.gt-sm', 'gdGap.gt-md', 'gdGap.gt-lg'\n];\n/** @type {?} */\nconst selector$8 = `\n [gdGap],\n [gdGap.xs], [gdGap.sm], [gdGap.md], [gdGap.lg], [gdGap.xl],\n [gdGap.lt-sm], [gdGap.lt-md], [gdGap.lt-lg], [gdGap.lt-xl],\n [gdGap.gt-xs], [gdGap.gt-sm], [gdGap.gt-md], [gdGap.gt-lg]\n`;\n/**\n * 'grid-gap' CSS Grid styling directive\n * Configures the gap between items in the grid\n * Syntax: []\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-17\n */\nclass DefaultGridGapDirective extends GridGapDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$8;\n }\n}\nDefaultGridGapDirective.ɵfac = function DefaultGridGapDirective_Factory(t) { return ɵDefaultGridGapDirective_BaseFactory(t || DefaultGridGapDirective); };\nDefaultGridGapDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridGapDirective, selectors: [[\"\", \"gdGap\", \"\"], [\"\", \"gdGap.xs\", \"\"], [\"\", \"gdGap.sm\", \"\"], [\"\", \"gdGap.md\", \"\"], [\"\", \"gdGap.lg\", \"\"], [\"\", \"gdGap.xl\", \"\"], [\"\", \"gdGap.lt-sm\", \"\"], [\"\", \"gdGap.lt-md\", \"\"], [\"\", \"gdGap.lt-lg\", \"\"], [\"\", \"gdGap.lt-xl\", \"\"], [\"\", \"gdGap.gt-xs\", \"\"], [\"\", \"gdGap.gt-sm\", \"\"], [\"\", \"gdGap.gt-md\", \"\"], [\"\", \"gdGap.gt-lg\", \"\"]], inputs: { gdGap: \"gdGap\", \"gdGap.xs\": \"gdGap.xs\", \"gdGap.sm\": \"gdGap.sm\", \"gdGap.md\": \"gdGap.md\", \"gdGap.lg\": \"gdGap.lg\", \"gdGap.xl\": \"gdGap.xl\", \"gdGap.lt-sm\": \"gdGap.lt-sm\", \"gdGap.lt-md\": \"gdGap.lt-md\", \"gdGap.lt-lg\": \"gdGap.lt-lg\", \"gdGap.lt-xl\": \"gdGap.lt-xl\", \"gdGap.gt-xs\": \"gdGap.gt-xs\", \"gdGap.gt-sm\": \"gdGap.gt-sm\", \"gdGap.gt-md\": \"gdGap.gt-md\", \"gdGap.gt-lg\": \"gdGap.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridGapDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridGapDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridGapDirective, [{\n type: Directive,\n args: [{ selector: selector$8, inputs: inputs$8 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/row/row.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$6 = 'auto';\nclass GridRowStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @return {?}\n */\n buildStyles(input) {\n return { 'grid-row': input || DEFAULT_VALUE$6 };\n }\n}\nGridRowStyleBuilder.ɵfac = function GridRowStyleBuilder_Factory(t) { return ɵGridRowStyleBuilder_BaseFactory(t || GridRowStyleBuilder); };\n/** @nocollapse */ GridRowStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridRowStyleBuilder_Factory() { return new GridRowStyleBuilder(); }, token: GridRowStyleBuilder, providedIn: \"root\" });\nconst ɵGridRowStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridRowStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridRowStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridRowDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-row';\n this.styleCache = rowCache;\n this.init();\n }\n}\nGridRowDirective.ɵfac = function GridRowDirective_Factory(t) { return new (t || GridRowDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridRowStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridRowDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridRowDirective, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridRowDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridRowStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridRowDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridRowStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, null); })();\n/** @type {?} */\nconst rowCache = new Map();\n/** @type {?} */\nconst inputs$9 = [\n 'gdRow',\n 'gdRow.xs', 'gdRow.sm', 'gdRow.md', 'gdRow.lg', 'gdRow.xl',\n 'gdRow.lt-sm', 'gdRow.lt-md', 'gdRow.lt-lg', 'gdRow.lt-xl',\n 'gdRow.gt-xs', 'gdRow.gt-sm', 'gdRow.gt-md', 'gdRow.gt-lg'\n];\n/** @type {?} */\nconst selector$9 = `\n [gdRow],\n [gdRow.xs], [gdRow.sm], [gdRow.md], [gdRow.lg], [gdRow.xl],\n [gdRow.lt-sm], [gdRow.lt-md], [gdRow.lt-lg], [gdRow.lt-xl],\n [gdRow.gt-xs], [gdRow.gt-sm], [gdRow.gt-md], [gdRow.gt-lg]\n`;\n/**\n * 'grid-row' CSS Grid styling directive\n * Configures the name or position of an element within the grid\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-26\n */\nclass DefaultGridRowDirective extends GridRowDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$9;\n }\n}\nDefaultGridRowDirective.ɵfac = function DefaultGridRowDirective_Factory(t) { return ɵDefaultGridRowDirective_BaseFactory(t || DefaultGridRowDirective); };\nDefaultGridRowDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridRowDirective, selectors: [[\"\", \"gdRow\", \"\"], [\"\", \"gdRow.xs\", \"\"], [\"\", \"gdRow.sm\", \"\"], [\"\", \"gdRow.md\", \"\"], [\"\", \"gdRow.lg\", \"\"], [\"\", \"gdRow.xl\", \"\"], [\"\", \"gdRow.lt-sm\", \"\"], [\"\", \"gdRow.lt-md\", \"\"], [\"\", \"gdRow.lt-lg\", \"\"], [\"\", \"gdRow.lt-xl\", \"\"], [\"\", \"gdRow.gt-xs\", \"\"], [\"\", \"gdRow.gt-sm\", \"\"], [\"\", \"gdRow.gt-md\", \"\"], [\"\", \"gdRow.gt-lg\", \"\"]], inputs: { gdRow: \"gdRow\", \"gdRow.xs\": \"gdRow.xs\", \"gdRow.sm\": \"gdRow.sm\", \"gdRow.md\": \"gdRow.md\", \"gdRow.lg\": \"gdRow.lg\", \"gdRow.xl\": \"gdRow.xl\", \"gdRow.lt-sm\": \"gdRow.lt-sm\", \"gdRow.lt-md\": \"gdRow.lt-md\", \"gdRow.lt-lg\": \"gdRow.lt-lg\", \"gdRow.lt-xl\": \"gdRow.lt-xl\", \"gdRow.gt-xs\": \"gdRow.gt-xs\", \"gdRow.gt-sm\": \"gdRow.gt-sm\", \"gdRow.gt-md\": \"gdRow.gt-md\", \"gdRow.gt-lg\": \"gdRow.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridRowDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridRowDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridRowDirective, [{\n type: Directive,\n args: [{ selector: selector$9, inputs: inputs$9 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/rows/rows.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_VALUE$7 = 'none';\n/** @type {?} */\nconst AUTO_SPECIFIER$1 = '!';\nclass GridRowsStyleBuilder extends StyleBuilder {\n /**\n * @param {?} input\n * @param {?} parent\n * @return {?}\n */\n buildStyles(input, parent) {\n input = input || DEFAULT_VALUE$7;\n /** @type {?} */\n let auto = false;\n if (input.endsWith(AUTO_SPECIFIER$1)) {\n input = input.substring(0, input.indexOf(AUTO_SPECIFIER$1));\n auto = true;\n }\n /** @type {?} */\n const css = {\n 'display': parent.inline ? 'inline-grid' : 'grid',\n 'grid-auto-rows': '',\n 'grid-template-rows': '',\n };\n /** @type {?} */\n const key = (auto ? 'grid-auto-rows' : 'grid-template-rows');\n css[key] = input;\n return css;\n }\n}\nGridRowsStyleBuilder.ɵfac = function GridRowsStyleBuilder_Factory(t) { return ɵGridRowsStyleBuilder_BaseFactory(t || GridRowsStyleBuilder); };\n/** @nocollapse */ GridRowsStyleBuilder.ɵprov = ɵɵdefineInjectable({ factory: function GridRowsStyleBuilder_Factory() { return new GridRowsStyleBuilder(); }, token: GridRowsStyleBuilder, providedIn: \"root\" });\nconst ɵGridRowsStyleBuilder_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(GridRowsStyleBuilder);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridRowsStyleBuilder, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], null, null); })();\nclass GridRowsDirective extends BaseDirective2 {\n /**\n * @param {?} elementRef\n * @param {?} styleBuilder\n * @param {?} styler\n * @param {?} marshal\n */\n constructor(elementRef, styleBuilder, styler, marshal) {\n super(elementRef, styleBuilder, styler, marshal);\n this.DIRECTIVE_KEY = 'grid-rows';\n this._inline = false;\n this.init();\n }\n /**\n * @return {?}\n */\n get inline() { return this._inline; }\n /**\n * @param {?} val\n * @return {?}\n */\n set inline(val) { this._inline = coerceBooleanProperty(val); }\n // *********************************************\n // Protected methods\n // *********************************************\n /**\n * @protected\n * @param {?} value\n * @return {?}\n */\n updateWithValue(value) {\n this.styleCache = this.inline ? rowsInlineCache : rowsCache;\n this.addStyles(value, { inline: this.inline });\n }\n}\nGridRowsDirective.ɵfac = function GridRowsDirective_Factory(t) { return new (t || GridRowsDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GridRowsStyleBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.StyleUtils), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.MediaMarshaller)); };\nGridRowsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridRowsDirective, inputs: { inline: [\"gdInline\", \"inline\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGridRowsDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: GridRowsStyleBuilder },\n { type: StyleUtils },\n { type: MediaMarshaller }\n];\nGridRowsDirective.propDecorators = {\n inline: [{ type: Input, args: ['gdInline',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridRowsDirective, [{\n type: Directive\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: GridRowsStyleBuilder }, { type: ɵngcc1.StyleUtils }, { type: ɵngcc1.MediaMarshaller }]; }, { inline: [{\n type: Input,\n args: ['gdInline']\n }] }); })();\n/** @type {?} */\nconst rowsCache = new Map();\n/** @type {?} */\nconst rowsInlineCache = new Map();\n/** @type {?} */\nconst inputs$10 = [\n 'gdRows',\n 'gdRows.xs', 'gdRows.sm', 'gdRows.md', 'gdRows.lg', 'gdRows.xl',\n 'gdRows.lt-sm', 'gdRows.lt-md', 'gdRows.lt-lg', 'gdRows.lt-xl',\n 'gdRows.gt-xs', 'gdRows.gt-sm', 'gdRows.gt-md', 'gdRows.gt-lg'\n];\n/** @type {?} */\nconst selector$10 = `\n [gdRows],\n [gdRows.xs], [gdRows.sm], [gdRows.md], [gdRows.lg], [gdRows.xl],\n [gdRows.lt-sm], [gdRows.lt-md], [gdRows.lt-lg], [gdRows.lt-xl],\n [gdRows.gt-xs], [gdRows.gt-sm], [gdRows.gt-md], [gdRows.gt-lg]\n`;\n/**\n * 'grid-template-rows' CSS Grid styling directive\n * Configures the sizing for the rows in the grid\n * Syntax: [auto]\n * @see https://css-tricks.com/snippets/css/complete-guide-grid/#article-header-id-13\n */\nclass DefaultGridRowsDirective extends GridRowsDirective {\n constructor() {\n super(...arguments);\n this.inputs = inputs$10;\n }\n}\nDefaultGridRowsDirective.ɵfac = function DefaultGridRowsDirective_Factory(t) { return ɵDefaultGridRowsDirective_BaseFactory(t || DefaultGridRowsDirective); };\nDefaultGridRowsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DefaultGridRowsDirective, selectors: [[\"\", \"gdRows\", \"\"], [\"\", \"gdRows.xs\", \"\"], [\"\", \"gdRows.sm\", \"\"], [\"\", \"gdRows.md\", \"\"], [\"\", \"gdRows.lg\", \"\"], [\"\", \"gdRows.xl\", \"\"], [\"\", \"gdRows.lt-sm\", \"\"], [\"\", \"gdRows.lt-md\", \"\"], [\"\", \"gdRows.lt-lg\", \"\"], [\"\", \"gdRows.lt-xl\", \"\"], [\"\", \"gdRows.gt-xs\", \"\"], [\"\", \"gdRows.gt-sm\", \"\"], [\"\", \"gdRows.gt-md\", \"\"], [\"\", \"gdRows.gt-lg\", \"\"]], inputs: { gdRows: \"gdRows\", \"gdRows.xs\": \"gdRows.xs\", \"gdRows.sm\": \"gdRows.sm\", \"gdRows.md\": \"gdRows.md\", \"gdRows.lg\": \"gdRows.lg\", \"gdRows.xl\": \"gdRows.xl\", \"gdRows.lt-sm\": \"gdRows.lt-sm\", \"gdRows.lt-md\": \"gdRows.lt-md\", \"gdRows.lt-lg\": \"gdRows.lt-lg\", \"gdRows.lt-xl\": \"gdRows.lt-xl\", \"gdRows.gt-xs\": \"gdRows.gt-xs\", \"gdRows.gt-sm\": \"gdRows.gt-sm\", \"gdRows.gt-md\": \"gdRows.gt-md\", \"gdRows.gt-lg\": \"gdRows.gt-lg\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵDefaultGridRowsDirective_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DefaultGridRowsDirective);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DefaultGridRowsDirective, [{\n type: Directive,\n args: [{ selector: selector$10, inputs: inputs$10 }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst ALL_DIRECTIVES = [\n DefaultGridAlignDirective,\n DefaultGridAlignColumnsDirective,\n DefaultGridAlignRowsDirective,\n DefaultGridAreaDirective,\n DefaultGridAreasDirective,\n DefaultGridAutoDirective,\n DefaultGridColumnDirective,\n DefaultGridColumnsDirective,\n DefaultGridGapDirective,\n DefaultGridRowDirective,\n DefaultGridRowsDirective,\n];\n/**\n * *****************************************************************\n * Define module for the CSS Grid API\n * *****************************************************************\n */\nclass GridModule {\n}\nGridModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: GridModule });\nGridModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function GridModule_Factory(t) { return new (t || GridModule)(); }, imports: [[CoreModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(GridModule, { declarations: function () { return [DefaultGridAlignDirective, DefaultGridAlignColumnsDirective, DefaultGridAlignRowsDirective, DefaultGridAreaDirective, DefaultGridAreasDirective, DefaultGridAutoDirective, DefaultGridColumnDirective, DefaultGridColumnsDirective, DefaultGridGapDirective, DefaultGridRowDirective, DefaultGridRowsDirective]; }, imports: function () { return [CoreModule]; }, exports: function () { return [DefaultGridAlignDirective, DefaultGridAlignColumnsDirective, DefaultGridAlignRowsDirective, DefaultGridAreaDirective, DefaultGridAreasDirective, DefaultGridAutoDirective, DefaultGridColumnDirective, DefaultGridColumnsDirective, DefaultGridGapDirective, DefaultGridRowDirective, DefaultGridRowsDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridModule, [{\n type: NgModule,\n args: [{\n imports: [CoreModule],\n declarations: [...ALL_DIRECTIVES],\n exports: [...ALL_DIRECTIVES]\n }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/public-api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: grid/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { GridModule, DefaultGridAlignColumnsDirective as ɵgrid_privatef, GridAlignColumnsDirective as ɵgrid_privatee, GridAlignColumnsStyleBuilder as ɵgrid_privated, DefaultGridAlignRowsDirective as ɵgrid_privatei, GridAlignRowsDirective as ɵgrid_privateh, GridAlignRowsStyleBuilder as ɵgrid_privateg, DefaultGridAreaDirective as ɵgrid_privatel, GridAreaDirective as ɵgrid_privatek, GridAreaStyleBuilder as ɵgrid_privatej, DefaultGridAreasDirective as ɵgrid_privateo, GridAreasDirective as ɵgrid_privaten, GridAreasStyleBuiler as ɵgrid_privatem, DefaultGridAutoDirective as ɵgrid_privater, GridAutoDirective as ɵgrid_privateq, GridAutoStyleBuilder as ɵgrid_privatep, DefaultGridColumnDirective as ɵgrid_privateu, GridColumnDirective as ɵgrid_privatet, GridColumnStyleBuilder as ɵgrid_privates, DefaultGridColumnsDirective as ɵgrid_privatex, GridColumnsDirective as ɵgrid_privatew, GridColumnsStyleBuilder as ɵgrid_privatev, DefaultGridGapDirective as ɵgrid_privateba, GridGapDirective as ɵgrid_privatez, GridGapStyleBuilder as ɵgrid_privatey, DefaultGridAlignDirective as ɵgrid_privatec, GridAlignDirective as ɵgrid_privateb, GridAlignStyleBuilder as ɵgrid_privatea, DefaultGridRowDirective as ɵgrid_privatebd, GridRowDirective as ɵgrid_privatebc, GridRowStyleBuilder as ɵgrid_privatebb, DefaultGridRowsDirective as ɵgrid_privatebg, GridRowsDirective as ɵgrid_privatebf, GridRowsStyleBuilder as ɵgrid_privatebe };\n\n//# sourceMappingURL=grid.js.map","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { Version, Inject, NgModule, PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\nimport { SERVER_TOKEN, LAYOUT_CONFIG, DEFAULT_CONFIG, BREAKPOINT } from '@angular/flex-layout/core';\nimport * as ɵngcc0 from '@angular/core';\nexport { ɵMatchMedia, ɵMockMatchMedia, ɵMockMatchMediaProvider, CoreModule, removeStyles, BROWSER_PROVIDER, CLASS_NAME, MediaChange, StylesheetMap, DEFAULT_CONFIG, LAYOUT_CONFIG, SERVER_TOKEN, BREAKPOINT, mergeAlias, BaseDirective2, DEFAULT_BREAKPOINTS, ScreenTypes, ORIENTATION_BREAKPOINTS, BreakPointRegistry, BREAKPOINTS, MediaObserver, MediaTrigger, sortDescendingPriority, sortAscendingPriority, coerceArray, StyleUtils, StyleBuilder, validateBasis, MediaMarshaller, BREAKPOINT_PRINT, PrintHook } from '@angular/flex-layout/core';\nimport { ExtendedModule } from '@angular/flex-layout/extended';\nexport { ExtendedModule, ClassDirective, DefaultClassDirective, ImgSrcStyleBuilder, ImgSrcDirective, DefaultImgSrcDirective, ShowHideStyleBuilder, ShowHideDirective, DefaultShowHideDirective, StyleDirective, DefaultStyleDirective } from '@angular/flex-layout/extended';\nimport { FlexModule } from '@angular/flex-layout/flex';\nexport { FlexModule, FlexStyleBuilder, FlexDirective, DefaultFlexDirective, FlexAlignStyleBuilder, FlexAlignDirective, DefaultFlexAlignDirective, FlexFillStyleBuilder, FlexFillDirective, FlexOffsetStyleBuilder, FlexOffsetDirective, DefaultFlexOffsetDirective, FlexOrderStyleBuilder, FlexOrderDirective, DefaultFlexOrderDirective, LayoutStyleBuilder, LayoutDirective, DefaultLayoutDirective, LayoutAlignStyleBuilder, LayoutAlignDirective, DefaultLayoutAlignDirective, LayoutGapStyleBuilder, LayoutGapDirective, DefaultLayoutGapDirective } from '@angular/flex-layout/flex';\nimport { GridModule } from '@angular/flex-layout/grid';\nexport { ɵgrid_privatef, ɵgrid_privatee, ɵgrid_privated, ɵgrid_privatei, ɵgrid_privateh, ɵgrid_privateg, ɵgrid_privatel, ɵgrid_privatek, ɵgrid_privatej, ɵgrid_privateo, ɵgrid_privaten, ɵgrid_privatem, ɵgrid_privater, ɵgrid_privateq, ɵgrid_privatep, ɵgrid_privateu, ɵgrid_privatet, ɵgrid_privates, ɵgrid_privatex, ɵgrid_privatew, ɵgrid_privatev, ɵgrid_privateba, ɵgrid_privatez, ɵgrid_privatey, ɵgrid_privatec, ɵgrid_privateb, ɵgrid_privatea, ɵgrid_privatebd, ɵgrid_privatebc, ɵgrid_privatebb, ɵgrid_privatebg, ɵgrid_privatebf, ɵgrid_privatebe, GridModule } from '@angular/flex-layout/grid';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: version.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Current version of Angular Flex-Layout.\n * @type {?}\n */\nconst VERSION = new Version('11.0.0-beta.33');\n\n/**\n * @fileoverview added by tsickle\n * Generated from: module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * FlexLayoutModule -- the main import for all utilities in the Angular Layout library\n * * Will automatically provide Flex, Grid, and Extended modules for use in the application\n * * Can be configured using the static withConfig method, options viewable on the Wiki's\n * Configuration page\n */\nclass FlexLayoutModule {\n /**\n * @param {?} serverModuleLoaded\n * @param {?} platformId\n */\n constructor(serverModuleLoaded, platformId) {\n if (isPlatformServer(platformId) && !serverModuleLoaded) {\n console.warn('Warning: Flex Layout loaded on the server without FlexLayoutServerModule');\n }\n }\n /**\n * Initialize the FlexLayoutModule with a set of config options,\n * which sets the corresponding tokens accordingly\n * @param {?} configOptions\n * @param {?=} breakpoints\n * @return {?}\n */\n static withConfig(configOptions, \n // tslint:disable-next-line:max-line-length\n breakpoints = []) {\n return {\n ngModule: FlexLayoutModule,\n providers: configOptions.serverLoaded ?\n [\n { provide: LAYOUT_CONFIG, useValue: Object.assign(Object.assign({}, DEFAULT_CONFIG), configOptions) },\n { provide: BREAKPOINT, useValue: breakpoints, multi: true },\n { provide: SERVER_TOKEN, useValue: true },\n ] : [\n { provide: LAYOUT_CONFIG, useValue: Object.assign(Object.assign({}, DEFAULT_CONFIG), configOptions) },\n { provide: BREAKPOINT, useValue: breakpoints, multi: true },\n ]\n };\n }\n}\nFlexLayoutModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FlexLayoutModule });\nFlexLayoutModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FlexLayoutModule_Factory(t) { return new (t || FlexLayoutModule)(ɵngcc0.ɵɵinject(SERVER_TOKEN), ɵngcc0.ɵɵinject(PLATFORM_ID)); }, imports: [[FlexModule, ExtendedModule, GridModule], FlexModule, ExtendedModule, GridModule] });\n/** @nocollapse */\nFlexLayoutModule.ctorParameters = () => [\n { type: Boolean, decorators: [{ type: Inject, args: [SERVER_TOKEN,] }] },\n { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }\n];\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FlexLayoutModule, { imports: function () { return [FlexModule, ExtendedModule, GridModule]; }, exports: function () { return [FlexModule, ExtendedModule, GridModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FlexLayoutModule, [{\n type: NgModule,\n args: [{\n imports: [FlexModule, ExtendedModule, GridModule],\n exports: [FlexModule, ExtendedModule, GridModule]\n }]\n }], function () { return [{ type: Boolean, decorators: [{\n type: Inject,\n args: [SERVER_TOKEN]\n }] }, { type: Object, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: public-api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { VERSION, FlexLayoutModule };\n\n//# sourceMappingURL=flex-layout.js.map","import { Subscription } from './Subscription';\nexport class SubjectSubscription extends Subscription {\n constructor(subject, subscriber) {\n super();\n this.subject = subject;\n this.subscriber = subscriber;\n this.closed = false;\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n const subject = this.subject;\n const observers = subject.observers;\n this.subject = null;\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n const subscriberIndex = observers.indexOf(this.subscriber);\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n }\n}\n//# sourceMappingURL=SubjectSubscription.js.map","import GroupNode from './group-node';\nimport traversable from '../mixins/traversable';\nimport { animationFrame, throttle } from '../common';\n\n\nconst FRAME_DELAY = 1000 / 60;\n\nclass RootNode extends traversable(GroupNode, \"childNodes\") {\n constructor(canvas, size) {\n super();\n\n this.canvas = canvas;\n this.size = size;\n this.ctx = canvas.getContext(\"2d\");\n\n const invalidateHandler = this._invalidate.bind(this);\n this.invalidate = throttle(() => {\n animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n }\n\n destroy() {\n super.destroy();\n this.canvas = null;\n this.ctx = null;\n }\n\n load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n }\n\n _rescale(scale) {\n const { canvas, size } = this;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n }\n\n _devicePixelRatio() {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n\n return 1;\n }\n\n _invalidate(options) {\n if (!this.ctx) {\n return;\n }\n\n const fixedScale = options && options.fixedScale;\n const scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n}\n\nexport default RootNode;\n","export default function promiseAll(promises) {\n return Promise.all(promises);\n}","/**\n * @hidden\n */\nexport const isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n","/* tslint:disable:object-literal-sort-keys max-line-length */\nimport { isWindowAvailable } from './util';\nconst agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)(\\.(\\d+(\\.\\d+)?))?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n};\nconst osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n};\nconst desktopBrowserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\nconst mobileBrowserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n};\nconst testRx = (agent, rxs, dflt) => {\n for (let rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n};\n/**\n * A function that detects the mobile browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Linux; Android 8.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.3 Chrome/61.0.3163.81 Mobile Safari/537.36';\n * detectMobileOS(userAgent); // { android: true };\n * ```\n */\nexport const detectMobileOS = (ua) => {\n let minorVersion;\n let match = [];\n for (let agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (!match) {\n continue;\n }\n if (agent === 'windows' && 'plugins' in window.navigator) {\n return null;\n } // Break if not Metro/Mobile Windows\n const os = {};\n os.device = agent;\n os.browser = testRx(ua, mobileBrowserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3] ? match[3].replace('_', '.') : '.0';\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion +\n (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0'));\n os.cordova = typeof window.PhoneGap !== undefined\n || typeof window.cordova !== undefined; // Use file protocol to detect appModes.\n os.appMode = window.navigator.standalone\n || (/file|local|wmapp/).test(window.location.protocol)\n || os.cordova; // Use file protocol to detect appModes.\n return os;\n }\n }\n return null;\n};\n/**\n * A function that detects the desktop browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19';\n * detectDesktopBrowser(userAgent); // { chrome: true, webkit: true };\n * ```\n */\nexport const detectDesktopBrowser = (ua) => {\n let browserInfo = null;\n let match = [];\n for (let agent in desktopBrowserRxs) {\n if (desktopBrowserRxs.hasOwnProperty(agent)) {\n match = ua.match(desktopBrowserRxs[agent]);\n if (match) {\n browserInfo = {};\n browserInfo[agent] = true;\n browserInfo[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browserInfo.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browserInfo;\n};\nconst userAgent = isWindowAvailable() && window.navigator ? window.navigator.userAgent : null;\n/**\n * A constant holding the desktop browser info. The variable persists the result of the detectDesktopBrowser(window.navigator.userAgent) call.\n * If no desktop browser is detected, the constant will be `null`.\n */\nexport const browser = userAgent ? detectDesktopBrowser(userAgent) : null;\n/**\n * A constant holding the mobile OS info. The variable persists the result of the detectMobileOS(window.navigator.userAgent) call.\n * If no mobile OS is detected, the constant will be `null`.\n */\nexport const mobileOS = userAgent ? detectMobileOS(userAgent) : null;\n/**\n * A constant reporting the browser `touch` events support.\n */\nexport const touch = isWindowAvailable() && 'ontouchstart' in window;\n/**\n * @hidden\n * A constant reporting the browser `msPointers` events support.\n */\nexport const msPointers = browser && !browser.chrome && window.MSPointerEvent;\n/**\n * A constant reporting the browser `pointers` events support.\n */\nexport const pointers = browser && !browser.chrome && window.PointerEvent;\n/**\n * A constant reporting whether the browser is touch enabled.\n */\nexport const touchEnabled = mobileOS && (touch || msPointers || pointers);\n","const FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\n/**\n * @hidden\n */\nexport function fieldList(field) {\n const fields = [];\n field.replace(FIELD_REGEX, function (_match, index, indexAccessor, fieldName) {\n fields.push(index !== undefined ? index : (indexAccessor || fieldName));\n });\n return fields;\n}\n","import { fieldList } from './field-list';\nconst getterCache = {};\n// tslint:disable-next-line:no-string-literal\ngetterCache['undefined'] = obj => obj;\n/**\n * @hidden\n */\nexport function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n const fields = fieldList(field);\n getterCache[field] = function (obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n return result;\n };\n return getterCache[field];\n}\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RouterOutletService {\n private history: string[] = [];\n\n constructor(private router: Router) { }\n\n public loadRouting(): void {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe(({ urlAfterRedirects }: NavigationEnd) => {\n this.history = [...this.history, urlAfterRedirects];\n });\n }\n\n public getHistory(): string[] {\n return this.history;\n }\n\n public getPreviousUrl(): string {\n return this.history[this.history.length - 2] || '/home';\n }\n\n public getThisUrl(): string {\n return this.history[this.history.length - 1] || '/home';\n }\n public addToHistory(url: string) {\n this.history = [...this.history, url];\n }\n}\n","import { Subscriber } from './Subscriber';\nexport class InnerSubscriber extends Subscriber {\n constructor(parent, outerValue, outerIndex) {\n super();\n this.parent = parent;\n this.outerValue = outerValue;\n this.outerIndex = outerIndex;\n this.index = 0;\n }\n _next(value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n }\n _error(error) {\n this.parent.notifyError(error, this);\n this.unsubscribe();\n }\n _complete() {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n }\n}\n//# sourceMappingURL=InnerSubscriber.js.map","import { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeTo } from './subscribeTo';\nimport { Observable } from '../Observable';\nexport function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber = new InnerSubscriber(outerSubscriber, outerValue, outerIndex)) {\n if (innerSubscriber.closed) {\n return undefined;\n }\n if (result instanceof Observable) {\n return result.subscribe(innerSubscriber);\n }\n return subscribeTo(result)(innerSubscriber);\n}\n//# sourceMappingURL=subscribeToResult.js.map","import HasObservers from '../core/has-observers';\nimport withAccessors from '../mixins/with-accessors';\nimport { defined, round } from '../util';\n\n\nclass Size extends withAccessors(HasObservers, [ \"width\", \"height\" ]) {\n constructor(width, height) {\n super();\n\n this.width = width || 0;\n this.height = height || 0;\n }\n\n equals(other) {\n return other && other.width === this.width && other.height === this.height;\n }\n\n clone() {\n return new Size(this.width, this.height);\n }\n\n toArray(digits) {\n const doRound = defined(digits);\n const width = doRound ? round(this.width, digits) : this.width;\n const height = doRound ? round(this.height, digits) : this.height;\n\n return [ width, height ];\n }\n\n static create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n\n return new Size(arg0, arg1);\n }\n }\n\n static get ZERO() {\n return new Size(0, 0);\n }\n}\n\nexport default Size;\n","/**\n * A function that clones the passed date. The parameter could be `null`.\n *\n * @param date - The initial date value.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * cloneDate(new Date(2016, 0, 1)); // returns new Date(2016, 0, 1);\n * cloneDate(null); // returns null\n * ```\n */\nexport const cloneDate = (date) => date ? new Date(date.getTime()) : null;\n","import { cloneDate } from './clone-date';\n/**\n * @hidden\n */\nexport const adjustDST = (date, hour) => {\n const newDate = cloneDate(date);\n if (hour === 0 && newDate.getHours() === 23) {\n newDate.setHours(newDate.getHours() + 2);\n }\n return newDate;\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\n/**\n * A function that adds and subtracts days from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of days to add and subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDays(new Date(2016, 0, 1), 5); // 2016-1-6\n * addDays(new Date(2016, 0, 1), -5); // 2015-12-26\n * ```\n */\nexport const addDays = (date, offset) => {\n const newDate = cloneDate(date);\n newDate.setDate(newDate.getDate() + offset);\n return adjustDST(newDate, date.getHours());\n};\n","import { adjustDST } from './adjust-dst';\n/**\n * A function which returns a new `Date` instance.\n *\n * @param year - The year value.\n * @param month - The month value.\n * @param day - The day value.\n * @param hours - The hours value.\n * @param minutes - The minutes value.\n * @param seconds - The seconds value.\n * @param milliseconds - milliseconds value.\n * @returns The date instance.\n *\n * @example\n * ```ts-no-run\n * createDate(2016, 0, 15); // 2016-01-15 00:00:00\n * createDate(2016, 0, 15, 22, 22, 20); // 2016-01-15 22:22:20\n * ```\n */\nexport const createDate = (year, month, day, hours = 0, minutes = 0, seconds = 0, milliseconds = 0) => {\n const date = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n if (year > -1 && year < 100) {\n date.setFullYear(date.getFullYear() - 1900);\n }\n return adjustDST(date, hours);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the passed date with a midnight time portion.\n *\n * @param date - The initial date.\n * @returns - The date with a midnight time portion.\n *\n * @example\n * ```ts-no-run\n * getDate(new Date(2016, 0, 15, 14, 30, 30)); // 2016-01-15 00:00:00\n * ```\n */\nexport const getDate = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n};\n","/**\n * A function that compares two dates. The comparison also includes the time portion.\n *\n * @param candidate - The candidate date.\n * @param expected - The expected date.\n * @returns - A Boolean value indicating whether the values are equal.\n *\n * @example\n * ```ts-no-run\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 1)); // true\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 2)); // false\n * isEqual(new Date(2016, 0, 1, 10), new Date(2016, 0, 1, 20)); // false\n * ```\n */\nexport const isEqual = (candidate, expected) => {\n if (!candidate && !expected) {\n return true;\n }\n return candidate && expected && candidate.getTime() === expected.getTime();\n};\n","import { addDays } from './add-days';\nimport { createDate } from './create-date';\n/**\n * A function which returns the last date of the month.\n *\n * @param date - The initial date.\n * @returns - The last date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * lastDayOfMonth(new Date(2016, 0, 15)); // 2016-01-31\n * ```\n */\nexport const lastDayOfMonth = (date) => {\n const newDate = createDate(date.getFullYear(), date.getMonth() + 1, 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return addDays(newDate, -1);\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\nimport { lastDayOfMonth } from './last-day-of-month';\nconst MONTHS_LENGTH = 12;\nconst normalize = (date, expectedMonth) => (date.getMonth() !== expectedMonth ? lastDayOfMonth(addMonths(date, -1)) : date //tslint:disable-line:no-use-before-declare\n);\n/**\n * A function that adds and subtracts months from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of months to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addMonths(new Date(2016, 5, 1), 5); // 2016-11-1\n * addMonths(new Date(2016, 5, 1), -5); // 2015-1-1\n * ```\n */\nexport const addMonths = (date, offset) => {\n const newDate = cloneDate(date);\n const diff = (newDate.getMonth() + offset) % MONTHS_LENGTH;\n const expectedMonth = (MONTHS_LENGTH + diff) % MONTHS_LENGTH;\n newDate.setMonth(newDate.getMonth() + offset);\n return normalize(adjustDST(newDate, date.getHours()), expectedMonth);\n};\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setYear = (value, year) => {\n const month = value.getMonth();\n const candidate = createDate(year, month, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getMonth() === month ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { adjustDST } from './adjust-dst';\nimport { setYear } from './set-year';\n/**\n * A function that adds and subtracts years from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of years to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addYears(new Date(2016, 5, 1), 5); // 2011-6-1\n * addYears(new Date(2016, 5, 1), -5); // 2021-6-1\n * ```\n */\nexport const addYears = (value, offset) => {\n return adjustDST(setYear(value, value.getFullYear() + offset), value.getHours());\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts decades from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of decades to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDecades(new Date(2016, 5, 1), 5); // 2066-6-1\n * addDecades(new Date(2016, 5, 1), -5); // 1966-6-1\n * ```\n */\nexport const addDecades = (value, offset) => {\n return addYears(value, 10 * offset);\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts centuries from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of centuries to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addCenturies(new Date(2016, 5, 1), 5); // 2516-6-1\n * addCenturies(new Date(2016, 5, 1), -5); // 1516-6-1\n * ```\n */\nexport const addCenturies = (value, offset) => {\n return addYears(value, 100 * offset);\n};\n","import { setYear } from './set-year';\n/**\n * @hidden\n */\nexport const normalizeYear = (value, year) => (setYear(value, year(value.getFullYear())));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first decade in a century.\n *\n * @param date - The start date value.\n * @returns - The first year in a century.\n *\n * @example\n * ```ts-no-run\n * firstDecadeOfCentury(new Date(2017, 0, 1)); // 2000-1-1\n * firstDecadeOfCentury(new Date(2007, 10, 22)); // 2000-11-22\n * firstDecadeOfCentury(new Date(2126, 0, 1)); // 2100-1-1\n * ```\n */\nexport const firstDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100)));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last decade in a century.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastDecadeOfCentury(new Date(2017, 0, 1)); // 2090-1-1\n * lastDecadeOfCentury(new Date(2007, 10, 22)); // 2090-11-22\n * lastDecadeOfCentury(new Date(2126, 0, 1)); // 2190-1-1\n * ```\n */\nexport const lastDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100) + 90));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first year in a decade.\n *\n * @param date - The start date value.\n * @returns - The first year in a decade.\n *\n * @example\n * ```ts-no-run\n * firstYearOfDecade(new Date(2017, 0, 1)); // 2010-1-1\n * firstYearOfDecade(new Date(2007, 10, 22)); // 2000-11-22\n * firstYearOfDecade(new Date(2026, 0, 1)); // 2020-1-1\n * ```\n */\nexport const firstYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10)));\n","import { firstDecadeOfCentury } from './first-decade-of-century';\n/**\n * A function that calculates duration in centuries between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInCenturies(new Date(2016, 0, 1), new Date(3216, 0, 1)); // 12\n * durationInCenturies(new Date(2016, 6, 1), new Date(2617, 0, 1)); // 6\n * durationInCenturies(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInCenturies = (start, end) => ((firstDecadeOfCentury(end).getFullYear() - firstDecadeOfCentury(start).getFullYear()) / 100);\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last year in a decade.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastYearOfDecade(new Date(2017, 0, 1)); // 2019-1-1\n * lastYearOfDecade(new Date(2007, 10, 22)); // 2009-11-22\n * lastYearOfDecade(new Date(2026, 0, 1)); // 2029-1-1\n * ```\n */\nexport const lastYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10) + 9));\n","import { firstYearOfDecade } from './first-year-of-decade';\n/**\n * A function that calculates duration in decades between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInDecades(new Date(2016, 0, 1), new Date(2136, 0, 1)); // 12\n * durationInDecades(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInDecades = (start, end) => ((firstYearOfDecade(end).getFullYear() - firstYearOfDecade(start).getFullYear()) / 10);\n","import { addDays } from './add-days';\n/**\n * A function that adds and subtracts weeks from a Date object.\n *\n * @param date - The initial date value.\n * @param offset - The number of weeks to add/subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addWeeks(new Date(2016, 5, 1), 3); // 2016-6-22\n * addWeeks(new Date(2016, 5, 1), -3); // 2015-5-11\n * ```\n */\nexport const addWeeks = (date, offset) => {\n return addDays(date, offset * 7);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the first date of the month.\n *\n * @param date - The initial date.\n * @returns - The first date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * firstDayOfMonth(new Date(2016, 0, 15)); // 2016-01-01\n * ```\n */\nexport const firstDayOfMonth = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n};\n","// tslint:disable:max-line-length\n/**\n * An enumeration which represents the horizontal direction. The `Forward` option moves forward. The `Backward` option moves backward.\n */\nexport var Direction;\n(function (Direction) {\n /**\n * The `Forward` value with an underlying `1` number value.\n */\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n /**\n * The `Backward` value with an underlying `-1` (minus one) number value.\n */\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n// tslint:enable:max-line-length\n","import { Direction } from \"./direction.enum\";\nimport { adjustDST } from \"./adjust-dst\";\nimport { cloneDate } from './clone-date';\n/**\n * @hidden\n *\n * A function which returns the next or previous date for a specific week day. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @param direction - The `Direction` enum specifying the calculation direction.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Forward); // 2016-01-06, Wednesday\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Backward); // 2015-12-30, Wednesday\n * ```\n */\nexport const dayOfWeek = (date, weekDay, direction = Direction.Forward) => {\n const newDate = cloneDate(date);\n const newDay = ((weekDay - newDate.getDay()) + (7 * direction)) % 7;\n newDate.setDate(newDate.getDate() + newDay);\n return adjustDST(newDate, date.getHours());\n};\n","/**\n * A function that calculates duration in months between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInMonths(new Date(2016, 0, 1), new Date(2017, 0, 1)); // 12\n * durationInMonths(new Date(2016, 6, 1), new Date(2017, 0, 1)); // 6\n * durationInMonths(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInMonths = (start, end) => (((end.getFullYear() - start.getFullYear())) * 12 + (end.getMonth() - start.getMonth()));\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setMonth = (value, month) => {\n const day = value.getDate();\n const candidate = createDate(value.getFullYear(), month, day, value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getDate() === day ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the first month in a year.\n *\n * @param date - The start date value.\n * @returns - The first month in a year.\n *\n * @example\n * ```ts-no-run\n * firstMonthOfYear(new Date(2017, 11, 1)); // 2017-1-1\n * firstMonthOfYear(new Date(2017, 0, 1)); // 2017-1-1\n * ```\n */\nexport const firstMonthOfYear = (value) => setMonth(value, 0);\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the last month in a year.\n *\n * @param date - The start date value.\n * @returns - The last month in a year.\n *\n * @example\n * ```ts-no-run\n * lastMonthOfYear(new Date(2017, 5, 3)); // 2017-12-3\n * lastMonthOfYear(new Date(2017, 11, 3)); // 2017-12-3\n * ```\n */\nexport const lastMonthOfYear = (value) => setMonth(value, 11);\n","/**\n * A function that calculates duration in years between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in years.\n *\n * @example\n * ```ts-no-run\n * durationInYears(new Date(2016, 0, 1), new Date(2028, 0, 1)); // 12\n * durationInYears(new Date(2016, 0, 1), new Date(2022, 0, 1)); // 6\n * durationInYears(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInYears = (start, end) => (end.getFullYear() - start.getFullYear());\n","/**\n * Enumeration which represents the week days.\n */\nexport var Day;\n(function (Day) {\n /**\n * The Sunday value with an underlying `0` number value.\n */\n Day[Day[\"Sunday\"] = 0] = \"Sunday\";\n /**\n * The Monday value with an underlying `1` number value.\n */\n Day[Day[\"Monday\"] = 1] = \"Monday\";\n /**\n * The Tuesday value with an underlying `2` number value.\n */\n Day[Day[\"Tuesday\"] = 2] = \"Tuesday\";\n /**\n * The Wednesday value with an underlying `3` number value.\n */\n Day[Day[\"Wednesday\"] = 3] = \"Wednesday\";\n /**\n * The Thursday value with an underlying `4` number value.\n */\n Day[Day[\"Thursday\"] = 4] = \"Thursday\";\n /**\n * The Friday value with an underlying `5` number value.\n */\n Day[Day[\"Friday\"] = 5] = \"Friday\";\n /**\n * The Saturday value with an underlying `6` number value.\n */\n Day[Day[\"Saturday\"] = 6] = \"Saturday\";\n})(Day || (Day = {}));\n","import { Day } from './day.enum';\nimport { addDays } from './add-days';\nimport { createDate } from './create-date';\nimport { prevDayOfWeek } from './prev-day-of-week';\nimport { MS_PER_DAY } from './constants';\nimport { getDate } from './get-date';\nconst moveDateToWeekStart = (date, weekStartDay) => {\n if (weekStartDay !== Day.Monday) {\n return addDays(prevDayOfWeek(date, weekStartDay), 4);\n }\n return addDays(date, (4 - (date.getDay() || 7)));\n};\nconst calcWeekInYear = (date, weekStartDay) => {\n const firstWeekInYear = createDate(date.getFullYear(), 0, 1, -6);\n const newDate = moveDateToWeekStart(date, weekStartDay);\n const diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n const days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n};\n/**\n * A function that returns the number of the week within a year, which is calculated in relation to the date.\n *\n * For more information, refer to the [**ISO week date**](https://en.wikipedia.org/wiki/ISO_week_date) article.\n *\n * @param date - The date used for the week number calculation.\n * @param weekStartDay - The first day of the week. By default, the first week day is Monday.\n * @returns - The number of the week within the year.\n *\n * @example\n * ```ts-no-run\n * weekInYear(new Date(2016, 0, 1)); // Week 53, 2015\n * weekInYear(new Date(2016, 0, 5)); // Week 1, 2016\n * weekInYear(new Date(2017, 0, 1)); // Week 52, 2016\n * weekInYear(new Date(2017, 0, 2)); // Week 1, 2017\n * ```\n */\nexport const weekInYear = (date, weekStartDay = Day.Monday) => {\n date = getDate(date);\n const prevWeekDate = addDays(date, -7);\n const nextWeekDate = addDays(date, 7);\n const weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n};\n","import { Direction } from \"./direction.enum\";\nimport { dayOfWeek } from './day-of-week';\n/**\n * A function which returns a date by a specific week name. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * prevDayOfWeek(new Date(2016, 0, 1), Day.Wednesday); // 2015-12-30, Wednesday\n * ```\n */\nexport const prevDayOfWeek = (date, weekDay) => {\n return dayOfWeek(date, weekDay, Direction.Backward);\n};\n","/**\n * The number of milliseconds in one minute.\n */\nexport const MS_PER_MINUTE = 60000;\n/**\n * The number of milliseconds in one hour.\n */\nexport const MS_PER_HOUR = 3600000;\n/**\n * The number of milliseconds in one standard day.\n */\nexport const MS_PER_DAY = 86400000;\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Injectable, EventEmitter, Injector, InjectionToken, Component, Inject, ElementRef, Renderer2, NgZone, Input, Output, HostBinding, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, Directive, TemplateRef, isDevMode, forwardRef, Optional, ContentChild, ViewContainerRef, HostListener, ViewChildren, ContentChildren, IterableDiffers, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, NgControl } from '@angular/forms';\nimport { LocalizationService, L10N_PREFIX, RTL, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { getDate, isEqual, cloneDate, addDays, addDecades, addCenturies, firstDecadeOfCentury, lastDecadeOfCentury, firstYearOfDecade, createDate, durationInCenturies, addYears, lastYearOfDecade, durationInDecades, addWeeks, addMonths, firstDayOfMonth, lastDayOfMonth, dayOfWeek, durationInMonths, firstMonthOfYear, lastMonthOfYear, durationInYears, weekInYear } from '@progress/kendo-date-math';\nimport { isDocumentAvailable, KendoInput, guid, hasObservers, Keys, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { IntlService, IntlModule } from '@progress/kendo-angular-intl';\nimport { ReplaySubject, Observable, Subject, combineLatest, of, interval, animationFrameScheduler, fromEvent, EMPTY, from, Subscription, BehaviorSubject, merge } from 'rxjs';\nimport { map, scan, takeWhile, tap, filter, debounceTime } from 'rxjs/operators';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { CommonModule } from '@angular/common';\nimport { touchEnabled } from '@progress/kendo-common';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-intl';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\nimport * as ɵngcc4 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc5 from '@progress/kendo-angular-popup';\n\nconst _c0 = [\"*\"];\nconst _c1 = [\"list\"];\nfunction NavigationComponent_li_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const date_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r4.service.navigationTitle(date_r2));\n} }\nfunction NavigationComponent_li_4_ng_template_3_Template(rf, ctx) { }\nconst _c2 = function (a0, a1, a2) { return { $implicit: a0, activeView: a1, date: a2 }; };\nfunction NavigationComponent_li_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"span\");\n ɵngcc0.ɵɵtemplate(2, NavigationComponent_li_4_ng_template_2_Template, 1, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(3, NavigationComponent_li_4_ng_template_3_Template, 0, 0, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r2 = ctx.$implicit;\n const index_r3 = ctx.index;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵattribute(\"data-date-index\", index_r3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-calendar-navigation-marker\", ctx_r1.service.isRangeStart(date_r2));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.templateRef)(\"ngTemplateOutlet\", ctx_r1.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(7, _c2, ctx_r1.service.navigationTitle(date_r2), ctx_r1.activeViewValue, date_r2));\n} }\nconst _c3 = function (a0) { return { click: a0 }; };\nfunction ViewListComponent_table_1_th_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const name_r5 = ctx.$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r4.colWidth, \"%\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(name_r5);\n} }\nfunction ViewListComponent_table_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 6);\n ɵngcc0.ɵɵelementStart(1, \"thead\");\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵtemplate(3, ViewListComponent_table_1_th_3_Template, 2, 3, \"th\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.weekNames);\n} }\nfunction ViewListComponent_col_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} }\nfunction ViewListComponent_tbody_7_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"tbody\", 8);\n ɵngcc0.ɵɵlistener(\"change\", function ViewListComponent_tbody_7_Template_tbody_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r7 = ctx.$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r3.activeView)(\"isActive\", ctx_r3.isActive)(\"min\", ctx_r3.min)(\"max\", ctx_r3.max)(\"cellUID\", ctx_r3.cellUID)(\"focusedDate\", ctx_r3.focusedDate)(\"selectedDate\", ctx_r3.value)(\"weekNumber\", ctx_r3.weekNumber)(\"templateRef\", ctx_r3.cellTemplateRef)(\"weekNumberTemplateRef\", ctx_r3.weekNumberTemplateRef)(\"viewDate\", date_r7);\n} }\nfunction CalendarComponent_kendo_calendar_navigation_1_Template(rf, ctx) { if (rf & 1) {\n const _r2 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-navigation\", 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function CalendarComponent_kendo_calendar_navigation_1_Template_kendo_calendar_navigation_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r2); const ctx_r1 = ɵngcc0.ɵɵnextContext(); return ctx_r1.handleNavigation($event); })(\"pageChange\", function CalendarComponent_kendo_calendar_navigation_1_Template_kendo_calendar_navigation_pageChange_0_listener() { ɵngcc0.ɵɵrestoreView(_r2); const ctx_r3 = ɵngcc0.ɵɵnextContext(); return ctx_r3.onPageChange(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r0.activeViewEnum)(\"focusedDate\", ctx_r0.focusedDate)(\"min\", ctx_r0.min)(\"max\", ctx_r0.max)(\"templateRef\", ctx_r0.navigationItemTemplate == null ? null : ctx_r0.navigationItemTemplate.templateRef);\n} }\nconst _c6 = [\"dateInput\"];\nconst _c7 = [\"wrap\"];\nfunction DateInputComponent_span_5_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵlistener(\"mousedown\", function DateInputComponent_span_5_Template_span_mousedown_0_listener($event) { return $event.preventDefault(); });\n ɵngcc0.ɵɵelementStart(1, \"span\", 7);\n ɵngcc0.ɵɵlistener(\"mousedown\", function DateInputComponent_span_5_Template_span_mousedown_1_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.arrowDirection = ctx_r4.arrow.Up; })(\"mouseleave\", function DateInputComponent_span_5_Template_span_mouseleave_1_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.arrowDirection = ctx_r6.arrow.None; })(\"click\", function DateInputComponent_span_5_Template_span_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.handleButtonClick(1); });\n ɵngcc0.ɵɵelement(2, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function DateInputComponent_span_5_Template_span_click_3_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.handleButtonClick(-1); })(\"mousedown\", function DateInputComponent_span_5_Template_span_mousedown_3_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.arrowDirection = ctx_r9.arrow.Down; })(\"mouseleave\", function DateInputComponent_span_5_Template_span_mouseleave_3_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10.arrowDirection = ctx_r10.arrow.None; });\n ɵngcc0.ɵɵelement(4, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r2.arrowDirection === ctx_r2.arrow.Up);\n ɵngcc0.ɵɵproperty(\"title\", ctx_r2.localization.get(\"increment\"));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.localization.get(\"increment\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r2.arrowDirection === ctx_r2.arrow.Down);\n ɵngcc0.ɵɵproperty(\"title\", ctx_r2.localization.get(\"decrement\"));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.localization.get(\"decrement\"));\n} }\nconst _c12 = function (a0, a1, a2, a3, a4, a5, a6) { return { click: a0, focus: a1, mousedown: a2, touchstart: a3, dragstart: a4, drop: a5, blur: a6 }; };\nconst _c13 = [\"container\"];\nconst _c14 = [\"popupTemplate\"];\nconst _c15 = [\"wrapper\"];\nfunction DatePickerComponent_ng_template_9_ng_template_3_Template(rf, ctx) { }\nconst _c20 = function (a0) { return { keydown: a0 }; };\nfunction DatePickerComponent_ng_template_9_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar\", 9, 10);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DatePickerComponent_ng_template_9_Template_kendo_calendar_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.handleChange(ctx_r7.mergeTime($event)); });\n ɵngcc0.ɵɵelement(2, \"kendo-calendar-messages\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, DatePickerComponent_ng_template_9_ng_template_3_Template, 0, 0, \"ng-template\");\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"min\", ctx_r4.min)(\"max\", ctx_r4.max)(\"navigation\", ctx_r4.navigation)(\"activeView\", ctx_r4.activeView)(\"bottomView\", ctx_r4.bottomView)(\"topView\", ctx_r4.topView)(\"weekNumber\", ctx_r4.weekNumber)(\"cellTemplate\", ctx_r4.cellTemplate)(\"monthCellTemplate\", ctx_r4.monthCellTemplate)(\"yearCellTemplate\", ctx_r4.yearCellTemplate)(\"decadeCellTemplate\", ctx_r4.decadeCellTemplate)(\"centuryCellTemplate\", ctx_r4.centuryCellTemplate)(\"weekNumberTemplate\", ctx_r4.weekNumberTemplate)(\"headerTitleTemplate\", ctx_r4.headerTitleTemplate)(\"navigationItemTemplate\", ctx_r4.navigationItemTemplate)(\"focusedDate\", ctx_r4.focusedDate)(\"value\", ctx_r4.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(21, _c20, ctx_r4.handleKeydown))(\"scope\", ctx_r4)(\"disabledDates\", ctx_r4.disabledDates);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"today\", ctx_r4.localization.get(\"today\"));\n} }\nconst _c21 = function (a0, a1) { return { click: a0, mousedown: a1 }; };\nconst _c36 = function (a0, a1) { return { keydown: a0, mousedown: a1 }; };\nfunction TimePickerComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-timeselector\", 9, 10);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimePickerComponent_ng_template_7_Template_kendo_timeselector_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.handleChange($event); })(\"valueReject\", function TimePickerComponent_ng_template_7_Template_kendo_timeselector_valueReject_0_listener() { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.handleReject(); });\n ɵngcc0.ɵɵelement(2, \"kendo-timeselector-messages\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"cancelButton\", ctx_r3.cancelButton)(\"nowButton\", ctx_r3.nowButton)(\"format\", ctx_r3.format)(\"min\", ctx_r3.min)(\"max\", ctx_r3.max)(\"steps\", ctx_r3.steps)(\"value\", ctx_r3.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(15, _c36, ctx_r3.handleKeydown, ctx_r3.handleMousedown))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"acceptLabel\", ctx_r3.localization.get(\"acceptLabel\"))(\"accept\", ctx_r3.localization.get(\"accept\"))(\"cancelLabel\", ctx_r3.localization.get(\"cancelLabel\"))(\"cancel\", ctx_r3.localization.get(\"cancel\"))(\"nowLabel\", ctx_r3.localization.get(\"nowLabel\"))(\"now\", ctx_r3.localization.get(\"now\"));\n} }\nfunction DateTimePickerComponent_ng_template_9_button_16_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 25);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(5, _c3, ctx_r5.handleCancel))(\"scope\", ctx_r5);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r5.localization.get(\"cancelLabel\"))(\"aria-label\", ctx_r5.localization.get(\"cancelLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r5.localization.get(\"cancel\"), \" \");\n} }\nconst _c61 = function (a0, a1) { return { mousedown: a0, keydown: a1 }; };\nconst _c62 = function (a0, a1) { return { focusin: a0, focusout: a1 }; };\nconst _c63 = function (a0, a1) { return { click: a0, keydown: a1 }; };\nconst _c64 = function (a0) { return { transitionend: a0 }; };\nconst _c65 = function (a0, a1, a2) { return { keydown: a0, focusin: a1, focusout: a2 }; };\nfunction DateTimePickerComponent_ng_template_9_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 9);\n ɵngcc0.ɵɵelementStart(1, \"div\", 10);\n ɵngcc0.ɵɵelementStart(2, \"div\", 11);\n ɵngcc0.ɵɵelementStart(3, \"button\", 12);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"button\", 13);\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 14, 15);\n ɵngcc0.ɵɵelementStart(9, \"div\", 16);\n ɵngcc0.ɵɵelementStart(10, \"kendo-calendar\", 17);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateTimePickerComponent_ng_template_9_Template_kendo_calendar_valueChange_10_listener($event) { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.calendarValue = $event; })(\"valueChange\", function DateTimePickerComponent_ng_template_9_Template_kendo_calendar_valueChange_10_listener() { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.handleCalendarValueChange(); });\n ɵngcc0.ɵɵelement(11, \"kendo-calendar-messages\", 18);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"div\", 19);\n ɵngcc0.ɵɵelementStart(13, \"kendo-timeselector\", 20);\n ɵngcc0.ɵɵelement(14, \"kendo-timeselector-messages\", 21);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(15, \"div\", 22);\n ɵngcc0.ɵɵtemplate(16, DateTimePickerComponent_ng_template_9_button_16_Template, 2, 7, \"button\", 23);\n ɵngcc0.ɵɵelementStart(17, \"button\", 24);\n ɵngcc0.ɵɵtext(18);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const _r4 = ɵngcc0.ɵɵreference(8);\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassMapInterpolate1(\"k-datetime-wrap k-\", ctx_r3.activeTab, \"-tab\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(58, _c61, ctx_r3.preventMouseDown, ctx_r3.handleKeyDown))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(61, _c62, ctx_r3.handleFocus, ctx_r3.handleBlur))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r3.activeTab === \"date\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(64, _c63, ctx_r3.changeActiveTab.bind(ctx_r3, \"date\"), ctx_r3.handleBackTabOut))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.localization.get(\"dateTabLabel\"))(\"aria-label\", ctx_r3.localization.get(\"dateTabLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.localization.get(\"dateTab\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r3.activeTab === \"time\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(67, _c3, ctx_r3.changeActiveTab.bind(ctx_r3, \"time\")));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.localization.get(\"timeTabLabel\"))(\"aria-label\", ctx_r3.localization.get(\"timeTabLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.localization.get(\"timeTab\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"transition\", ctx_r3.tabSwitchTransition);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(69, _c64, ctx_r3.handleTabChangeTransitionEnd.bind(ctx_r3, _r4)));\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r3.calendarValue)(\"min\", ctx_r3.calendarMin)(\"max\", ctx_r3.calendarMax)(\"focusedDate\", ctx_r3.focusedDate)(\"weekNumber\", ctx_r3.weekNumber)(\"navigation\", false)(\"cellTemplate\", ctx_r3.cellTemplate)(\"monthCellTemplate\", ctx_r3.monthCellTemplate)(\"yearCellTemplate\", ctx_r3.yearCellTemplate)(\"decadeCellTemplate\", ctx_r3.decadeCellTemplate)(\"centuryCellTemplate\", ctx_r3.centuryCellTemplate)(\"weekNumberTemplate\", ctx_r3.weekNumberTemplate)(\"headerTitleTemplate\", ctx_r3.headerTitleTemplate)(\"disabled\", ctx_r3.disableCalendar)(\"disabledDates\", ctx_r3.disabledDates);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"today\", ctx_r3.localization.get(\"today\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r3.value)(\"format\", ctx_r3.timeSelectorFormat)(\"min\", ctx_r3.timeSelectorMin)(\"max\", ctx_r3.timeSelectorMax)(\"setButton\", false)(\"cancelButton\", false)(\"steps\", ctx_r3.steps)(\"disabled\", ctx_r3.disableTimeSelector);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"now\", ctx_r3.localization.get(\"now\"))(\"nowLabel\", ctx_r3.localization.get(\"nowLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(71, _c65, ctx_r3.handleTabOut, ctx_r3.handleFocus, ctx_r3.handleBlur))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r3.cancelButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx_r3.calendarValue)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(75, _c3, ctx_r3.handleAccept))(\"scope\", ctx_r3);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.localization.get(\"acceptLabel\"))(\"aria-label\", ctx_r3.localization.get(\"acceptLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.localization.get(\"accept\"), \" \");\n} }\nconst _c66 = function (a0, a1) { return { mousedown: a0, click: a1 }; };\nfunction HorizontalViewListComponent_tbody_2_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"tbody\", 3);\n ɵngcc0.ɵɵlistener(\"change\", function HorizontalViewListComponent_tbody_2_Template_tbody_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.handleDateChange($event); })(\"cellEnter\", function HorizontalViewListComponent_tbody_2_Template_tbody_cellEnter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.cellEnter.emit($event); })(\"cellLeave\", function HorizontalViewListComponent_tbody_2_Template_tbody_cellLeave_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r3); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.cellLeave.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r0.activeView)(\"isActive\", ctx_r0.isActive)(\"min\", ctx_r0.min)(\"max\", ctx_r0.max)(\"cellUID\", ctx_r0.cellUID)(\"focusedDate\", ctx_r0.focusedDate)(\"selectedDate\", ctx_r0.value)(\"selectionRange\", ctx_r0.selectionRange)(\"activeRangeEnd\", ctx_r0.activeRangeEnd)(\"weekNumber\", ctx_r0.weekNumber)(\"templateRef\", ctx_r0.cellTemplateRef)(\"weekNumberTemplateRef\", ctx_r0.weekNumberTemplateRef)(\"viewDate\", date_r1);\n} }\nconst _c73 = [\"defaultTemplate\"];\nfunction DateRangePopupComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-multiviewcalendar\", 2);\n} }\nfunction DateRangeComponent_kendo_daterange_popup_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-daterange-popup\");\n} }\nfunction HeaderComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.title);\n} }\nfunction HeaderComponent_ng_template_2_Template(rf, ctx) { }\nconst _c74 = [\"kendoCalendarView\", \"\"];\nfunction ViewComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 3);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ViewComponent_tr_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵelementStart(1, \"th\", 5);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"colSpan\", ctx_r2.colSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.title);\n} }\nfunction ViewComponent_tr_3_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const name_r6 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(name_r6);\n} }\nfunction ViewComponent_tr_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_3_th_1_Template, 2, 1, \"th\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.weekNames);\n} }\nfunction ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const row_r7 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r12 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r12.getWeekNumber(ctx_r12.firstDate(row_r7)), \" \");\n} }\nfunction ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template(rf, ctx) { }\nconst _c75 = function (a0, a1) { return { $implicit: a0, cellContext: a1 }; };\nfunction ViewComponent_tr_4_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 10);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template, 1, 1, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template, 0, 0, \"ng-template\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r7 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r11 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r11.weekNumberTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r11.weekNumberTemplateRef)(\"ngTemplateOutlet\", ctx_r11.weekNumberTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(4, _c75, ctx_r11.firstDate(row_r7), ctx_r11.getWeekNumberContext(row_r7)));\n} }\nfunction ViewComponent_tr_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_tr_4_ng_template_1_td_0_Template, 3, 7, \"td\", 9);\n} if (rf & 2) {\n const row_r7 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r9 = ɵngcc0.ɵɵnextContext();\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r9.firstDate(row_r7))(\"ngIfElse\", _r0);\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const cell_r17 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵtextInterpolate(cell_r17.formattedValue);\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template(rf, ctx) { }\nfunction ViewComponent_tr_4_ng_container_2_td_1_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template, 0, 0, \"ng-template\", 16);\n} if (rf & 2) {\n const cell_r17 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r21 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r21.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c75, cell_r17.value, cell_r17));\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 13);\n ɵngcc0.ɵɵelementStart(1, \"span\", 14);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template, 1, 1, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(3, ViewComponent_tr_4_ng_container_2_td_1_3_Template, 1, 5, undefined, 15);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r25 = ɵngcc0.ɵɵnextContext();\n const cell_r17 = ctx_r25.$implicit;\n const cellIndex_r18 = ctx_r25.index;\n const rowIndex_r8 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r19 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r19.getStyles(cell_r17))(\"title\", cell_r17.title);\n ɵngcc0.ɵɵattribute(\"id\", cell_r17.id)(\"data-cell-index\", ctx_r19.tableCellIndex(rowIndex_r8, cellIndex_r18))(\"aria-selected\", cell_r17.isSelected || cell_r17.isRangeStart || cell_r17.isRangeMid || cell_r17.isRangeEnd)(\"aria-disabled\", cell_r17.isDisabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r19.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r19.templateRef);\n} }\nfunction ViewComponent_tr_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_container_2_td_1_Template, 4, 8, \"td\", 12);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const cell_r17 = ctx.$implicit;\n ɵngcc0.ɵɵnextContext(2);\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", cell_r17)(\"ngIfElse\", _r0);\n} }\nfunction ViewComponent_tr_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_template_1_Template, 1, 2, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_container_2_Template, 2, 2, \"ng-container\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r7 = ctx.$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", row_r7);\n} }\nfunction TimeListComponent_li_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 3);\n ɵngcc0.ɵɵelementStart(1, \"span\");\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const index_r2 = ctx.index;\n ɵngcc0.ɵɵattribute(\"data-timelist-item-index\", index_r2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(item_r1.text);\n} }\nconst _c76 = [\"accept\"];\nconst _c77 = [\"cancel\"];\nconst _c78 = [\"now\"];\nconst _c79 = [\"listWrapper\"];\nconst _c92 = function (a0, a1, a2) { return { click: a0, focus: a1, blur: a2 }; };\nfunction TimeSelectorComponent_button_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 8, 9);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c92, ctx_r0.handleNow, ctx_r0.handleFocus, ctx_r0.handleBlur))(\"scope\", ctx_r0)(\"disabled\", ctx_r0.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r0.localization.get(\"nowLabel\"))(\"aria-label\", ctx_r0.localization.get(\"nowLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.localization.get(\"now\"));\n} }\nconst _c93 = function (a0, a1) { return { focus: a0, blur: a1 }; };\nfunction TimeSelectorComponent_ng_template_7_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 12, 13);\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-timelist\", 14);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimeSelectorComponent_ng_template_7_div_0_Template_kendo_timelist_valueChange_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(2); return ctx_r9.current = $event; });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext();\n const part_r4 = ctx_r11.$implicit;\n const idx_r5 = ctx_r11.index;\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r6.intl.dateFieldName(part_r4));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"min\", ctx_r6.min)(\"max\", ctx_r6.max)(\"part\", part_r4)(\"step\", ctx_r6.partStep(part_r4))(\"disabled\", ctx_r6.disabled)(\"value\", ctx_r6.current)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(10, _c93, ctx_r6.handleListFocus, ctx_r6.handleBlur))(\"scope\", ctx_r6);\n ɵngcc0.ɵɵattribute(\"data-timelist-index\", idx_r5);\n} }\nfunction TimeSelectorComponent_ng_template_7_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 15);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const part_r4 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", part_r4.pattern, \" \");\n} }\nfunction TimeSelectorComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TimeSelectorComponent_ng_template_7_div_0_Template, 5, 13, \"div\", 10);\n ɵngcc0.ɵɵtemplate(1, TimeSelectorComponent_ng_template_7_div_1_Template, 2, 1, \"div\", 11);\n} if (rf & 2) {\n const part_r4 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngIf\", part_r4.type !== \"literal\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", part_r4.type === \"literal\");\n} }\nfunction TimeSelectorComponent_div_8_button_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 19, 20);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c92, ctx_r13.handleReject, ctx_r13.handleFocus, ctx_r13.handleBlur))(\"scope\", ctx_r13)(\"disabled\", ctx_r13.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r13.localization.get(\"cancelLabel\"))(\"aria-label\", ctx_r13.localization.get(\"cancelLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r13.localization.get(\"cancel\"));\n} }\nfunction TimeSelectorComponent_div_8_button_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 21, 22);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c92, ctx_r14.handleAccept, ctx_r14.handleFocus, ctx_r14.handleBlur))(\"scope\", ctx_r14)(\"disabled\", ctx_r14.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r14.localization.get(\"acceptLabel\"))(\"aria-label\", ctx_r14.localization.get(\"acceptLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r14.localization.get(\"accept\"));\n} }\nfunction TimeSelectorComponent_div_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 16);\n ɵngcc0.ɵɵtemplate(1, TimeSelectorComponent_div_8_button_1_Template, 3, 10, \"button\", 17);\n ɵngcc0.ɵɵtemplate(2, TimeSelectorComponent_div_8_button_2_Template, 3, 10, \"button\", 18);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.cancelButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.setButton);\n} }\nvar Action;\n(function (Action) {\n Action[Action[\"Left\"] = 0] = \"Left\";\n Action[Action[\"Right\"] = 1] = \"Right\";\n Action[Action[\"Up\"] = 2] = \"Up\";\n Action[Action[\"Down\"] = 3] = \"Down\";\n Action[Action[\"PrevView\"] = 4] = \"PrevView\";\n Action[Action[\"NextView\"] = 5] = \"NextView\";\n Action[Action[\"FirstInView\"] = 6] = \"FirstInView\";\n Action[Action[\"LastInView\"] = 7] = \"LastInView\";\n Action[Action[\"LowerView\"] = 8] = \"LowerView\";\n Action[Action[\"UpperView\"] = 9] = \"UpperView\";\n})(Action || (Action = {}));\n\n/**\n * @hidden\n */\nconst EMPTY_SELECTIONRANGE = { start: null, end: null };\n\n/**\n * @hidden\n */\nconst MIDNIGHT_DATE = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MIN_DATE = new Date(1900, 0, 1);\n/**\n * @hidden\n */\nconst MAX_DATE = new Date(2099, 11, 31);\n/**\n * @hidden\n */\nconst MIN_TIME = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MAX_TIME = new Date(1980, 0, 1, 23, 59, 59);\n\n/* tslint:disable:no-bitwise max-line-length */\nconst isSet = (value) => value !== null && value !== undefined;\nconst setter = (method) => (date, value) => {\n const clone = cloneDate(date);\n clone[method](value);\n return clone;\n};\n/**\n * @hidden\n */\nconst setTime = (origin, candidate) => {\n const date = cloneDate(origin);\n date.setHours(candidate.getHours(), candidate.getMinutes(), candidate.getSeconds(), candidate.getMilliseconds());\n return date;\n};\nconst normalizeTimes = (candidate, min, max) => ({\n candidateValue: setTime(MIDNIGHT_DATE, candidate),\n maxValue: addDays(setTime(MIDNIGHT_DATE, max), min.getHours() < max.getHours() ||\n (min.getHours() === max.getHours() && min.getMinutes() < max.getMinutes()) ? 0 : 1),\n minValue: setTime(MIDNIGHT_DATE, min)\n});\n/**\n * @hidden\n */\nconst setHours = setter('setHours');\n/**\n * @hidden\n */\nconst setMinutes = setter('setMinutes');\n/**\n * @hidden\n */\nconst setSeconds = setter('setSeconds');\n/**\n * @hidden\n */\nconst range = (start, end, step = 1) => {\n const result = [];\n for (let i = start; i < end; i = i + step) {\n result.push(i);\n }\n return result;\n};\n/**\n * @hidden\n */\nconst isInRange = (candidate, min, max) => (!candidate || !((min && min > candidate) || (max && max < candidate)));\n/**\n * @hidden\n */\nconst isInTimeRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return true;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n return minValue <= candidateValue && candidateValue <= maxValue;\n};\n/**\n * @hidden\n */\nconst isValidRange = (min, max) => (!isSet(min) || !isSet(max) || min <= max);\n/**\n * @hidden\n */\nconst dateInRange = (candidate, min, max) => {\n if (!candidate) {\n return candidate;\n }\n if (min && candidate < min) {\n return cloneDate(min);\n }\n if (max && candidate > max) {\n return cloneDate(max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst timeInRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return candidate;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n if (candidateValue < minValue) {\n return setTime(candidate, min);\n }\n if (candidateValue > maxValue) {\n return setTime(candidate, max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst getNow = () => new Date();\n/**\n * @hidden\n */\nconst getToday = () => getDate(new Date());\n/**\n * @hidden\n */\nconst noop = (_) => { }; // tslint:disable-line:no-empty\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst stringifyClassObject = (classes) => {\n const pushToAcc = (acc, cls) => classes[cls] ? acc.concat(cls) : acc;\n return Object.keys(classes).reduce(pushToAcc, []).join(' ');\n};\n/**\n * @hidden\n */\nconst shiftWeekNames = (names, offset) => (names.slice(offset).concat(names.slice(0, offset)));\n/**\n * @hidden\n */\nconst approximateStringMatching = (oldTextOrigin, oldFormat, newTextOrigin, caret) => {\n // Remove the right part of the cursor.\n //oldFormat = oldFormat.substring(0, caret + oldText.length - newText.length);\n const oldIndex = caret + oldTextOrigin.length - newTextOrigin.length;\n const oldTextSeparator = oldTextOrigin[oldIndex];\n const oldText = oldTextOrigin.substring(0, caret + oldTextOrigin.length - newTextOrigin.length);\n const newText = newTextOrigin.substring(0, caret);\n const diff = [];\n // Handle typing a single character over the same selection.\n if (oldText === newText && caret > 0) {\n diff.push([oldFormat[caret - 1], newText[caret - 1]]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n // Handle Delete/Backspace.\n let deletedSymbol = \"\";\n //XXX:\n // Whole text is replaced with a same char\n // Nasty patch required to keep the selection in the first segment\n if (newText.length === 1) {\n diff.push([oldFormat[0], newText[0]]);\n }\n for (let i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && oldFormat[i] !== \"_\") {\n deletedSymbol = oldFormat[i];\n diff.push([deletedSymbol, \"\"]);\n }\n }\n return diff;\n }\n // Handle inserting text (the new text is longer than the previous one).\n // Handle typing over a literal as well.\n if (newText.indexOf(oldText) === 0 || oldFormat[caret - 1] === \"_\") {\n let symbol = oldFormat[0];\n for (let i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (oldFormat[i] !== \"_\") {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[symbol, newText[caret - 1]]];\n }\n // Handle entering a space or a separator, for navigation to the next item.\n if (newText[newText.length - 1] === \" \" || (newText[newText.length - 1] === oldTextSeparator && oldFormat[oldIndex] === '_')) {\n return [[oldFormat[caret - 1], \"_\"]];\n }\n // Handle typing over a correctly selected part.\n return [[oldFormat[caret - 1], newText[caret - 1]]];\n};\n/**\n * @hidden\n */\nconst domContainerFactory = (type) => (children, classes = \"\", styles = {}) => {\n const container = document.createElement(type);\n container.className = classes;\n Object.keys(styles).map(key => container.style[key] = styles[key]);\n if (typeof children === 'string') {\n container.innerHTML = children || '';\n }\n else {\n (children || []).forEach(child => child && container.appendChild(child));\n }\n return container;\n};\n/**\n * @hidden\n */\nconst hasChange = (changes, field) => changes[field] !== undefined;\n/**\n * @hidden\n */\nconst hasExistingValue = (changes, field) => changes[field] && changes[field].currentValue !== undefined && changes[field].currentValue !== null;\n/**\n * @hidden\n */\nconst isInSelectionRange = (value, selectionRange) => {\n const { start, end } = selectionRange || EMPTY_SELECTIONRANGE;\n if (!start || !end) {\n return false;\n }\n return start < value && value < end;\n};\n/**\n * @hidden\n */\nconst either = (value1, value2) => value1 || value2;\n/**\n * @hidden\n */\nconst clampRange = (value) => ({ start: value, end: value });\n/**\n * @hidden\n */\nconst isEqualRange = (initial, updated) => {\n const { start: initialStart, end: initialEnd } = initial || EMPTY_SELECTIONRANGE;\n const { start: updatedStart, end: updatedEnd } = updated || EMPTY_SELECTIONRANGE;\n return isEqual(initialStart, updatedStart) && isEqual(initialEnd, updatedEnd);\n};\n/**\n * @hidden\n *\n * Creates a new date based on the date information from the specified date portion\n * and the time information from the time portion.\n * If a parameter is not provided, returns `null`.\n */\nconst mergeDateAndTime = (date, time) => {\n if (!(date && time)) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n};\n/**\n * @hidden\n */\nconst lastMillisecondOfDate = (date) => {\n if (!date) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n};\n/**\n * @hidden\n *\n * Returns an array with dates ranging between and including the specified start and\n * end dates that are evaluated as disabled.\n */\nconst disabledDatesInRange = (start, end, isDateDisabled) => {\n if (!(start && end && isDateDisabled) || (start > end)) {\n return [];\n }\n const dates = [];\n let current = start;\n while (current <= end) {\n if (isDateDisabled(current)) {\n dates.push(current);\n }\n current = addDays(current, 1);\n }\n return dates;\n};\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA = [[]];\nconst CELLS_LENGTH = 5;\nconst ROWS_LENGTH = 2;\nconst ACTIONS = {\n [Action.Left]: (date) => addDecades(date, -1),\n [Action.Up]: (date) => addDecades(date, -5),\n [Action.Right]: (date) => addDecades(date, 1),\n [Action.Down]: (date) => addDecades(date, 5),\n [Action.PrevView]: (date) => addCenturies(date, -1),\n [Action.NextView]: (date) => addCenturies(date, 1),\n [Action.FirstInView]: (date) => firstDecadeOfCentury(date),\n [Action.LastInView]: (date) => lastDecadeOfCentury(date)\n};\n/**\n * @hidden\n */\nclass CenturyViewService {\n addToDate(min, skip) {\n return addCenturies(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addCenturies(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA;\n }\n const cells = range(0, CELLS_LENGTH);\n const firstDate = firstDecadeOfCentury(viewDate);\n const lastDate = lastDecadeOfCentury(viewDate);\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const today = getToday();\n return range(0, ROWS_LENGTH).map(rowOffset => {\n const baseDate = addDecades(firstDate, rowOffset * CELLS_LENGTH);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDecades(baseDate, cellOffset), min, max);\n if (!this.isInRange(cellDate, min, max)) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return firstYearOfDecade(candidate).getFullYear() === firstYearOfDecade(expected).getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 99);\n }\n isInRange(candidate, min, max) {\n const year = firstYearOfDecade(candidate).getFullYear();\n const aboveMin = !min || firstYearOfDecade(min).getFullYear() <= year;\n const belowMax = !max || year <= firstYearOfDecade(max).getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(firstDecadeOfCentury(date));\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 1000 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return firstYearOfDecade(value).getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstDecadeOfCentury(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstDecadeOfCentury(value).getFullYear()} - ${lastDecadeOfCentury(value).getFullYear()}`;\n }\n rowLength(_) {\n return CELLS_LENGTH;\n }\n skip(value, min) {\n return durationInCenturies(min, value);\n }\n total(min, max) {\n return durationInCenturies(min, max) + 1;\n }\n value(current) {\n return current ? firstYearOfDecade(current).getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const centuriesToSubtract = viewsCount - viewsInRange;\n return addCenturies(date, -1 * centuriesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nCenturyViewService.ɵfac = function CenturyViewService_Factory(t) { return new (t || CenturyViewService)(); };\nCenturyViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CenturyViewService, factory: CenturyViewService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CenturyViewService, [{\n type: Injectable\n }], null, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$1 = [[]];\nconst CELLS_LENGTH$1 = 5;\nconst ROWS_LENGTH$1 = 2;\nconst ACTIONS$1 = {\n [Action.Left]: (date) => addYears(date, -1),\n [Action.Up]: (date) => addYears(date, -5),\n [Action.Right]: (date) => addYears(date, 1),\n [Action.Down]: (date) => addYears(date, 5),\n [Action.PrevView]: (date) => addDecades(date, -1),\n [Action.NextView]: (date) => addDecades(date, 1),\n [Action.FirstInView]: (date) => firstYearOfDecade(date),\n [Action.LastInView]: (date) => lastYearOfDecade(date)\n};\n/**\n * @hidden\n */\nclass DecadeViewService {\n addToDate(min, skip) {\n return addDecades(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addDecades(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$1;\n }\n const cells = range(0, CELLS_LENGTH$1);\n const firstDate = firstYearOfDecade(viewDate);\n const lastDate = lastYearOfDecade(viewDate);\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const today = getToday();\n return range(0, ROWS_LENGTH$1).map(rowOffset => {\n const baseDate = addYears(firstDate, rowOffset * CELLS_LENGTH$1);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addYears(baseDate, cellOffset), min, max);\n if (!this.isInRange(cellDate, min, max)) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 9);\n }\n isInRange(candidate, min, max) {\n const year = candidate.getFullYear();\n const aboveMin = !min || min.getFullYear() <= year;\n const belowMax = !max || year <= max.getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(date);\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 100 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$1[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return value.getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstYearOfDecade(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstYearOfDecade(value).getFullYear()} - ${lastYearOfDecade(value).getFullYear()}`;\n }\n rowLength(_) {\n return CELLS_LENGTH$1;\n }\n skip(value, min) {\n return durationInDecades(min, value);\n }\n total(min, max) {\n return durationInDecades(min, max) + 1;\n }\n value(current) {\n return current ? current.getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const decadesToSubtract = viewsCount - viewsInRange;\n return addDecades(date, -1 * decadesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nDecadeViewService.ɵfac = function DecadeViewService_Factory(t) { return new (t || DecadeViewService)(); };\nDecadeViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DecadeViewService, factory: DecadeViewService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DecadeViewService, [{\n type: Injectable\n }], null, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$2 = [[]];\nconst CELLS_LENGTH$2 = 7;\nconst ROWS_LENGTH$2 = 6;\nconst ACTIONS$2 = {\n [Action.Left]: (date) => addDays(date, -1),\n [Action.Up]: (date) => addWeeks(date, -1),\n [Action.Right]: (date) => addDays(date, 1),\n [Action.Down]: (date) => addWeeks(date, 1),\n [Action.PrevView]: (date) => addMonths(date, -1),\n [Action.NextView]: (date) => addMonths(date, 1),\n [Action.FirstInView]: (date) => firstDayOfMonth(date),\n [Action.LastInView]: (date) => lastDayOfMonth(date)\n};\n/**\n * @hidden\n */\nclass MonthViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n }\n addToDate(min, skip) {\n return addMonths(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addMonths(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate, isDateDisabled = () => false } = options;\n if (!viewDate) {\n return EMPTY_DATA$2;\n }\n const firstMonthDate = firstDayOfMonth(viewDate);\n const firstMonthDay = getDate(firstMonthDate);\n const lastMonthDate = lastDayOfMonth(viewDate);\n const lastMonthDay = getDate(lastMonthDate);\n const backward = -1;\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const date = dayOfWeek(firstMonthDate, this._intlService.firstDay(), backward);\n const cells = range(0, CELLS_LENGTH$2);\n const today = getToday();\n return range(0, ROWS_LENGTH$2).map(rowOffset => {\n const baseDate = addDays(date, rowOffset * CELLS_LENGTH$2);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDays(baseDate, cellOffset), min, max);\n const cellDay = getDate(cellDate);\n const otherMonth = cellDay < firstMonthDay || cellDay > lastMonthDay;\n const outOfRange = cellDate < min || cellDate > max;\n if (otherMonth || outOfRange) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: this.isWeekend(cellDate),\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstMonthDate),\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastMonthDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate,\n isDisabled: isDateDisabled(cellDate)\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return getDate(candidate).getTime() === getDate(expected).getTime();\n }\n isInArray(date, dates) {\n if (dates.length === 0) {\n return false;\n }\n const lowerBound = this.beginningOfPeriod(dates[0]);\n const upperBound = this.beginningOfPeriod(addMonths(dates[dates.length - 1], 1));\n return lowerBound <= date && date < upperBound;\n }\n isInRange(candidate, min, max) {\n const value = getDate(candidate);\n const aboveMin = !min || getDate(min) <= value;\n const belowMax = !max || value <= getDate(max);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), date.getMonth(), 1);\n }\n isRangeStart(value) {\n return !value.getMonth();\n }\n move(value, action) {\n const modifier = ACTIONS$2[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return this._intlService.formatDate(value, 'D');\n }\n navigationTitle(value) {\n if (!value) {\n return '';\n }\n return this.isRangeStart(value) ? value.getFullYear().toString() : this.abbrMonthNames()[value.getMonth()];\n }\n title(current) {\n return `${this.wideMonthNames()[current.getMonth()]} ${current.getFullYear()}`;\n }\n rowLength(prependCell) {\n return CELLS_LENGTH$2 + (prependCell ? 1 : 0);\n }\n skip(value, min) {\n return durationInMonths(min, value);\n }\n total(min, max) {\n return durationInMonths(min, max) + 1;\n }\n value(current) {\n return current ? current.getDate().toString() : \"\";\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const monthsToSubtract = viewsCount - viewsInRange;\n return addMonths(date, -1 * monthsToSubtract);\n }\n return date;\n }\n isWeekend(date) {\n const { start, end } = this._intlService.weekendRange();\n const day = date.getDay();\n if (end < start) {\n return day <= end || start <= day;\n }\n return start <= day && day <= end;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n wideMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'wide', type: 'months' });\n }\n}\nMonthViewService.ɵfac = function MonthViewService_Factory(t) { return new (t || MonthViewService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nMonthViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MonthViewService, factory: MonthViewService.ɵfac });\n/** @nocollapse */\nMonthViewService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MonthViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$3 = [[]];\nconst CELLS_LENGTH$3 = 5;\nconst ROWS_LENGTH$3 = 3;\nconst upStep = (month) => {\n if (month > 4) {\n return -5;\n }\n if (month < 2) {\n return -2;\n }\n return -7;\n};\nconst downStep = (month) => {\n if (month < 7) {\n return 5;\n }\n if (month < 10) {\n return 7;\n }\n return 2;\n};\nconst ACTIONS$3 = {\n [Action.Left]: (date) => addMonths(date, -1),\n [Action.Up]: (date) => addMonths(date, upStep(date.getMonth())),\n [Action.Right]: (date) => addMonths(date, 1),\n [Action.Down]: (date) => addMonths(date, downStep(date.getMonth())),\n [Action.PrevView]: (date) => addYears(date, -1),\n [Action.NextView]: (date) => addYears(date, 1),\n [Action.FirstInView]: (date) => firstMonthOfYear(date),\n [Action.LastInView]: (date) => lastMonthOfYear(date)\n};\n/**\n * @hidden\n */\nclass YearViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n }\n addToDate(min, skip) {\n return addYears(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addYears(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$3;\n }\n const months = this.abbrMonthNames();\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const firstDate = firstMonthOfYear(viewDate);\n const lastDate = lastMonthOfYear(viewDate);\n const currentYear = firstDate.getFullYear();\n const cells = range(0, CELLS_LENGTH$3);\n const today = getToday();\n return range(0, ROWS_LENGTH$3).map(rowOffset => {\n const baseDate = addMonths(firstDate, rowOffset * CELLS_LENGTH$3);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addMonths(baseDate, cellOffset), min, max);\n const changedYear = currentYear < cellDate.getFullYear();\n if (!this.isInRange(cellDate, min, max) || changedYear) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: months[cellDate.getMonth()],\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear() &&\n candidate.getMonth() === expected.getMonth();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= dates[dates.length - 1].getFullYear();\n }\n isInRange(candidate, min, max) {\n const candidateValue = createDate(candidate.getFullYear(), candidate.getMonth(), 1);\n const aboveMin = !min || createDate(min.getFullYear(), min.getMonth(), 1) <= candidateValue;\n const belowMax = !max || candidateValue <= createDate(max.getFullYear(), max.getMonth(), 1);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 10 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$3[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return `${value.getFullYear()} ${this.value(value)}`;\n }\n navigationTitle(value) {\n return this.title(value);\n }\n title(current) {\n return current ? current.getFullYear().toString() : '';\n }\n rowLength(_) {\n return CELLS_LENGTH$3;\n }\n skip(value, min) {\n return durationInYears(min, value);\n }\n total(min, max) {\n return durationInYears(min, max) + 1;\n }\n value(current) {\n return current ? this.abbrMonthNames()[current.getMonth()] : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const yearsToSubtract = viewsCount - viewsInRange;\n return addYears(date, -1 * yearsToSubtract);\n }\n return date;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nYearViewService.ɵfac = function YearViewService_Factory(t) { return new (t || YearViewService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nYearViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: YearViewService, factory: YearViewService.ɵfac });\n/** @nocollapse */\nYearViewService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(YearViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/**\n * @hidden\n *\n * The Enum which defines all possible Calendar view types.\n */\nvar CalendarViewEnum;\n(function (CalendarViewEnum) {\n CalendarViewEnum[CalendarViewEnum[\"month\"] = 0] = \"month\";\n CalendarViewEnum[CalendarViewEnum[\"year\"] = 1] = \"year\";\n CalendarViewEnum[CalendarViewEnum[\"decade\"] = 2] = \"decade\";\n CalendarViewEnum[CalendarViewEnum[\"century\"] = 3] = \"century\";\n})(CalendarViewEnum || (CalendarViewEnum = {}));\n\nconst services = {\n [CalendarViewEnum.month]: MonthViewService,\n [CalendarViewEnum.year]: YearViewService,\n [CalendarViewEnum.decade]: DecadeViewService,\n [CalendarViewEnum.century]: CenturyViewService\n};\nconst viewOffset = (view, offset) => {\n const candidate = CalendarViewEnum[CalendarViewEnum[view + offset]];\n return candidate !== undefined ? candidate : view;\n};\n/**\n * @hidden\n */\nclass BusViewService {\n constructor(injector) {\n this.injector = injector;\n this.viewChanged = new EventEmitter();\n this.bottom = CalendarViewEnum.month;\n this.top = CalendarViewEnum.century;\n }\n configure(bottom, top) {\n this.bottom = bottom;\n this.top = top;\n }\n service(view) {\n const serviceType = services[view];\n return serviceType ? this.injector.get(serviceType) : null;\n }\n moveDown(view) {\n this.move(view, -1);\n }\n moveUp(view) {\n this.move(view, 1);\n }\n moveToBottom(activeView) {\n if (activeView === this.bottom) {\n return;\n }\n this.viewChanged.emit({ view: this.bottom });\n }\n canMoveDown(view) {\n return this.bottom < view;\n }\n canMoveUp(view) {\n return view < this.top;\n }\n clamp(view) {\n if (view < this.bottom) {\n return this.bottom;\n }\n if (view > this.top) {\n return this.top;\n }\n return view;\n }\n move(view, offset) {\n const candidate = this.clamp(viewOffset(view, offset));\n if (candidate === view) {\n return;\n }\n this.viewChanged.emit({ view: candidate });\n }\n}\nBusViewService.ɵfac = function BusViewService_Factory(t) { return new (t || BusViewService)(ɵngcc0.ɵɵinject(ɵngcc0.Injector)); };\nBusViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BusViewService, factory: BusViewService.ɵfac });\n/** @nocollapse */\nBusViewService.ctorParameters = () => [\n { type: Injector }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BusViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.Injector }]; }, null); })();\n\n/**\n * @hidden\n */\nconst requiresZoneOnBlur = (ngControl) => ngControl &&\n (!ngControl.touched || (ngControl.control && ngControl.control.updateOn === 'blur'));\n/**\n * @hidden\n */\nconst preventDefault = (args) => args.preventDefault();\n/**\n * @hidden\n */\nconst currentFocusTarget = (blurArgs) => blurArgs.relatedTarget || document.activeElement;\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== undefined && value !== null;\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are numbers, returns `true.\n */\nconst isNumberArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => typeof item === 'number');\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are dates, returns `true`.\n */\nconst isDateArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => item instanceof Date);\n\nconst div = domContainerFactory('div');\nconst ul = domContainerFactory('ul');\nconst li = domContainerFactory('li');\nconst td = domContainerFactory('td');\nconst th = domContainerFactory('th');\nconst tr = domContainerFactory('tr');\nconst tbody = domContainerFactory('tbody');\nconst thead = domContainerFactory('thead');\nconst table = domContainerFactory('table');\nconst monthHeader = () => (div(`\n March 2017\n TODAY\n `, 'k-calendar-header'));\nconst monthWeekHeader = () => (table([\n thead([\n tr([th('MO')])\n ])\n], 'k-calendar-weekdays'));\nconst repeat = (count, mapper) => new Array(count).fill('1').map(mapper);\nconst content = (rows, cells = 1) => (table([\n tbody([tr([th('1')])].concat(repeat(rows, () => tr(repeat(cells, c => td(`${c}`))))))\n]));\nconst scrollable = (children) => div(children, 'k-content k-scrollable');\nconst view = (contentElement, className, renderWeekHeader) => (div([\n monthHeader(),\n renderWeekHeader ? monthWeekHeader() : null,\n scrollable([contentElement, contentElement])\n], className, { left: '-10000px', position: 'absolute' }));\nconst ɵ6 = () => {\n let navElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!navElement) {\n navElement = div([scrollable([ul([li('FEB')])])], 'k-calendar-navigation', { left: '0px', position: 'absolute' });\n }\n return navElement;\n };\n};\nconst navigationList = (ɵ6)();\nconst viewFactory = ({ cells, rows }, className, renderWeekHeader) => {\n let viewElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!viewElement) {\n viewElement = view(content(rows, cells), className, renderWeekHeader);\n }\n return viewElement;\n };\n};\nconst getScrollable = (element) => element.querySelector('.k-scrollable');\nconst horizontal = element => {\n const scrollableElement = getScrollable(element);\n scrollableElement.classList.add('k-scrollable-horizontal');\n return element;\n};\nconst monthView = viewFactory({ cells: 7, rows: 6 }, 'k-calendar-view k-calendar-monthview', true);\nconst yearView = viewFactory({ cells: 5, rows: 3 }, 'k-calendar-view k-calendar-yearview', false);\nconst decadeView = viewFactory({ cells: 5, rows: 2 }, 'k-calendar-view k-calendar-decadeview', false);\nconst horzMonthView = () => horizontal(monthView());\nconst horzYearView = () => horizontal(yearView());\nconst horzDecadeView = () => horizontal(decadeView());\nconst height = (element) => (parseFloat(window.getComputedStyle(element).height) || element.offsetHeight);\nconst width = (element) => {\n const styles = window.getComputedStyle(element);\n const computed = parseFloat(styles.width)\n + parseFloat(styles.paddingLeft)\n + parseFloat(styles.paddingRight);\n return computed || element.offsetWidth;\n};\nconst getBody = (element) => element.querySelector('tbody');\n/**\n * @hidden\n */\nclass CalendarDOMService {\n ensureHeights() {\n if (this.calendarHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n this.hostContainer = container;\n this.batch(monthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarHeight = height(contentElement);\n this.monthViewHeight = height(viewElement);\n this.headerHeight = height(viewElement.children[0]);\n this.scrollableContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzMonthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarWidth = width(contentElement);\n this.monthViewWidth = width(viewElement);\n this.scrollableContentWidth = width(getScrollable(contentElement));\n });\n this.batch(yearView(), (contentElement) => {\n this.yearViewHeight = height(getBody(contentElement));\n this.scrollableYearContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzYearView(), (contentElement) => {\n this.yearViewWidth = width(getBody(contentElement));\n });\n this.batch(decadeView(), (contentElement) => {\n this.decadeViewHeight = height(getBody(contentElement));\n this.centuryViewHeight = this.decadeViewHeight;\n });\n this.batch(horzDecadeView(), (contentElement) => {\n this.decadeViewWidth = width(getBody(contentElement));\n this.centuryViewWidth = this.decadeViewWidth;\n });\n this.batch(navigationList(), (contentElement) => {\n this.navigationItemHeight = height(contentElement.querySelector('li'));\n });\n }\n viewHeight(viewType) {\n return this.viewDimension(viewType, 'height');\n }\n viewWidth(viewType) {\n return this.viewDimension(viewType, 'width');\n }\n viewDimension(viewType, dimension) {\n const viewProp = dimension === 'height' ? 'ViewHeight' : 'ViewWidth';\n switch (viewType) {\n case CalendarViewEnum.month:\n return this[`month${viewProp}`];\n case CalendarViewEnum.year:\n return this[`year${viewProp}`];\n case CalendarViewEnum.decade:\n return this[`decade${viewProp}`];\n case CalendarViewEnum.century:\n return this[`century${viewProp}`];\n default:\n return 1;\n }\n }\n batch(contentElement, action) {\n if (!isPresent(this.hostContainer)) {\n return;\n }\n const hostClone = this.hostContainer.cloneNode();\n document.body.appendChild(hostClone);\n try {\n const appendedContent = hostClone.appendChild(contentElement);\n action(appendedContent);\n }\n catch (error) {\n throw error;\n }\n finally {\n document.body.removeChild(hostClone);\n }\n }\n}\nCalendarDOMService.ɵfac = function CalendarDOMService_Factory(t) { return new (t || CalendarDOMService)(); };\nCalendarDOMService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CalendarDOMService, factory: CalendarDOMService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarDOMService, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst update = (arr, idx, value) => ([\n ...arr.slice(0, idx + 1),\n ...(arr.slice(idx + 1).map(x => x + value))\n]);\n/**\n * @hidden\n */\nclass RowHeightService {\n constructor(total = 0, rowHeight, detailRowHeight) {\n this.total = total;\n this.rowHeight = rowHeight;\n this.detailRowHeight = detailRowHeight;\n this.offsets = [];\n this.heights = [];\n let agg = 0;\n for (let idx = 0; idx < total; idx++) {\n this.offsets.push(agg);\n agg += rowHeight;\n this.heights.push(rowHeight);\n }\n }\n height(rowIndex) {\n return this.heights[rowIndex];\n }\n expandDetail(rowIndex) {\n if (this.height(rowIndex) === this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight);\n }\n }\n collapseDetail(rowIndex) {\n if (this.height(rowIndex) > this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight * -1);\n }\n }\n index(position) {\n if (position < 0) {\n return undefined;\n }\n const result = this.offsets.reduce((prev, current, idx) => {\n if (prev !== undefined) {\n return prev;\n }\n else if (current === position) {\n return idx;\n }\n else if (current > position) {\n return idx - 1;\n }\n return undefined;\n }, undefined); // tslint:disable-line:align\n return result === undefined ? this.total - 1 : result;\n }\n offset(rowIndex) {\n return this.offsets[rowIndex];\n }\n totalHeight() {\n return this.heights.reduce((prev, curr) => prev + curr, 0);\n }\n updateRowHeight(rowIndex, value) {\n this.heights[rowIndex] += value;\n this.offsets = update(this.offsets, rowIndex, value);\n }\n}\n\nconst normalize = x => Math.max(x, 0);\n/**\n * @hidden\n */\nclass ScrollAction {\n constructor(offset) {\n this.offset = offset;\n }\n}\n/**\n * @hidden\n */\nclass PageAction {\n constructor(skip) {\n this.skip = skip;\n }\n}\n/**\n * @hidden\n */\nclass ScrollerService {\n constructor(scrollObservable) {\n this.scrollObservable = scrollObservable;\n this.firstLoaded = 0;\n this.bottomOffset = 0;\n this.topOffset = 0;\n }\n create(rowHeightService, skip, take, total, topOffset = 0, bottomOffset = 0, direction = 'vertical') {\n this.rowHeightService = rowHeightService;\n this.firstLoaded = skip;\n this.lastLoaded = skip + take;\n this.take = take;\n this.total = total;\n this.lastScroll = 0;\n this.topOffset = topOffset;\n this.bottomOffset = bottomOffset;\n this.direction = direction;\n const subject = new ReplaySubject(2);\n const offsetBufferRows = this.rowsForHeight(topOffset);\n const skipWithOffset = normalize(skip - offsetBufferRows);\n subject.next(new ScrollAction(this.rowOffset(skipWithOffset)));\n if (offsetBufferRows) {\n subject.next(new PageAction(skipWithOffset));\n }\n this.subscription = Observable.create(observer => {\n this.unsubscribe();\n this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));\n }).subscribe(x => subject.next(x));\n return subject;\n }\n destroy() {\n this.unsubscribe();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n onScroll({ scrollLeft, scrollTop, offsetHeight, offsetWidth }, observer) {\n const scrollPosition = this.direction === 'vertical' ? scrollTop : scrollLeft;\n const offsetSize = this.direction === 'vertical' ? offsetHeight : offsetWidth;\n if (this.lastScroll === scrollPosition) {\n return;\n }\n const up = this.lastScroll >= scrollPosition;\n this.lastScroll = scrollPosition;\n const firstItemIndex = this.rowHeightService.index(normalize(scrollPosition - this.topOffset));\n const lastItemIndex = this.rowHeightService.index(normalize(scrollPosition + offsetSize - this.bottomOffset));\n if (!up && lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total) {\n this.firstLoaded = firstItemIndex;\n observer.next(new ScrollAction(this.rowOffset(firstItemIndex)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n if (up && firstItemIndex <= this.firstLoaded) {\n const nonVisibleBuffer = Math.floor(this.take * 0.3);\n this.firstLoaded = normalize(firstItemIndex - nonVisibleBuffer);\n observer.next(new ScrollAction(this.rowOffset(this.firstLoaded)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n }\n rowOffset(index) {\n return this.rowHeightService.offset(index) + this.topOffset;\n }\n rowsForHeight(height) {\n return Math.ceil(height / this.rowHeightService.height(0));\n }\n unsubscribe() {\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = null;\n }\n }\n}\n\n/* tslint:disable:component-selector-name component-selector-type */\n/**\n * @hidden\n */\nconst SCROLLER_FACTORY_TOKEN = new InjectionToken('dateinputs-scroll-service-factory');\n/**\n * @hidden\n */\nfunction DEFAULT_SCROLLER_FACTORY(observable) {\n return new ScrollerService(observable);\n}\n/**\n * @hidden\n */\nvar ScrollDirection;\n(function (ScrollDirection) {\n ScrollDirection[ScrollDirection[\"Backward\"] = 0] = \"Backward\";\n ScrollDirection[ScrollDirection[\"Forward\"] = 1] = \"Forward\";\n})(ScrollDirection || (ScrollDirection = {}));\nconst FRAME_DURATION = 17;\nconst scrollModifiers = {\n [ScrollDirection.Forward]: (step) => value => value + step,\n [ScrollDirection.Backward]: (step) => value => value - step\n};\nconst scrollNormalizers = {\n [ScrollDirection.Forward]: (end) => value => Math.min(value, end),\n [ScrollDirection.Backward]: (end) => value => Math.max(value, end)\n};\nconst scrollValidators = {\n [ScrollDirection.Forward]: end => start => start < end,\n [ScrollDirection.Backward]: end => start => start > end\n};\nconst differenceToScroll = (scrollTop, staticOffset, maxScrollDifference) => {\n return Math.min(Math.abs(staticOffset - scrollTop), maxScrollDifference);\n};\n/**\n * @hidden\n */\nclass VirtualizationComponent {\n constructor(scrollerFactory, container, renderer, zone) {\n this.container = container;\n this.renderer = renderer;\n this.zone = zone;\n this.direction = 'vertical';\n this.itemHeight = 1;\n this.itemWidth = 1;\n this.topOffset = 0;\n this.bottomOffset = 0;\n this.maxScrollDifference = 100;\n this.scrollOffsetSize = 0;\n this.scrollDuration = 150;\n this.activeIndexChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.scrollChange = new EventEmitter();\n this.resolvedPromise = Promise.resolve(null);\n this.dispatcher = new Subject();\n this.scroller = scrollerFactory(this.dispatcher);\n }\n get totalVertexLength() {\n const value = `${this.totalSize}px`;\n return this.direction === 'vertical' ? { height: value } : { width: value };\n }\n get containerOffsetSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'offsetHeight' : 'offsetWidth');\n }\n get containerScrollSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth');\n }\n get containerScrollPosition() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollTop' : 'scrollLeft');\n }\n get wrapperClasses() {\n return true;\n }\n get horizontalClass() {\n return this.direction === 'horizontal';\n }\n ngOnChanges(changes) {\n if (changes.direction || changes.take || changes.total) {\n this.initServices();\n this.totalSize = this.rowHeightService.totalHeight() + this.bottomOffset;\n }\n }\n ngOnInit() {\n if (!this.rowHeightService) {\n this.rowHeightService = this.createRowHeightService();\n }\n }\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.containerScrollSubscription = this.scroll$()\n .pipe(map((event) => event.target))\n .subscribe(t => {\n this.dispatcher.next(t);\n this.emitActiveIndex();\n });\n });\n }\n ngOnDestroy() {\n if (this.containerScrollSubscription) {\n this.containerScrollSubscription.unsubscribe();\n }\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n }\n getContainerProperty(propertyName) {\n return this.container.nativeElement[propertyName];\n }\n activeIndex() {\n return this.itemIndex(Math.ceil(this.containerScrollPosition)); //handle subpixeling\n }\n itemIndex(offset) {\n return this.rowHeightService.index(offset);\n }\n itemOffset(index) {\n return this.rowHeightService.offset(index);\n }\n isIndexVisible(index) {\n if (!this.rowHeightService) {\n return false;\n }\n const containerTop = this.containerScrollPosition;\n const containerBottom = containerTop + this.containerOffsetSize;\n const top = this.rowHeightService.offset(index);\n const bottom = top + this.rowHeightService.height(index);\n return top >= containerTop && bottom <= containerBottom;\n }\n isListScrolled(index) {\n return this.containerScrollPosition !== this.rowHeightService.offset(index);\n }\n scrollTo(value) {\n const scrollProperty = this.direction === \"vertical\" ? 'scrollTop' : 'scrollLeft';\n this.renderer.setProperty(this.container.nativeElement, scrollProperty, value);\n }\n scrollToIndex(index) {\n //XXX: scrolling with tick is required to prevent list jump in Chrome.\n //Original issue: focus first day in the month and press LEFT arrow.\n //Notice how the view jumps on every day change.\n //\n this.zone.runOutsideAngular(() => {\n this.resolvedPromise.then(() => {\n this.scrollTo(this.rowHeightService.offset(index));\n });\n });\n }\n scrollToBottom() {\n this.scrollTo(this.totalSize);\n }\n animateToIndex(index) {\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n const indexOffset = this.rowHeightService.offset(index);\n const direction = this.getContainerScrollDirection(indexOffset);\n const { start, end } = this.scrollRange(indexOffset, direction);\n if (start === end) {\n return;\n }\n const step = this.scrollStep(start, end);\n const modifyScroll = scrollModifiers[direction](step);\n const normalizeScroll = scrollNormalizers[direction](end);\n const isScrollValid = scrollValidators[direction](modifyScroll(end));\n this.zone.runOutsideAngular(() => {\n this.animationSubscription =\n combineLatest(of(start), interval(0, animationFrameScheduler)).pipe(map(stream => stream[0]), scan(modifyScroll), takeWhile(isScrollValid), map(normalizeScroll)).subscribe((x) => this.scrollTo(x));\n });\n }\n scrollRange(indexOffset, direction) {\n const containerScroll = this.containerScrollPosition;\n if (parseInt(indexOffset, 10) === parseInt(containerScroll, 10)) {\n return { start: indexOffset, end: indexOffset };\n }\n const maxScroll = this.containerMaxScroll();\n const sign = direction === ScrollDirection.Backward ? 1 : -1;\n const difference = differenceToScroll(containerScroll, indexOffset, this.maxScrollDifference);\n const end = Math.min(indexOffset, maxScroll);\n const start = Math.min(Math.max(end + (sign * difference), 0), maxScroll);\n return { start, end };\n }\n scrollStep(start, end) {\n return Math.abs(end - start) / (this.scrollDuration / FRAME_DURATION);\n }\n scroll$() {\n return isDocumentAvailable() ? fromEvent(this.container.nativeElement, 'scroll') : EMPTY;\n }\n initServices() {\n this.rowHeightService = this.createRowHeightService();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n this.scrollSubscription = this.scroller\n .create(this.rowHeightService, this.skip, this.take, this.total, this.topOffset, this.scrollOffsetSize, this.direction)\n .subscribe((x) => {\n if (x instanceof PageAction) {\n this.pageChange.emit(x);\n }\n else {\n this.scrollChange.emit(x);\n }\n });\n }\n createRowHeightService() {\n const dimension = this.direction === 'vertical' ? this.itemHeight : this.itemWidth;\n return new RowHeightService(this.total, dimension, 0);\n }\n emitActiveIndex() {\n const index = this.rowHeightService.index(this.containerScrollPosition - this.topOffset);\n if (this.lastActiveIndex !== index) {\n this.lastActiveIndex = index;\n this.activeIndexChange.emit(index);\n }\n }\n containerMaxScroll() {\n return this.containerScrollSize - this.containerOffsetSize;\n }\n getContainerScrollDirection(indexOffset) {\n return indexOffset < this.containerScrollPosition ? ScrollDirection.Backward : ScrollDirection.Forward;\n }\n}\nVirtualizationComponent.ɵfac = function VirtualizationComponent_Factory(t) { return new (t || VirtualizationComponent)(ɵngcc0.ɵɵdirectiveInject(SCROLLER_FACTORY_TOKEN), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nVirtualizationComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: VirtualizationComponent, selectors: [[\"kendo-virtualization\"]], hostVars: 6, hostBindings: function VirtualizationComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-content\", ctx.wrapperClasses)(\"k-scrollable\", ctx.wrapperClasses)(\"k-scrollable-horizontal\", ctx.horizontalClass);\n } }, inputs: { direction: \"direction\", itemHeight: \"itemHeight\", itemWidth: \"itemWidth\", topOffset: \"topOffset\", bottomOffset: \"bottomOffset\", maxScrollDifference: \"maxScrollDifference\", scrollOffsetSize: \"scrollOffsetSize\", scrollDuration: \"scrollDuration\", skip: \"skip\", take: \"take\", total: \"total\" }, outputs: { activeIndexChange: \"activeIndexChange\", pageChange: \"pageChange\", scrollChange: \"scrollChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 2, vars: 3, consts: [[1, \"k-scrollable-placeholder\", 3, \"ngStyle\"]], template: function VirtualizationComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelement(1, \"div\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-scrollable-horizontal-placeholder\", ctx.direction === \"horizontal\");\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.totalVertexLength);\n } }, directives: [ɵngcc2.NgStyle], encapsulation: 2 });\n/** @nocollapse */\nVirtualizationComponent.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [SCROLLER_FACTORY_TOKEN,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nVirtualizationComponent.propDecorators = {\n direction: [{ type: Input }],\n itemHeight: [{ type: Input }],\n itemWidth: [{ type: Input }],\n topOffset: [{ type: Input }],\n bottomOffset: [{ type: Input }],\n maxScrollDifference: [{ type: Input }],\n scrollOffsetSize: [{ type: Input }],\n scrollDuration: [{ type: Input }],\n skip: [{ type: Input }],\n take: [{ type: Input }],\n total: [{ type: Input }],\n activeIndexChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n scrollChange: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-content',] }, { type: HostBinding, args: ['class.k-scrollable',] }],\n horizontalClass: [{ type: HostBinding, args: ['class.k-scrollable-horizontal',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(VirtualizationComponent, [{\n type: Component,\n args: [{\n providers: [{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }],\n selector: 'kendo-virtualization',\n template: `\n \n
    \n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [SCROLLER_FACTORY_TOKEN]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { direction: [{\n type: Input\n }], itemHeight: [{\n type: Input\n }], itemWidth: [{\n type: Input\n }], topOffset: [{\n type: Input\n }], bottomOffset: [{\n type: Input\n }], maxScrollDifference: [{\n type: Input\n }], scrollOffsetSize: [{\n type: Input\n }], scrollDuration: [{\n type: Input\n }], activeIndexChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], scrollChange: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-content']\n }, {\n type: HostBinding,\n args: ['class.k-scrollable']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-scrollable-horizontal']\n }], skip: [{\n type: Input\n }], take: [{\n type: Input\n }], total: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst ITEMS_COUNT = 30;\n/**\n * @hidden\n */\nclass NavigationComponent {\n constructor(bus, dom, intl, cdr, renderer) {\n this.bus = bus;\n this.dom = dom;\n this.intl = intl;\n this.cdr = cdr;\n this.renderer = renderer;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.focusedDate = new Date();\n this.valueChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.dates = [];\n this.take = ITEMS_COUNT;\n this.indexToScroll = -1;\n }\n get getComponentClass() {\n return true;\n }\n ngOnInit() {\n this.dom.ensureHeights();\n const calendarHeight = this.dom.calendarHeight;\n this.itemHeight = this.dom.navigationItemHeight;\n this.maxViewHeight = this.dom.monthViewHeight;\n this.topOffset = (calendarHeight - this.itemHeight) / 2;\n this.bottomOffset = calendarHeight - this.itemHeight;\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n const viewDate = dateInRange(this.focusedDate, this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n if (totalChanged || !this.service.isInArray(viewDate, this.dates)) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!!changes.focusedDate || totalChanged) {\n this.indexToScroll = this.service.skip(this.focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n handleDateChange(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-date-index'), this.list.nativeElement);\n if (item) {\n const index = parseInt(item.getAttribute('data-date-index'), 10);\n const candidate = this.dates[index];\n this.valueChange.emit(cloneDate(candidate));\n }\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n intlChange() {\n if (this.activeView === CalendarViewEnum.month) {\n this.cdr.markForCheck();\n }\n }\n}\nNavigationComponent.ɵfac = function NavigationComponent_Factory(t) { return new (t || NavigationComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nNavigationComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NavigationComponent, selectors: [[\"kendo-calendar-navigation\"]], viewQuery: function NavigationComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(VirtualizationComponent, true);\n ɵngcc0.ɵɵstaticViewQuery(_c1, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.list = _t.first);\n } }, hostVars: 2, hostBindings: function NavigationComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-navigation\", ctx.getComponentClass);\n } }, inputs: { min: \"min\", max: \"max\", focusedDate: \"focusedDate\", activeView: \"activeView\", templateRef: \"templateRef\" }, outputs: { valueChange: \"valueChange\", pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 12, consts: [[1, \"k-calendar-navigation-highlight\"], [3, \"skip\", \"take\", \"total\", \"itemHeight\", \"topOffset\", \"bottomOffset\", \"maxScrollDifference\", \"pageChange\", \"scrollChange\"], [1, \"k-reset\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"list\", \"\"], [4, \"kFor\", \"kForOf\"], [3, \"ngIf\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function NavigationComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-virtualization\", 1);\n ɵngcc0.ɵɵlistener(\"pageChange\", function NavigationComponent_Template_kendo_virtualization_pageChange_1_listener($event) { return ctx.onPageChange($event); })(\"scrollChange\", function NavigationComponent_Template_kendo_virtualization_scrollChange_1_listener($event) { return ctx.scrollChange($event); });\n ɵngcc0.ɵɵelementStart(2, \"ul\", 2, 3);\n ɵngcc0.ɵɵtemplate(4, NavigationComponent_li_4_Template, 4, 11, \"li\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"skip\", ctx.skip)(\"take\", ctx.take)(\"total\", ctx.total)(\"itemHeight\", ctx.itemHeight)(\"topOffset\", ctx.topOffset)(\"bottomOffset\", ctx.bottomOffset)(\"maxScrollDifference\", ctx.maxViewHeight);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(10, _c3, ctx.handleDateChange))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [VirtualizationComponent, ɵngcc3.EventsOutsideAngularDirective, KForOf, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nNavigationComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: CalendarDOMService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: Renderer2 }\n];\nNavigationComponent.propDecorators = {\n activeView: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n focusedDate: [{ type: Input }],\n templateRef: [{ type: Input }],\n valueChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent,] }],\n list: [{ type: ViewChild, args: ['list', { static: true },] }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-navigation\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-navigation',\n template: `\n \n \n
      \n
    • \n \n {{service.navigationTitle(date)}}\n \n \n
    • \n
    \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-navigation\"]\n }], activeView: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }] }); })();\n\nconst VIEWS_COUNT = 5;\nconst isEqualMonthYear = (date1, date2) => (date1 && date2 &&\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth());\n/**\n * @hidden\n */\nclass ViewListComponent {\n constructor(bus, cdr, intl, dom, renderer) {\n this.bus = bus;\n this.cdr = cdr;\n this.intl = intl;\n this.dom = dom;\n this.renderer = renderer;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.activeDateChange = new EventEmitter();\n this.valueChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.dates = [];\n this.cols = [];\n this.weekNames = [];\n this.take = VIEWS_COUNT;\n this.animateToIndex = true;\n this.indexToScroll = -1;\n this.minViewsToRender = 1;\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get getComponentClass() {\n return true;\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnInit() {\n this.weekNames = this.getWeekNames();\n this.bottomOffset = this.getBottomOffset();\n this.viewOffset = -1 * this.dom.headerHeight;\n this.viewHeight = this.dom.viewHeight(this.activeView);\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.cols = new Array(this.service.rowLength(this.weekNumber)).fill('');\n this.colWidth = Math.round(100 / this.cols.length);\n this.weekNames = hasChange(changes, 'weekNumber') && this.weekNumber ? this.getWeekNames() : this.weekNames;\n const activeViewChanged = hasChange(changes, 'activeView');\n const focusedDate = this.focusedDate;\n const viewDate = dateInRange(this.service.viewDate(focusedDate, this.max, this.minViewsToRender), this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n const generateDates = totalChanged || !this.service.isInArray(focusedDate, this.dates);\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n this.animateToIndex = !activeViewChanged;\n this.bottomOffset = this.getBottomOffset();\n this.viewHeight = this.dom.viewHeight(this.activeView);\n if (generateDates) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!isEqualMonthYear(this.activeDate, focusedDate)) {\n this.activeDate = cloneDate(focusedDate);\n }\n const updateIndex = hasChange(changes, 'focusedDate') || activeViewChanged;\n if (generateDates || updateIndex || this.virtualization.isIndexVisible(this.skip)) {\n this.indexToScroll = this.service.skip(focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization[this.animateToIndex ? 'animateToIndex' : 'scrollToIndex'](this.indexToScroll);\n this.animateToIndex = true;\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n setActiveDate(index) {\n const candidate = this.service.addToDate(this.min, index);\n if (isEqual(this.activeDate, candidate)) {\n return;\n }\n this.activeDate = candidate;\n this.activeDateChange.emit(candidate);\n this.cdr.detectChanges();\n }\n handleDateChange(candidate) {\n this.valueChange.emit(candidate);\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n isScrolled() {\n return this.virtualization.isListScrolled(this.service.skip(this.focusedDate, this.min));\n }\n getBottomOffset() {\n return this.getScrollableHeight() - this.dom.viewHeight(this.activeView);\n }\n getScrollableHeight() {\n return this.activeView === CalendarViewEnum.month ?\n this.dom.scrollableContentHeight :\n this.dom.scrollableYearContentHeight;\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n getWeekNames() {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return this.weekNumber ? [''].concat(weekNames) : weekNames;\n }\n intlChange() {\n this.weekNames = this.getWeekNames();\n if (this.isMonthView()) {\n this.cdr.markForCheck();\n }\n }\n}\nViewListComponent.ɵfac = function ViewListComponent_Factory(t) { return new (t || ViewListComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nViewListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ViewListComponent, selectors: [[\"kendo-calendar-viewlist\"]], viewQuery: function ViewListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(VirtualizationComponent, true);\n ɵngcc0.ɵɵstaticViewQuery(_c1, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.list = _t.first);\n } }, hostVars: 10, hostBindings: function ViewListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-view\", ctx.getComponentClass)(\"k-calendar-monthview\", ctx.getComponentMonthClass)(\"k-calendar-yearview\", ctx.getComponentYearClass)(\"k-calendar-decadeview\", ctx.getComponentDecadeClass)(\"k-calendar-centuryview\", ctx.getComponentCenturyClass);\n } }, inputs: { isActive: \"isActive\", min: \"min\", max: \"max\", weekNumber: \"weekNumber\", cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", headerTitleTemplateRef: \"headerTitleTemplateRef\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", value: \"value\" }, outputs: { activeDateChange: \"activeDateChange\", valueChange: \"valueChange\", pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 8, vars: 17, consts: [[3, \"currentDate\", \"min\", \"max\", \"activeView\", \"templateRef\", \"today\"], [\"class\", \"k-calendar-weekdays\", \"style\", \"table-layout: auto;\", 4, \"ngIf\"], [3, \"tabindex\", \"skip\", \"take\", \"total\", \"itemHeight\", \"topOffset\", \"bottomOffset\", \"scrollOffsetSize\", \"maxScrollDifference\", \"pageChange\", \"scrollChange\", \"activeIndexChange\"], [\"list\", \"\"], [4, \"ngFor\", \"ngForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", 4, \"kFor\", \"kForOf\"], [1, \"k-calendar-weekdays\", 2, \"table-layout\", \"auto\"], [3, \"width\", 4, \"ngFor\", \"ngForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\"]], template: function ViewListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-header\", 0);\n ɵngcc0.ɵɵlistener(\"today\", function ViewListComponent_Template_kendo_calendar_header_today_0_listener($event) { return ctx.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(1, ViewListComponent_table_1_Template, 4, 1, \"table\", 1);\n ɵngcc0.ɵɵelementStart(2, \"kendo-virtualization\", 2);\n ɵngcc0.ɵɵlistener(\"pageChange\", function ViewListComponent_Template_kendo_virtualization_pageChange_2_listener($event) { return ctx.onPageChange($event); })(\"scrollChange\", function ViewListComponent_Template_kendo_virtualization_scrollChange_2_listener($event) { return ctx.scrollChange($event); })(\"activeIndexChange\", function ViewListComponent_Template_kendo_virtualization_activeIndexChange_2_listener($event) { return ctx.setActiveDate($event); });\n ɵngcc0.ɵɵelementStart(3, \"table\", null, 3);\n ɵngcc0.ɵɵelementStart(5, \"colgroup\");\n ɵngcc0.ɵɵtemplate(6, ViewListComponent_col_6_Template, 1, 0, \"col\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, ViewListComponent_tbody_7_Template, 1, 11, \"tbody\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentDate\", ctx.activeDate)(\"min\", ctx.min)(\"max\", ctx.max)(\"activeView\", ctx.activeView)(\"templateRef\", ctx.headerTitleTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isMonthView());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"tabindex\", -1)(\"skip\", ctx.skip)(\"take\", ctx.take)(\"total\", ctx.total)(\"itemHeight\", ctx.viewHeight)(\"topOffset\", ctx.viewOffset)(\"bottomOffset\", ctx.bottomOffset)(\"scrollOffsetSize\", ctx.viewOffset)(\"maxScrollDifference\", ctx.viewHeight);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.cols);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [HeaderComponent, ɵngcc2.NgIf, VirtualizationComponent, ɵngcc2.NgForOf, KForOf, ViewComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nViewListComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef },\n { type: IntlService },\n { type: CalendarDOMService },\n { type: Renderer2 }\n];\nViewListComponent.propDecorators = {\n cellTemplateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n headerTitleTemplateRef: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n isActive: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n value: [{ type: Input }],\n weekNumber: [{ type: Input }],\n activeDateChange: [{ type: Output }],\n valueChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent,] }],\n list: [{ type: ViewChild, args: ['list', { static: true },] }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-view\",] }],\n getComponentMonthClass: [{ type: HostBinding, args: [\"class.k-calendar-monthview\",] }],\n getComponentYearClass: [{ type: HostBinding, args: [\"class.k-calendar-yearview\",] }],\n getComponentDecadeClass: [{ type: HostBinding, args: [\"class.k-calendar-decadeview\",] }],\n getComponentCenturyClass: [{ type: HostBinding, args: [\"class.k-calendar-centuryview\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ViewListComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-viewlist',\n template: `\n \n \n \n \n \n \n \n \n
    {{name}}
    \n \n \n \n\n \n
    \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.IntlService }, { type: CalendarDOMService }, { type: ɵngcc0.Renderer2 }]; }, { isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], activeDateChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }], cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], headerTitleTemplateRef: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], value: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }] }); })();\n\nconst KEY_TO_ACTION = {\n '33': Action.PrevView,\n '34': Action.NextView,\n '35': Action.LastInView,\n '36': Action.FirstInView,\n '37': Action.Left,\n '38': Action.Up,\n '39': Action.Right,\n '40': Action.Down,\n 'meta+38': Action.UpperView,\n 'meta+40': Action.LowerView\n};\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(bus) {\n this.bus = bus;\n }\n action(event) {\n const action = `${event.ctrlKey || event.metaKey ? 'meta+' : ''}${event.keyCode}`;\n return KEY_TO_ACTION[action];\n }\n move(value, action, activeView) {\n const service = this.bus.service(activeView);\n if (!service) {\n return value;\n }\n if (action === Action.UpperView && this.bus.canMoveUp(activeView)) {\n this.bus.moveUp(activeView);\n return value;\n }\n if (action === Action.LowerView && this.bus.canMoveDown(activeView)) {\n this.bus.moveDown(activeView);\n return value;\n }\n return service.move(value, action);\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(BusViewService)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: BusViewService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: BusViewService }]; }, null); })();\n\nconst divideByMagnitude = (magnitude) => x => Math.floor(x / magnitude);\nconst powerByMagnitude = (magnitude) => x => x * magnitude;\n/**\n * @hidden\n */\nclass ScrollSyncService {\n constructor(dom, zone) {\n this.dom = dom;\n this.zone = zone;\n }\n configure(activeView) {\n const magnitude = Math.max(this.dom.viewHeight(activeView) / this.dom.navigationItemHeight, 1);\n this.divideByMagnitude = divideByMagnitude(magnitude);\n this.powerByMagnitude = powerByMagnitude(magnitude);\n }\n sync(navigator, view) {\n this.unsubscribe();\n if (!navigator || !view) {\n return;\n }\n this.navigator = navigator;\n this.view = view;\n this.zone.runOutsideAngular(() => {\n let navScrolled, monthScrolled;\n this.navSubscription = navigator.scroll$()\n .subscribe((e) => {\n if (monthScrolled) {\n monthScrolled = false;\n return;\n }\n navScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n this.viewSubscription = view.scroll$()\n .subscribe((e) => {\n if (navScrolled) {\n navScrolled = false;\n return;\n }\n monthScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n });\n }\n scrollSiblingOf(scrolledElement) {\n const component = this.siblingComponent(scrolledElement);\n const scrollTop = this.calculateScroll(component, scrolledElement.scrollTop);\n component.scrollTo(scrollTop);\n }\n siblingComponent(scrollableElement) {\n return this.navigator.container.nativeElement === scrollableElement ? this.view : this.navigator;\n }\n calculateScroll(component, scrollTop) {\n const modifier = component === this.navigator ? this.divideByMagnitude : this.powerByMagnitude;\n return modifier(scrollTop);\n }\n destroy() {\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n if (this.viewSubscription) {\n this.viewSubscription.unsubscribe();\n }\n }\n}\nScrollSyncService.ɵfac = function ScrollSyncService_Factory(t) { return new (t || ScrollSyncService)(ɵngcc0.ɵɵinject(CalendarDOMService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nScrollSyncService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollSyncService, factory: ScrollSyncService.ɵfac });\n/** @nocollapse */\nScrollSyncService.ctorParameters = () => [\n { type: CalendarDOMService },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollSyncService, [{\n type: Injectable\n }], function () { return [{ type: CalendarDOMService }, { type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * Used for rendering the cell content of the Calendar. To define the cell template, nest an `` tag\n * with the `kendoCalendarCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details\n * about the current cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * > `kendoCalendarCellTemplate` is equivalent to\n * > [`kendoCalendarMonthCellTemplate`]({% slug api_dateinputs_monthcelltemplatedirective %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{date.getDate()}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCellTemplateDirective.ɵfac = function CellTemplateDirective_Factory(t) { return new (t || CellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CellTemplateDirective, selectors: [[\"\", \"kendoCalendarCellTemplate\", \"\"]] });\n/** @nocollapse */\nCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the month cell content of the Calendar. To define the month cell template, nest an `` tag\n * with the `kendoCalendarMonthCellTemplate` directive inside the component tag. The template context is set to the current\n * component. To get a reference to the current date, use the `let-date` directive. To provide more details about the current\n * month cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MonthCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMonthCellTemplateDirective.ɵfac = function MonthCellTemplateDirective_Factory(t) { return new (t || MonthCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nMonthCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MonthCellTemplateDirective, selectors: [[\"\", \"kendoCalendarMonthCellTemplate\", \"\"]] });\n/** @nocollapse */\nMonthCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MonthCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarMonthCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the year cell content of the Calendar. To define the year cell template, nest an\n * `` tag with the `kendoCalendarYearCellTemplate` directive inside the component tag.\n * The template context is set to the current component. To get a reference to the current date, use\n * the `let-date` directive. To provide more details about the current year cell, get a reference to the\n * current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'year';\n * }\n * ```\n */\nclass YearCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nYearCellTemplateDirective.ɵfac = function YearCellTemplateDirective_Factory(t) { return new (t || YearCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nYearCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: YearCellTemplateDirective, selectors: [[\"\", \"kendoCalendarYearCellTemplate\", \"\"]] });\n/** @nocollapse */\nYearCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(YearCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarYearCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the decade cell content of the Calendar. To define the decade cell template, nest an ``\n * tag with the `kendoCalendarDecadeCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current decade cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'decade';\n * }\n * ```\n */\nclass DecadeCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDecadeCellTemplateDirective.ɵfac = function DecadeCellTemplateDirective_Factory(t) { return new (t || DecadeCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nDecadeCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DecadeCellTemplateDirective, selectors: [[\"\", \"kendoCalendarDecadeCellTemplate\", \"\"]] });\n/** @nocollapse */\nDecadeCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DecadeCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarDecadeCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the century cell content of the Calendar. To define the century cell template, nest an ``\n * tag with the `kendoCalendarCenturyCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current century cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'century';\n * }\n * ```\n */\nclass CenturyCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCenturyCellTemplateDirective.ɵfac = function CenturyCellTemplateDirective_Factory(t) { return new (t || CenturyCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCenturyCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CenturyCellTemplateDirective, selectors: [[\"\", \"kendoCalendarCenturyCellTemplate\", \"\"]] });\n/** @nocollapse */\nCenturyCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CenturyCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCenturyCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the week number cell content in the month view of the Calendar. To define the month week number cell template,\n * nest an `` tag with the `kendoCalendarWeekNumberCellTemplate` directive inside the component tag. The template\n * context is set to the current component. To get a reference to the current date, use the `let-date` directive. To provide more\n * details about the current week number cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass WeekNumberCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nWeekNumberCellTemplateDirective.ɵfac = function WeekNumberCellTemplateDirective_Factory(t) { return new (t || WeekNumberCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nWeekNumberCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WeekNumberCellTemplateDirective, selectors: [[\"\", \"kendoCalendarWeekNumberCellTemplate\", \"\"]] });\n/** @nocollapse */\nWeekNumberCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WeekNumberCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarWeekNumberCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the header title of the Calendar. To define the header title template, nest an `` tag\n * with the `kendoCalendarHeaderTitleTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current title, use the `let-title` directive. To provide more details about\n * the current title, get a reference to the current `date` by using the `let-date` directive or get a reference to the\n * current active view by using the `let-activeView` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass HeaderTitleTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTitleTemplateDirective.ɵfac = function HeaderTitleTemplateDirective_Factory(t) { return new (t || HeaderTitleTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nHeaderTitleTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: HeaderTitleTemplateDirective, selectors: [[\"\", \"kendoCalendarHeaderTitleTemplate\", \"\"]] });\n/** @nocollapse */\nHeaderTitleTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderTitleTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarHeaderTitleTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the navigation item of the Calendar. To define the navigation item template, nest an ``\n * tag with the `kendoCalendarNavigationItemTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current item value, use the `let-title` directive. To provide more details\n * about the current title, get a reference to the current `date` by using the `let-date='date'` directive or get a reference\n * to the current active view by using the `let-activeView='activeView'` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass NavigationItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNavigationItemTemplateDirective.ɵfac = function NavigationItemTemplateDirective_Factory(t) { return new (t || NavigationItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nNavigationItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NavigationItemTemplateDirective, selectors: [[\"\", \"kendoCalendarNavigationItemTemplate\", \"\"]] });\n/** @nocollapse */\nNavigationItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarNavigationItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PickerService {\n constructor() {\n this.onFocus = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.sameDateSelected = new EventEmitter();\n this.dateCompletenessChange = new EventEmitter();\n }\n}\nPickerService.ɵfac = function PickerService_Factory(t) { return new (t || PickerService)(); };\nPickerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PickerService, factory: PickerService.ɵfac });\n\n\n/**\n * @hidden\n */\nconst minValidator = (minValue) => {\n return (control) => {\n const err = {\n minError: {\n minValue: minValue,\n value: control.value\n }\n };\n if (!minValue || !control.value) {\n return null;\n }\n return control.value < minValue ? err : null;\n };\n};\n\n/**\n * @hidden\n */\nconst maxValidator = (maxValue) => {\n return (control) => {\n const err = {\n maxError: {\n maxValue: maxValue,\n value: control.value\n }\n };\n if (!maxValue || !control.value) {\n return null;\n }\n return control.value > maxValue ? err : null;\n };\n};\n\nconst noop$1 = () => false;\nconst DISABLED_DATES_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/disabled-dates/';\n/**\n * @hidden\n */\nclass DisabledDatesService {\n constructor() {\n /**\n * Emits every time the `isDateDisabled` method changes.\n */\n this.changes = new Subject();\n /**\n * Based on the user-defined `disabledDates` input evaluates if the date is disabled.\n * If not set, returns `false`.\n */\n this.isDateDisabled = noop$1;\n }\n /**\n * Configures the `isDateDisabled` function.\n *\n * * If a function is provided, uses it as-is and passes each date to it for evaluation.\n * The time part is set to `midnight`.\n * * If a `Date[]` is provided, creates a function that checks the targeted date against\n * the listed dates and, if the targeted date is listed, marks it as disabled.\n * * If a `Day[]` is provided, creates a function that evaluates the provided days of the\n * week as disabled.\n */\n initialize(disabledDates) {\n if (typeof disabledDates === 'function') {\n this.isDateDisabled = (date) => disabledDates(getDate(date));\n }\n else if (isNumberArray(disabledDates)) {\n const disabledWeekDays = new Set(disabledDates);\n this.isDateDisabled = (date) => disabledWeekDays.has(date.getDay());\n }\n else if (isDateArray(disabledDates)) {\n const normalizedDisabledDates = new Set(disabledDates.map(date => getDate(date).getTime()));\n this.isDateDisabled = (date) => normalizedDisabledDates.has(getDate(date).getTime());\n }\n else {\n this.isDateDisabled = noop$1;\n this.notifyInvalidInput(disabledDates);\n }\n this.notifyServiceChange();\n }\n notifyInvalidInput(disabledDates) {\n if (isPresent(disabledDates) && isDevMode()) {\n throw new Error(`The 'disabledDates' value should be a function, a Day array or a Date array. Check ${DISABLED_DATES_DOC_LINK} for more information.`);\n }\n }\n notifyServiceChange() {\n this.changes.next();\n }\n}\nDisabledDatesService.ɵfac = function DisabledDatesService_Factory(t) { return new (t || DisabledDatesService)(); };\nDisabledDatesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DisabledDatesService, factory: DisabledDatesService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DisabledDatesService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/* tslint:disable:no-forward-ref */\nconst BOTTOM_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\nconst virtualizationProp = x => x ? x.virtualization : null;\n/**\n * @hidden\n */\nconst CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst KENDO_INPUT_PROVIDER = {\n provide: KendoInput,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * Represents the [Kendo UI Calendar component for Angular]({% slug overview_calendar %}#toc-basic-usage).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CalendarComponent {\n constructor(bus, dom, element, navigator, renderer, cdr, ngZone, injector, scrollSyncService, disabledDatesService, pickerService) {\n this.bus = bus;\n this.dom = dom;\n this.element = element;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.ngZone = ngZone;\n this.injector = injector;\n this.scrollSyncService = scrollSyncService;\n this.disabledDatesService = disabledDatesService;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_calendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar will be displayed\n * ([see example]({% slug sidebar_calendar %})).\n */\n this.navigation = true;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_calendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view to which the user can navigate\n * ([see example]({% slug dates_calendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view to which the user can navigate\n * ([see example]({% slug sidebar_calendar %}#toc-partial-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_calendar %})).\n */\n this.weekNumber = false;\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when the active view date is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.activeViewDateChange = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n this.isActive = false;\n this.cellUID = guid();\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.syncNavigation = true;\n this.domEvents = [];\n this.resolvedPromise = Promise.resolve(null);\n this.destroyed = false;\n this.setClasses(element.nativeElement);\n if (this.pickerService) {\n this.pickerService.calendar = this;\n }\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_calendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n this._focusedDate = focusedDate || getToday();\n this.setAriaActivedescendant();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = cloneDate(candidate);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the Calendar that will be disabled\n * ([see example]({% slug disabled_dates_calendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n /**\n * @hidden\n */\n set navigationItemTemplateRef(template) {\n this.navigationItemTemplate = template;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get widgetRole() {\n return 'grid';\n }\n get calendarTabIndex() {\n return this.disabled ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n ngOnInit() {\n this.dom.calculateHeights(this.element.nativeElement);\n this.scrollSyncService.configure(this.activeViewEnum);\n this.viewChangeSubscription = this.bus.viewChanged.subscribe(({ view }) => {\n this.activeView = CalendarViewEnum[view];\n this.emitEvent(this.activeViewChange, this.activeView);\n this.scrollSyncService.configure(view);\n this.detectChanges(); // requires zone if templates\n });\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n this.scrollSyncService.configure(this.activeViewEnum);\n const useValue = hasExistingValue(changes, 'value') && !hasExistingValue(changes, 'focusedDate');\n const focusedDate = dateInRange(cloneDate(useValue ? this.value : this.focusedDate), this.min, this.max);\n this.focusedDate = !isEqual(this.focusedDate, focusedDate) ? focusedDate : this.focusedDate;\n if (changes.navigation) {\n this.syncNavigation = true;\n }\n if (changes.min || changes.max || changes.rangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.onValidatorChange();\n }\n }\n ngAfterViewInit() {\n this.setAriaActivedescendant();\n }\n ngAfterViewChecked() {\n if (!this.syncNavigation) {\n return;\n }\n this.syncNavigation = false;\n this.scrollSyncService.sync(virtualizationProp(this.navigationView), virtualizationProp(this.monthView));\n }\n ngOnDestroy() {\n this.scrollSyncService.destroy();\n this.viewChangeSubscription.unsubscribe();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n if (this.pickerService) {\n this.pickerService.calendar = null;\n }\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n this.destroyed = true;\n }\n /**\n * @hidden\n */\n onResize() {\n this.focusedDate = new Date(this.focusedDate);\n this.cdr.detectChanges();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n /**\n * @hidden\n */\n handleNavigation(candidate) {\n if (this.disabled) {\n return;\n }\n const focusTarget = candidate ? new Date(cloneDate(candidate).setDate(1)) : this.focusedDate;\n this.focusedDate = dateInRange(focusTarget, this.min, this.max);\n this.detectChanges();\n }\n /**\n * @hidden\n */\n onPageChange() {\n if (!NgZone.isInAngularZone()) {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n this.pageChangeSubscription = from(this.resolvedPromise)\n .subscribe(() => {\n this.detectChanges(); // requires zone if templates\n });\n }\n }\n /**\n * @hidden\n */\n handleDateChange(candidate) {\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const isSameDate = !canNavigateDown && isEqual(candidate, this.value);\n this.focusedDate = cloneDate(candidate) || this.focusedDate;\n if (this.disabled) {\n return;\n }\n if (isSameDate) {\n this.emitSameDate();\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (!this.disabledDatesService.isDateDisabled(candidate)) {\n this.ngZone.run(() => {\n this.value = cloneDate(candidate);\n this.onControlChange(cloneDate(candidate));\n this.valueChange.emit(cloneDate(candidate));\n this.cdr.markForCheck();\n });\n }\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.focusedDate = dateInRange(cloneDate(candidate) || this.focusedDate, this.min, this.max);\n this.value = cloneDate(candidate);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplate || this.cellTemplate;\n case CalendarViewEnum.year:\n return this.yearCellTemplate;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplate;\n case CalendarViewEnum.century:\n return this.centuryCellTemplate;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n emitEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.ngZone.run(() => {\n emitter.emit(args);\n });\n }\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, 'k-calendar-infinite');\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK} and ${TOP_VIEW_DOC_LINK}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK} for possible resolution.`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'blur', this.handleBlur.bind(this)), this.renderer.listen(element, 'focus', this.handleFocus.bind(this)), this.renderer.listen(element, 'mousedown', preventDefault), this.renderer.listen(element, 'click', this.handleClick.bind(this)), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus() {\n if (this.pickerService) {\n this.pickerService.onFocus.emit();\n }\n }\n handleBlur(args) {\n this.isActive = false;\n // the injector can get the NgControl instance of the parent component (for example, the DateTimePicker)\n // and enters the zone for no reason because the parent component is still untouched\n if (!this.pickerService && requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n this.detectChanges();\n }\n }\n handleFocus() {\n this.isActive = true;\n if (!NgZone.isInAngularZone()) {\n this.detectChanges();\n }\n this.emitFocus();\n }\n handleClick() {\n if (!this.isActive) {\n if (this.monthView.isScrolled()) {\n this.focusedDate = cloneDate(this.focusedDate); //XXX: forces change detect\n this.detectChanges();\n }\n this.focus();\n }\n }\n handleKeydown(args) {\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowUp, Keys.ArrowRight, Keys.ArrowDown, Keys.ArrowLeft].indexOf(args.keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && args.altKey) {\n return;\n }\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(args), this.activeViewEnum), this.min, this.max);\n if (!isEqual(this.focusedDate, candidate)) {\n this.focusedDate = candidate;\n this.detectChanges();\n args.preventDefault();\n }\n if (args.keyCode === Keys.Enter) {\n this.handleDateChange(this.focusedDate);\n }\n }\n detectChanges() {\n if (!this.destroyed) {\n this.cdr.detectChanges();\n }\n }\n emitSameDate() {\n if (this.pickerService) {\n this.pickerService.sameDateSelected.emit();\n }\n }\n setAriaActivedescendant() {\n if (!isPresent(this.element)) {\n return;\n }\n const focusedCellId = this.cellUID + this.focusedDate.getTime();\n this.renderer.setAttribute(this.element.nativeElement, 'aria-activedescendant', focusedCellId);\n }\n}\nCalendarComponent.ɵfac = function CalendarComponent_Factory(t) { return new (t || CalendarComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nCalendarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CalendarComponent, selectors: [[\"kendo-calendar\"]], contentQueries: function CalendarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, NavigationItemTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationItemTemplate = _t.first);\n } }, viewQuery: function CalendarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(NavigationComponent, true);\n ɵngcc0.ɵɵviewQuery(ViewListComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthView = _t.first);\n } }, hostVars: 8, hostBindings: function CalendarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.widgetId)(\"role\", ctx.widgetRole)(\"tabindex\", ctx.calendarTabIndex)(\"aria-disabled\", ctx.ariaDisabled);\n ɵngcc0.ɵɵclassProp(\"k-week-number\", ctx.weekNumber)(\"k-state-disabled\", ctx.ariaDisabled);\n } }, inputs: { id: \"id\", rangeValidation: \"rangeValidation\", disabled: \"disabled\", tabindex: \"tabindex\", navigation: \"navigation\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"] }, outputs: { activeViewChange: \"activeViewChange\", activeViewDateChange: \"activeViewDateChange\", valueChange: \"valueChange\" }, exportAs: [\"kendo-calendar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 12, consts: function () { let i18n_4; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.calendar.today\n */\n const MSG_EXTERNAL_826701167553276328$$DIST_FESM2015_INDEX_JS_5 = goog.getMsg(\"TODAY\");\n i18n_4 = MSG_EXTERNAL_826701167553276328$$DIST_FESM2015_INDEX_JS_5;\n }\n else {\n i18n_4 = $localize `:kendo.calendar.today|The label for the today button in the calendar header␟2df64767cd895a8fabe3e18b94b5b6b6f9e2e3f0␟826701167553276328:TODAY`;\n } return [[\"kendoCalendarLocalizedMessages\", \"\", \"today\", i18n_4], [3, \"activeView\", \"focusedDate\", \"min\", \"max\", \"templateRef\", \"valueChange\", \"pageChange\", 4, \"ngIf\"], [3, \"activeView\", \"isActive\", \"cellTemplateRef\", \"headerTitleTemplateRef\", \"weekNumberTemplateRef\", \"cellUID\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"value\", \"valueChange\", \"activeDateChange\", \"pageChange\"], [3, \"resize\"], [3, \"activeView\", \"focusedDate\", \"min\", \"max\", \"templateRef\", \"valueChange\", \"pageChange\"]]; }, template: function CalendarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵtemplate(1, CalendarComponent_kendo_calendar_navigation_1_Template, 1, 5, \"kendo-calendar-navigation\", 1);\n ɵngcc0.ɵɵelementStart(2, \"kendo-calendar-viewlist\", 2);\n ɵngcc0.ɵɵlistener(\"valueChange\", function CalendarComponent_Template_kendo_calendar_viewlist_valueChange_2_listener($event) { return ctx.handleDateChange($event); })(\"activeDateChange\", function CalendarComponent_Template_kendo_calendar_viewlist_activeDateChange_2_listener($event) { return ctx.emitEvent(ctx.activeViewDateChange, $event); })(\"pageChange\", function CalendarComponent_Template_kendo_calendar_viewlist_pageChange_2_listener() { return ctx.onPageChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"kendo-resize-sensor\", 3);\n ɵngcc0.ɵɵlistener(\"resize\", function CalendarComponent_Template_kendo_resize_sensor_resize_3_listener() { return ctx.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n let tmp_3_0 = null;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.navigation);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeViewEnum)(\"isActive\", ctx.isActive)(\"cellTemplateRef\", (tmp_3_0 = ctx.activeCellTemplate()) == null ? null : tmp_3_0.templateRef)(\"headerTitleTemplateRef\", ctx.headerTitleTemplate == null ? null : ctx.headerTitleTemplate.templateRef)(\"weekNumberTemplateRef\", ctx.weekNumberTemplate == null ? null : ctx.weekNumberTemplate.templateRef)(\"cellUID\", ctx.cellUID)(\"min\", ctx.min)(\"max\", ctx.max)(\"focusedDate\", ctx.focusedDate)(\"weekNumber\", ctx.weekNumber)(\"value\", ctx.value);\n } }, directives: function () { return [CalendarLocalizedMessagesDirective, ɵngcc2.NgIf, ViewListComponent, ɵngcc3.ResizeSensorComponent, NavigationComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nCalendarComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: CalendarDOMService },\n { type: ElementRef },\n { type: NavigationService },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: NgZone },\n { type: Injector },\n { type: ScrollSyncService },\n { type: DisabledDatesService },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nCalendarComponent.propDecorators = {\n id: [{ type: Input }],\n focusedDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n disabled: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n navigation: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }, { type: HostBinding, args: ['class.k-week-number',] }],\n activeViewChange: [{ type: Output }],\n activeViewDateChange: [{ type: Output }],\n valueChange: [{ type: Output }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective, { static: true },] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective, { static: true },] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective, { static: true },] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective, { static: true },] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective, { static: true },] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective, { static: true },] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective, { static: true },] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n navigationItemTemplate: [{ type: ContentChild, args: [NavigationItemTemplateDirective, { static: true },] }],\n navigationItemTemplateRef: [{ type: Input, args: ['navigationItemTemplate',] }],\n navigationView: [{ type: ViewChild, args: [NavigationComponent,] }],\n monthView: [{ type: ViewChild, args: [ViewListComponent,] }],\n widgetId: [{ type: HostBinding, args: ['attr.id',] }],\n widgetRole: [{ type: HostBinding, args: ['attr.role',] }],\n calendarTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-calendar',\n providers: [\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService\n ],\n selector: 'kendo-calendar',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: ɵngcc0.ElementRef }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ScrollSyncService }, { type: DisabledDatesService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { id: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], navigation: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.k-week-number']\n }], activeViewChange: [{\n type: Output\n }], activeViewDateChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: true }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: true }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: true }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: true }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: true }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: true }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: true }]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective, { static: true }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], widgetRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], navigationView: [{\n type: ViewChild,\n args: [NavigationComponent]\n }], monthView: [{\n type: ViewChild,\n args: [ViewListComponent]\n }] }); })();\n\n/**\n * @hidden\n */\nconst incompleteDateValidator = () => {\n return (control, incomplete) => {\n if (!isPresent(control.value) && incomplete) {\n return { incompleteDate: true };\n }\n else {\n return null;\n }\n };\n};\n\n/**\n * @hidden\n */\nvar Arrow;\n(function (Arrow) {\n Arrow[Arrow[\"Up\"] = 0] = \"Up\";\n Arrow[Arrow[\"Down\"] = 1] = \"Down\";\n Arrow[Arrow[\"None\"] = 2] = \"None\";\n})(Arrow || (Arrow = {}));\n\n/* tslint:disable:max-line-length */\nconst MIN_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-min';\nconst MAX_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-max';\nconst VALUE_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/dateinput/#toc-using-with-json';\nconst DATE_PART_REGEXP = /year|month|/;\nconst TIME_PART_REGEXP = /hour|minute|second|millisecond/;\nconst SHORT_PATTERN_LENGTH_REGEXP = /d|M|H|h|m|s/;\nconst padZero = (length) => new Array(Math.max(length, 0)).fill('0').join('');\nconst unpadZero = (value) => value.replace(/^0*/, '');\nclass Mask {\n constructor() {\n this.symbols = \"\";\n }\n}\nclass KendoDate {\n constructor(intl, formatPlaceholder, format, value) {\n this.intl = intl;\n this.formatPlaceholder = formatPlaceholder;\n this.format = format;\n this.year = true;\n this.month = true;\n this.date = true;\n this.hours = true;\n this.minutes = true;\n this.seconds = true;\n this.milliseconds = true;\n this.leadingZero = null;\n this.monthNames = null;\n this.typedMonthPart = \"\";\n this.value = getDate(new Date());\n this.knownParts = \"adHhmMsEy\";\n this.symbols = {\n \"E\": \"E\",\n \"H\": \"H\",\n \"M\": \"M\",\n \"a\": \"a\",\n \"d\": \"d\",\n \"h\": \"h\",\n \"m\": \"m\",\n \"s\": \"s\",\n \"y\": \"y\"\n };\n this.monthNames = this.allFormatedMonths();\n this.dayPeriods = this.allDayPeriods();\n if (!value) {\n this.value = getDate(new Date());\n const sampleFormat = this.dateFormatString(this.value, this.format).symbols;\n for (let i = 0; i < sampleFormat.length; i++) {\n this.setExisting(sampleFormat[i], false);\n }\n }\n else {\n this.value = cloneDate(value);\n }\n }\n hasValue() {\n const pred = (a, p) => a || p.type !== 'literal' && p.type !== 'dayperiod' && this.getExisting(p.pattern[0]);\n return this.intl.splitDateFormat(this.format).reduce(pred, false);\n }\n getDateObject() {\n for (let i = 0; i < this.knownParts.length; i++) {\n if (!this.getExisting(this.knownParts[i])) {\n return null;\n }\n }\n return cloneDate(this.value);\n }\n getTextAndFormat() {\n return this.merge(this.intl.formatDate(this.value, this.format), this.dateFormatString(this.value, this.format));\n }\n getExisting(symbol) {\n switch (symbol) {\n case \"y\": return this.year;\n case \"M\":\n case \"L\": return this.month;\n case \"d\": return this.date;\n case \"E\": return this.date && this.month && this.year;\n case \"h\":\n case \"H\": return this.hours;\n case \"m\": return this.minutes;\n case \"s\": return this.seconds;\n default: return true;\n }\n }\n setExisting(symbol, value) {\n switch (symbol) {\n case \"y\":\n this.year = value;\n if (value === false) {\n this.value.setFullYear(2000);\n }\n break; //allow 2/29 dates\n case \"M\":\n this.month = value;\n if (value === false) {\n this.value.setMonth(0);\n }\n break; //make sure you can type 31 at day part\n case \"d\":\n this.date = value;\n break;\n case \"h\":\n case \"H\":\n this.hours = value;\n break;\n case \"m\":\n this.minutes = value;\n break;\n case \"s\":\n this.seconds = value;\n break;\n default: return;\n }\n }\n modifyPart(symbol, offset) {\n let newValue = cloneDate(this.value);\n switch (symbol) {\n case \"y\":\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case \"M\":\n newValue = addMonths(this.value, offset);\n break;\n case \"d\":\n case \"E\":\n newValue.setDate(newValue.getDate() + offset);\n break;\n case \"h\":\n case \"H\":\n newValue.setHours(newValue.getHours() + offset);\n break;\n case \"m\":\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case \"s\":\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case \"a\":\n newValue.setHours(newValue.getHours() + (12 * offset));\n break;\n default: break;\n }\n if (newValue.getFullYear() > 0) {\n this.setExisting(symbol, true);\n this.value = newValue;\n }\n }\n parsePart(symbol, currentChar, resetSegmentValue) {\n if (!currentChar) {\n this.resetLeadingZero();\n this.setExisting(symbol, false);\n return { value: null, switchToNext: false };\n }\n let baseDate = this.intl.formatDate(this.value, this.format);\n let dateParts = this.dateFormatString(this.value, this.format);\n let baseFormat = dateParts.symbols;\n let replaced = false;\n let prefix = \"\";\n let current = \"\";\n let suffix = \"\";\n for (let i = 0; i < baseDate.length; i++) {\n if (baseFormat[i] === symbol) {\n current += this.getExisting(symbol) ? baseDate[i] : \"0\";\n replaced = true;\n }\n else if (!replaced) {\n prefix += baseDate[i];\n }\n else {\n suffix += baseDate[i];\n }\n }\n let currentMaxLength = current.length - 3;\n let parsedDate = null;\n const month = this.matchMonth(currentChar);\n const dayPeriod = this.matchDayPeriod(currentChar, symbol);\n const isZeroCurrentChar = currentChar === '0';\n const leadingZero = (this.leadingZero || {})[symbol] || 0;\n if (isZeroCurrentChar) {\n let valueNumber = parseInt(resetSegmentValue ? currentChar : current + currentChar, 10);\n if (valueNumber === 0 && !this.isAbbrMonth(dateParts.partMap, symbol)) {\n this.incrementLeadingZero(symbol);\n }\n }\n else {\n this.resetLeadingZero();\n }\n for (let i = Math.max(0, currentMaxLength); i <= current.length; i++) {\n let middle = resetSegmentValue ? currentChar : (current.substring(i) + currentChar);\n let middleNumber = parseInt(middle, 10);\n parsedDate = this.intl.parseDate(prefix + middle + suffix, this.format);\n if (!parsedDate && !isNaN(middleNumber) && !isNaN(parseInt(currentChar, 10))) {\n if (symbol === 'M' && !month) {\n const monthNumber = middleNumber - 1;\n if (monthNumber > -1 && monthNumber < 12) {\n parsedDate = cloneDate(this.value);\n parsedDate.setMonth(monthNumber);\n if (parsedDate.getMonth() !== monthNumber) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (symbol === 'y') {\n parsedDate = createDate(parseInt(middle, 10), this.month ? this.value.getMonth() : 0, this.date ? this.value.getDate() : 1, this.hours ? this.value.getHours() : 0, this.minutes ? this.value.getMinutes() : 0, this.seconds ? this.value.getSeconds() : 0, this.milliseconds ? this.value.getMilliseconds() : 0);\n if (this.date && parsedDate.getDate() !== this.value.getDate()) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (parsedDate) {\n //move to next segment if the part will overflow with next char\n //when start from empty date (01, then 010), padded zeros should be trimmed\n const patternValue = this.partPattern(dateParts.partMap, symbol).pattern;\n const peekDate = this.intl.parseDate(`${prefix}${this.peek(middle, patternValue)}${suffix}`, this.format);\n const patternLength = this.patternLength(patternValue) || patternValue.length;\n const patternSatisfied = (leadingZero + (unpadZero(middle) || currentChar).length) >= patternLength;\n const switchToNext = peekDate === null || patternSatisfied;\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: switchToNext };\n }\n }\n if (month) {\n parsedDate = this.intl.parseDate(prefix + month + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: false };\n }\n }\n if (dayPeriod) {\n parsedDate = this.intl.parseDate(prefix + dayPeriod + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n return { value: this.value, switchToNext: true };\n }\n }\n if (isZeroCurrentChar) {\n this.setExisting(symbol, false);\n }\n return { value: null, switchToNext: false };\n }\n resetLeadingZero() {\n const hasLeadingZero = this.leadingZero !== null;\n this.setLeadingZero(null);\n return hasLeadingZero;\n }\n setLeadingZero(leadingZero) {\n this.leadingZero = leadingZero;\n }\n incrementLeadingZero(symbol) {\n const leadingZero = this.leadingZero || {};\n leadingZero[symbol] = (leadingZero[symbol] || 0) + 1;\n this.leadingZero = leadingZero;\n }\n isAbbrMonth(parts, symbol) {\n const pattern = this.partPattern(parts, symbol);\n return pattern.type === 'month' && pattern.names;\n }\n partPattern(parts, symbol) {\n return parts.filter((part) => part.pattern.indexOf(symbol) !== -1)[0];\n }\n peek(value, pattern) {\n const peekValue = unpadZero(value) + '0';\n return padZero(pattern.length - peekValue.length) + peekValue;\n }\n matchMonth(typedChar) {\n this.typedMonthPart += typedChar.toLowerCase();\n if (!this.monthNames) {\n return \"\";\n }\n while (this.typedMonthPart.length > 0) {\n for (let i = 0; i < this.monthNames.length; i++) {\n if (this.monthNames[i].toLowerCase().indexOf(this.typedMonthPart) === 0) {\n return this.monthNames[i];\n }\n }\n const monthAsNum = parseInt(this.typedMonthPart, 10);\n if (monthAsNum >= 1 && monthAsNum <= 12 && monthAsNum.toString() === this.typedMonthPart /*ensure they exact match*/) {\n return this.monthNames[monthAsNum - 1];\n }\n this.typedMonthPart = this.typedMonthPart.substring(1, this.typedMonthPart.length);\n }\n return \"\";\n }\n matchDayPeriod(typedChar, symbol) {\n const lowerChart = String(typedChar).toLowerCase();\n if (symbol === 'a' && this.dayPeriods) {\n if (this.dayPeriods.am.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.am;\n }\n else if (this.dayPeriods.pm.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.pm;\n }\n }\n return '';\n }\n allFormatedMonths() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"month\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n allDayPeriods() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"dayperiod\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n patternLength(pattern) {\n if (pattern[0] === 'y') {\n return 4;\n }\n if (SHORT_PATTERN_LENGTH_REGEXP.test(pattern)) {\n return 2;\n }\n return 0;\n }\n //TODO: REMOVE!\n dateFormatString(date, format) {\n const dateFormatParts = this.intl.splitDateFormat(format);\n const parts = [];\n const partMap = [];\n for (let i = 0; i < dateFormatParts.length; i++) {\n let partLength = this.intl.formatDate(date, { pattern: dateFormatParts[i].pattern }).length;\n while (partLength > 0) {\n parts.push(this.symbols[dateFormatParts[i].pattern[0]] || \"_\");\n partMap.push(dateFormatParts[i]);\n partLength--;\n }\n }\n const returnValue = new Mask();\n returnValue.symbols = parts.join(\"\");\n returnValue.partMap = partMap;\n return returnValue;\n }\n merge(text, mask) {\n // Important: right to left.\n let resultText = \"\";\n let resultFormat = \"\";\n let format = mask.symbols;\n for (let r = format.length - 1; r >= 0; r--) {\n if (this.knownParts.indexOf(format[r]) === -1 || this.getExisting(format[r])) {\n resultText = text[r] + resultText;\n resultFormat = format[r] + resultFormat;\n }\n else {\n const currentSymbol = format[r];\n while (r >= 0 && currentSymbol === format[r]) {\n r--;\n }\n r++;\n if (this.leadingZero && this.leadingZero[currentSymbol]) {\n resultText = '0' + resultText;\n }\n else {\n resultText = this.dateFieldName(mask.partMap[r]) + resultText;\n }\n while (resultFormat.length < resultText.length) {\n resultFormat = format[r] + resultFormat;\n }\n }\n }\n return [resultText, resultFormat];\n }\n dateFieldName(part) {\n const formatPlaceholder = this.formatPlaceholder || 'wide';\n if (formatPlaceholder[part.type]) {\n return formatPlaceholder[part.type];\n }\n if (formatPlaceholder === 'formatPattern') {\n return part.pattern;\n }\n return this.intl.dateFieldName(Object.assign(part, { nameType: formatPlaceholder }));\n }\n}\n/**\n * Represents the [Kendo UI DateInput component for Angular]({% slug overview_dateinput %}#toc-basic-usage).\n */\nclass DateInputComponent {\n constructor(cdr, intl, renderer, element, ngZone, injector, localization, pickerService) {\n this.cdr = cdr;\n this.intl = intl;\n this.renderer = renderer;\n this.element = element;\n this.ngZone = ngZone;\n this.injector = injector;\n this.localization = localization;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the DateInput and\n * determines whether the component is active\n * ([see example]({% slug disabled_dateinput %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the read-only state of the DateInput\n * ([see example]({% slug readonly_dateinput %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the input element of the DateInput.\n */\n this.title = \"\";\n /**\n * Sets or gets the `tabIndex` property of the DateInput.\n * .\n */\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.role = 'spinbutton';\n /**\n * @hidden\n */\n this.ariaReadOnly = false;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_dateinput %})).\n */\n this.format = \"d\";\n /**\n * Specifies the hint the DateInput displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_dateinput %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Determines whether the built-in min or max validators are to be enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * @hidden\n * Based on the min and max values, specifies whether the value will be auto-corrected while typing.\n */\n this.autoCorrect = false;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * For more information, refer to the article on\n * [spinner buttons]({% slug spinbuttons_dateinput %}).\n */\n this.spinners = false;\n /**\n * @hidden\n */\n this.isPopupOpen = false;\n /**\n * @hidden\n */\n this.hasPopup = false;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueUpdate = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n *\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n *\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n this.arrow = Arrow;\n this.arrowDirection = Arrow.None;\n this.formatSections = { date: false, time: false };\n this.hasMousedown = false;\n this.focusedPriorToMousedown = false;\n /**\n * @hidden\n */\n this.isDateIncomplete = false;\n this.currentValue = \"\";\n this.currentFormat = \"\";\n this.backspace = false;\n this.resetSegmentValue = true;\n this.minValidator = noop;\n this.maxValidator = noop;\n this.incompleteValidator = noop;\n this._value = null;\n this._active = false;\n this.kendoDate = null;\n this.paste = false;\n this.domEvents = [];\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n if (this.pickerService) {\n this.pickerService.input = this;\n }\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the DateInput component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n if (this.autoCorrect && !isInRange(value, this.min, this.max)) {\n return;\n }\n this._value = cloneDate(value);\n this.valueUpdate.emit(cloneDate(value));\n }\n get value() {\n return this._value;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get inputElement() {\n return this.dateInput ? this.dateInput.nativeElement : null;\n }\n get inputValue() {\n return (this.inputElement || {}).value || '';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrap) {\n return;\n }\n if (!isPresent(this.pickerService)) {\n const element = this.wrap.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.currentValue || !String(this.currentValue).trim();\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifyRange();\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.minValidator = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidator = this.rangeValidation ? maxValidator(this.max) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n }\n const isEqualToKendoDate = this.kendoDate && isEqual(this.value, this.kendoDate.getDateObject());\n if (changes.format || !isEqualToKendoDate || changes.placeholder) {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.input = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidator(control) || this.maxValidator(control) || this.incompleteValidator(control, this.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue();\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n this.ngControl = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.kendoDate = this.getKendoDate(value);\n this.value = cloneDate(value);\n this.updateElementValue(this.isActive);\n }\n /**\n * @hidden\n */\n triggerChange() {\n const value = this.kendoDate.getDateObject();\n if (+value !== +this.value) {\n this.value = cloneDate(value);\n this.notify();\n }\n }\n /**\n * @hidden\n */\n notify() {\n this.ngZone.run(() => {\n this.onControlChange(cloneDate(this.value));\n this.valueChange.emit(cloneDate(this.value));\n });\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * Focuses the DateInput component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const input = this.inputElement;\n if (input) {\n input.focus();\n this.selectDateSegment(this.currentFormat[0]);\n }\n }\n /**\n * Blurs the DateInput component.\n */\n blur() {\n const input = this.inputElement;\n if (input) {\n input.blur();\n }\n }\n /**\n * @hidden\n */\n handleButtonClick(offset) {\n this.arrowDirection = Arrow.None;\n this.modifyDateSegmentValue(offset);\n }\n /**\n * @hidden\n */\n modifyDateSegmentValue(offset) {\n const caret = this.caret();\n const symbol = this.currentFormat[caret[0]];\n const step = (this.steps || {})[this.symbolsMap[symbol]] || 1;\n this.kendoDate.modifyPart(symbol, offset * step);\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.selectDateSegment(symbol);\n this.updateIncompleteValidationStatus();\n }\n /**\n * @hidden\n */\n switchDateSegment(offset) {\n const caret = this.caret();\n if (this.kendoDate.resetLeadingZero()) {\n this.updateElementValue(this.isActive);\n }\n if (caret[0] < caret[1] && this.currentFormat[caret[0]] !== this.currentFormat[caret[1] - 1]) {\n this.selectNearestSegment(offset > 0 ? caret[0] : caret[1] - 1);\n this.resetSegmentValue = true;\n return true;\n }\n const previousFormatSymbol = this.currentFormat[caret[0]];\n let a = caret[0] + offset;\n while (a > 0 && a < this.currentFormat.length) {\n if (this.currentFormat[a] !== previousFormatSymbol &&\n this.currentFormat[a] !== \"_\") {\n break;\n }\n a += offset;\n }\n if (this.currentFormat[a] === \"_\") {\n //there is not known symbol found\n return false;\n }\n let b = a;\n while (b >= 0 && b < this.currentFormat.length) {\n if (this.currentFormat[b] !== this.currentFormat[a]) {\n break;\n }\n b += offset;\n }\n if (a > b && (b + 1 !== caret[0] || a + 1 !== caret[1])) {\n this.caret(b + 1, a + 1);\n this.resetSegmentValue = true;\n return true;\n }\n else if (a < b && (a !== caret[0] || b !== caret[1])) {\n this.caret(a, b);\n this.resetSegmentValue = true;\n return true;\n }\n return false;\n }\n /**\n * @hidden\n */\n selectDateSegment(symbol) {\n let begin = -1;\n let end = 0;\n for (let i = 0; i < this.currentFormat.length; i++) {\n if (this.currentFormat[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n this.caret(0, 0);\n this.caret(begin, end);\n }\n /**\n * @hidden\n */\n handleClick() {\n this.hasMousedown = false;\n if (this.isActive) {\n const selectionPresent = this.inputElement.selectionStart !== this.inputElement.selectionEnd;\n const placeholderToggled = isPresent(this.placeholder) && !this.kendoDate.hasValue() && !this.focusedPriorToMousedown;\n // focus first segment if the user hasn't selected something during mousedown and if the placeholder was just toggled\n const selectFirstSegment = !selectionPresent && placeholderToggled;\n const index = selectFirstSegment ? 0 : this.caret()[0];\n this.selectNearestSegment(index);\n }\n }\n /**\n * @hidden\n */\n handleDragAndDrop(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleMousedown() {\n this.hasMousedown = true;\n this.focusedPriorToMousedown = this.isActive;\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n this.isActive = true;\n this.updateElementValue();\n if (!this.hasMousedown) {\n this.caret(0, this.inputValue.length);\n }\n this.hasMousedown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.emitFocus(args);\n });\n }\n else {\n this.emitFocus(args);\n }\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n this.isActive = false;\n this.resetSegmentValue = true;\n this.kendoDate.resetLeadingZero();\n this.updateElementValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.ngControl)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n }\n }\n getKendoDate(value) {\n const { leadingZero } = (this.kendoDate || {}) || null;\n const kendoDate = new KendoDate(this.intl, this.formatPlaceholder, this.format, value);\n kendoDate.setLeadingZero(this.isActive ? leadingZero : null);\n return kendoDate;\n }\n dateSymbolMap() {\n const reducer = (map$$1, part) => {\n map$$1[part.pattern[0]] = part.type;\n return map$$1;\n };\n return this.intl.splitDateFormat(this.format).reduce(reducer, {});\n }\n updateElementValue(isActive) {\n const start = this.caret()[0]; //XXX: get caret position before input is updated\n const texts = this.kendoDate.getTextAndFormat();\n const showPlaceholder = !this.isActive && isPresent(this.placeholder) && !this.kendoDate.hasValue();\n const input = this.inputElement;\n this.currentFormat = texts[1];\n this.currentValue = !showPlaceholder ? texts[0] : '';\n this.renderer.setProperty(input, \"value\", this.currentValue);\n if (input.placeholder !== this.placeholder) {\n this.renderer.setProperty(input, \"placeholder\", this.placeholder);\n }\n if (isActive) {\n this.selectNearestSegment(start);\n }\n }\n caret(start, end = start) {\n const isPosition = start !== undefined;\n let returnValue = [start, start];\n const element = this.inputElement;\n if (isPosition && (this.disabled || this.readonly)) {\n return undefined;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n if (isDocumentAvailable() && document.activeElement !== element) {\n element.focus();\n }\n element.setSelectionRange(start, end);\n }\n returnValue = [element.selectionStart, element.selectionEnd];\n }\n }\n catch (e) {\n returnValue = [];\n }\n return returnValue;\n }\n selectNearestSegment(index) {\n // Finds the nearest (in both directions) known part.\n for (let i = index, j = index - 1; i < this.currentFormat.length || j >= 0; i++, j--) {\n if (i < this.currentFormat.length && this.currentFormat[i] !== \"_\") {\n this.selectDateSegment(this.currentFormat[i]);\n return;\n }\n if (j >= 0 && this.currentFormat[j] !== \"_\") {\n this.selectDateSegment(this.currentFormat[j]);\n return;\n }\n }\n }\n verifyRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$1} and ${MAX_DOC_LINK$1}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$1} for possible resolution.`);\n }\n }\n putDateInRange() {\n const currentDate = this.kendoDate.getDateObject();\n const candidate = dateInRange(currentDate, this.min, this.max);\n if (this.autoCorrect && !isEqual(currentDate, candidate)) {\n this.kendoDate = this.getKendoDate(candidate);\n }\n }\n updateFormatSections() {\n this.formatSections = this.intl.splitDateFormat(this.format)\n .reduce(({ date, time }, p) => {\n return {\n date: date || DATE_PART_REGEXP.test(p.type),\n time: time || TIME_PART_REGEXP.test(p.type)\n };\n }, { date: false, time: false });\n }\n intlChange() {\n this.updateFormatSections();\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n updateOnPaste() {\n const value = this.intl.parseDate(this.inputValue, this.format) || this.value;\n const notify = +value !== +this.value;\n this.writeValue(value);\n if (notify) {\n this.notify();\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n const mousewheelHandler = this.handleMouseWheel.bind(this);\n this.domEvents.push(this.renderer.listen(element, 'DOMMouseScroll', mousewheelHandler), this.renderer.listen(element, 'mousewheel', mousewheelHandler), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)), this.renderer.listen(element, 'paste', this.handlePaste.bind(this)), this.renderer.listen(element, 'input', this.handleInput.bind(this)));\n }\n handleMouseWheel(event) {\n if (this.disabled || this.readonly || !this.isActive) {\n return;\n }\n event = window.event || event;\n if (event.shiftKey) {\n this.switchDateSegment((event.wheelDelta || -event.detail) > 0 ? -1 : 1);\n }\n else {\n this.modifyDateSegmentValue((event.wheelDelta || -event.detail) > 0 ? 1 : -1);\n }\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n handlePaste() {\n this.paste = true;\n }\n handleKeydown(event) {\n if (this.disabled || this.readonly || event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n if (event.keyCode === Keys.Tab) {\n const moved = this.switchDateSegment(event.shiftKey ? -1 : 1);\n if (moved) {\n event.preventDefault();\n }\n return;\n }\n if (event.keyCode === Keys.Backspace) {\n this.backspace = true;\n return;\n }\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.modifyDateSegmentValue(-1);\n break;\n case Keys.ArrowUp:\n this.modifyDateSegmentValue(1);\n break;\n case Keys.ArrowRight:\n this.switchDateSegment(1);\n break;\n case Keys.ArrowLeft:\n this.switchDateSegment(-1);\n break;\n case Keys.Home:\n this.selectNearestSegment(0);\n break;\n case Keys.End:\n this.selectNearestSegment(this.inputValue.length);\n break;\n default:\n return; //skip the preventDefault if we didn't handled the keyCode\n }\n event.preventDefault();\n }\n handleInput() {\n if (this.disabled || this.readonly) {\n return;\n }\n if (this.paste) {\n this.updateOnPaste();\n this.paste = false;\n return;\n }\n const diff = approximateStringMatching(this.currentValue, this.currentFormat, this.inputValue, this.caret()[0]);\n const navigationOnly = (diff.length === 1 && diff[0][1] === \"_\");\n let switchPart = false;\n if (!navigationOnly) {\n let parsedPart;\n for (let i = 0; i < diff.length; i++) {\n parsedPart = this.kendoDate.parsePart(diff[i][0], diff[i][1], this.resetSegmentValue);\n switchPart = parsedPart.switchToNext;\n }\n const candidate = this.kendoDate.getDateObject();\n if (this.value && candidate && !this.formatSections.date) {\n this.kendoDate = this.getKendoDate(setTime(this.value, candidate));\n }\n }\n this.resetSegmentValue = false;\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.updateIncompleteValidationStatus();\n if (diff.length && diff[0][0] !== \"_\") {\n this.selectDateSegment(diff[0][0]);\n }\n if (switchPart || navigationOnly) {\n this.switchDateSegment(1);\n }\n if (this.backspace) {\n this.switchDateSegment(-1);\n }\n this.backspace = false;\n }\n emitFocus(args) {\n this.onFocus.emit();\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n emitBlur(args) {\n this.onBlur.emit();\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n updateIncompleteValidationStatus() {\n const previousValue = this.isDateIncomplete;\n this.isDateIncomplete = this.kendoDate.hasValue() && this.value === null;\n if (previousValue === this.isDateIncomplete || !this.incompleteDateValidation) {\n return;\n }\n if (isPresent(this.ngControl) && !isPresent(this.pickerService)) {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n else if (isPresent(this.pickerService)) {\n this.pickerService.dateCompletenessChange.emit();\n }\n }\n}\nDateInputComponent.ɵfac = function DateInputComponent_Factory(t) { return new (t || DateInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nDateInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateInputComponent, selectors: [[\"kendo-dateinput\"]], viewQuery: function DateInputComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c6, true);\n ɵngcc0.ɵɵviewQuery(_c7, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dateInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrap = _t.first);\n } }, hostVars: 6, hostBindings: function DateInputComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClass)(\"k-dateinput\", ctx.wrapperClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", tabindex: \"tabindex\", role: \"role\", ariaReadOnly: \"ariaReadOnly\", format: \"format\", placeholder: \"placeholder\", rangeValidation: \"rangeValidation\", autoCorrect: \"autoCorrect\", incompleteDateValidation: \"incompleteDateValidation\", spinners: \"spinners\", isPopupOpen: \"isPopupOpen\", hasPopup: \"hasPopup\", tabIndex: \"tabIndex\", value: \"value\", formatPlaceholder: \"formatPlaceholder\", steps: \"steps\", max: \"max\", min: \"min\" }, outputs: { valueChange: \"valueChange\", valueUpdate: \"valueUpdate\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendo-dateinput\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 21, consts: function () { let i18n_8; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the **Increment** button in the DateInput\n * @meaning kendo.dateinput.increment\n */\n const MSG_EXTERNAL_589112377451589685$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"Increase value\");\n i18n_8 = MSG_EXTERNAL_589112377451589685$$DIST_FESM2015_INDEX_JS_9;\n }\n else {\n i18n_8 = $localize `:kendo.dateinput.increment|The label for the **Increment** button in the DateInput␟a55944f9de69e7cc86b91200fe96f980a947d704␟589112377451589685:Increase value`;\n } let i18n_10; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the **Decrement** button in the DateInput\n * @meaning kendo.dateinput.decrement\n */\n const MSG_EXTERNAL_6980524091606682769$$DIST_FESM2015_INDEX_JS_11 = goog.getMsg(\"Decrease value\");\n i18n_10 = MSG_EXTERNAL_6980524091606682769$$DIST_FESM2015_INDEX_JS_11;\n }\n else {\n i18n_10 = $localize `:kendo.dateinput.decrement|The label for the **Decrement** button in the DateInput␟0eded761107e6dad120997006a7f915bade9b15c␟6980524091606682769:Decrease value`;\n } return [[\"kendoDateInputLocalizedMessages\", \"\", \"increment\", i18n_8, \"decrement\", i18n_10], [1, \"k-dateinput-wrap\"], [\"wrap\", \"\"], [\"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"k-input\", 3, \"id\", \"title\", \"tabindex\", \"disabled\", \"readonly\", \"placeholder\", \"kendoEventsOutsideAngular\", \"scope\"], [\"dateInput\", \"\"], [\"class\", \"k-select\", 3, \"mousedown\", 4, \"ngIf\"], [1, \"k-select\", 3, \"mousedown\"], [1, \"k-link\", \"k-link-increase\", 3, \"title\", \"mousedown\", \"mouseleave\", \"click\"], [1, \"k-icon\", \"k-i-arrow-n\"], [1, \"k-link\", \"k-link-decrease\", 3, \"title\", \"click\", \"mousedown\", \"mouseleave\"], [1, \"k-icon\", \"k-i-arrow-s\"]]; }, template: function DateInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelement(3, \"input\", 3, 4);\n ɵngcc0.ɵɵtemplate(5, DateInputComponent_span_5_Template, 5, 8, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"title\", ctx.title)(\"tabindex\", ctx.tabindex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"placeholder\", ctx.placeholder)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction7(13, _c12, ctx.handleClick, ctx.handleFocus, ctx.handleMousedown, ctx.handleMousedown, ctx.handleDragAndDrop, ctx.handleDragAndDrop, ctx.handleBlur))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"aria-readonly\", ctx.ariaReadOnly)(\"aria-expanded\", ctx.isPopupOpen)(\"aria-haspopup\", ctx.hasPopup);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.spinners);\n } }, directives: function () { return [DateInputLocalizedMessagesDirective, ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgIf]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDateInputComponent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: IntlService },\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone },\n { type: Injector },\n { type: LocalizationService },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nDateInputComponent.propDecorators = {\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n title: [{ type: Input }],\n tabindex: [{ type: Input }],\n role: [{ type: Input }],\n ariaReadOnly: [{ type: Input }],\n tabIndex: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n steps: [{ type: Input }],\n max: [{ type: Input }],\n min: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n autoCorrect: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n value: [{ type: Input }],\n spinners: [{ type: Input }],\n isPopupOpen: [{ type: Input }],\n hasPopup: [{ type: Input }],\n valueChange: [{ type: Output }],\n valueUpdate: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n dateInput: [{ type: ViewChild, args: ['dateInput', { static: true },] }],\n wrap: [{ type: ViewChild, args: ['wrap',] }],\n wrapperClass: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-dateinput',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-dateinput',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ],\n selector: 'kendo-dateinput',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ɵngcc4.LocalizationService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], role: [{\n type: Input\n }], ariaReadOnly: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], spinners: [{\n type: Input\n }], isPopupOpen: [{\n type: Input\n }], hasPopup: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueUpdate: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], tabIndex: [{\n type: Input\n }], value: [{\n type: Input\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dateinput']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], formatPlaceholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], dateInput: [{\n type: ViewChild,\n args: ['dateInput', { static: true }]\n }], wrap: [{\n type: ViewChild,\n args: ['wrap']\n }] }); })();\n\n/**\n * A preventable event instance which is triggered by the `open` and `close` events.\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst TOUCH_ENABLED = new InjectionToken('dateinputs-touch-enabled');\n\n/**\n * @hidden\n */\nconst disabledDatesValidator = (isDateDisabled) => {\n return (control) => {\n if (!isDateDisabled || !control.value) {\n return null;\n }\n const error = {\n disabledDate: true\n };\n return isDateDisabled(control.value) ? error : null;\n };\n};\n\n/* tslint:disable:max-line-length */\nconst MIN_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-min';\nconst MAX_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-max';\nconst VALUE_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/datepicker/#toc-using-with-json';\n/**\n * Represents the [Kendo UI DatePicker component for Angular]({% slug overview_datepicker %}#toc-basic-usage).\n */\nclass DatePickerComponent {\n constructor(zone, localization, cdr, popupService, element, renderer, injector, pickerService, disabledDatesService, touchEnabled$$1) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.element = element;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.disabledDatesService = disabledDatesService;\n this.touchEnabled = touchEnabled$$1;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_datepicker %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost Calendar view to which the user can navigate\n * ([see example]({% slug dates_datepicker %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost Calendar view to which the user can navigate\n * ([see example]({% slug dates_datepicker %}#toc-partial-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Sets or gets the `disabled` property of the DatePicker and determines whether the component is active\n * ([see example]({% slug disabled_datepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DatePicker\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-datepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DatePicker input field\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar is displayed.\n * ([see example]({% slug sidebar_datepicker %})).\n */\n this.navigation = true;\n /**\n * Specifies the smallest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n */\n this.min = cloneDate(MIN_DATE);\n /**\n * Specifies the biggest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n */\n this.max = cloneDate(MAX_DATE);\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Specifies the focused date of the Calendar component\n * ([see example]({% slug dates_datepicker %})).\n */\n this.focusedDate = null;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_datepicker %})).\n */\n this.format = \"d\";\n /**\n * Specifies the hint the DatePicker displays when its value is `null`.\n * ([more information and exaples]({% slug placeholders_datepicker %})).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Sets or gets the `tabindex` property of the DatePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the DatePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether to display a week number column in the `month` view of the Calendar\n * ([see example]({% slug weeknumcolumn_datepicker %})).\n */\n this.weekNumber = false;\n /**\n * Fires each time the user selects a new value\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this._popupSettings = { animate: true };\n this._show = false;\n this._value = null;\n this._active = false;\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesValidateFn = noop;\n this.incompleteValidator = noop;\n this.resolvedPromise = Promise.resolve(null);\n this.domEvents = [];\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleSameSelection.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n /**\n * @hidden\n */\n set navigationItemTemplateRef(template) {\n this.navigationItemTemplate = template;\n }\n /**\n * Configures the popup options of the DatePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the value of the DatePicker component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the DatePicker that will be disabled\n * ([see example]({% slug disabled_dates_datepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifySettings();\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the DatePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the DatePicker component.\n */\n blur() {\n (this.calendar || this.input)['blur'](); //tslint:disable-line:no-string-literal\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicitly call the handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleChange(value) {\n this.cdr.markForCheck();\n this.focusInput();\n this.value = value;\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n this.handleChange(this.input.formatSections.time ? value : this.mergeTime(value));\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-calendar-container',\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get input() {\n return this.pickerService.input;\n }\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(value, this.value) : value;\n }\n /**\n * @hidden\n */\n handleKeydown(e) {\n const { altKey, keyCode } = e;\n if (keyCode === Keys.Escape) {\n this.show = false;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n }\n if (keyCode === Keys.Tab && this.show && this.calendar.isActive) {\n this.input.focus();\n this.show = false;\n }\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this._show) {\n return;\n }\n this._show = show;\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.subscription = this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n this.subscription.unsubscribe();\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.calendar) {\n this.cdr.detectChanges();\n }\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$2} and ${MAX_DOC_LINK$2}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$2} for possible resolution.`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.calendar && this.calendar.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.cdr.detectChanges();\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleSameSelection() {\n if (this.show) {\n this.focusInput();\n this.show = false;\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n}\nDatePickerComponent.ɵfac = function DatePickerComponent_Factory(t) { return new (t || DatePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nDatePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DatePickerComponent, selectors: [[\"kendo-datepicker\"]], contentQueries: function DatePickerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NavigationItemTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationItemTemplate = _t.first);\n } }, viewQuery: function DatePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c13, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c14, true);\n ɵngcc0.ɵɵviewQuery(_c15, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n } }, hostVars: 6, hostBindings: function DatePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClasses)(\"k-datepicker\", ctx.wrapperClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", navigation: \"navigation\", min: \"min\", max: \"max\", incompleteDateValidation: \"incompleteDateValidation\", focusedDate: \"focusedDate\", format: \"format\", placeholder: \"placeholder\", tabindex: \"tabindex\", title: \"title\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", weekNumber: \"weekNumber\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"], popupSettings: \"popupSettings\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", formatPlaceholder: \"formatPlaceholder\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendo-datepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 25, consts: function () { let i18n_16; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.datepicker.today\n */\n const MSG_EXTERNAL_1910980355989755624$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"TODAY\");\n i18n_16 = MSG_EXTERNAL_1910980355989755624$$DIST_FESM2015_INDEX_JS_17;\n }\n else {\n i18n_16 = $localize `:kendo.datepicker.today|The label for the today button in the calendar header␟91a84f2d4871dbe7e90d84865d4a4d83c8ae041e␟1910980355989755624:TODAY`;\n } let i18n_18; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the datepicker component\n * @meaning kendo.datepicker.toggle\n */\n const MSG_EXTERNAL_4817467473728423164$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"Toggle calendar\");\n i18n_18 = MSG_EXTERNAL_4817467473728423164$$DIST_FESM2015_INDEX_JS_19;\n }\n else {\n i18n_18 = $localize `:kendo.datepicker.toggle|The label for the toggle button in the datepicker component␟f6c28c2d80dbe993c4b33f4dc4010364f41cc2ae␟4817467473728423164:Toggle calendar`;\n } return [[\"kendoDatePickerLocalizedMessages\", \"\", \"today\", i18n_16, \"toggle\", i18n_18], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"role\", \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"disabled\", \"readonly\", \"ariaReadOnly\", \"tabindex\", \"title\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"incompleteDateValidation\", \"value\", \"valueChange\"], [\"input\", \"\"], [\"role\", \"button\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-icon\", \"k-i-calendar\"], [\"container\", \"\"], [\"popupTemplate\", \"\"], [3, \"min\", \"max\", \"navigation\", \"activeView\", \"bottomView\", \"topView\", \"weekNumber\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"navigationItemTemplate\", \"focusedDate\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"disabledDates\", \"valueChange\"], [\"calendar\", \"\"], [3, \"today\"]]; }, template: function DatePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-dateinput\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DatePickerComponent_Template_kendo_dateinput_valueChange_3_listener($event) { return ctx.handleInputChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵelement(6, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(7, null, 7);\n ɵngcc0.ɵɵtemplate(9, DatePickerComponent_ng_template_9_Template, 4, 23, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"role\", ctx.inputRole)(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.show)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"ariaReadOnly\", ctx.readonly)(\"tabindex\", ctx.tabindex)(\"title\", ctx.title)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.min)(\"max\", ctx.max)(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(22, _c21, ctx.handleIconClick, ctx.handleMousedown))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n } }, directives: function () { return [DatePickerLocalizedMessagesDirective, DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, CalendarComponent, CalendarCustomMessagesComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDatePickerComponent.ctorParameters = () => [\n { type: NgZone },\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PopupService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: Injector },\n { type: PickerService },\n { type: DisabledDatesService },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [TOUCH_ENABLED,] }] }\n];\nDatePickerComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective,] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective,] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective,] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective,] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective,] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective,] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n navigationItemTemplate: [{ type: ContentChild, args: [NavigationItemTemplateDirective,] }],\n navigationItemTemplateRef: [{ type: Input, args: ['navigationItemTemplate',] }],\n focusableId: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n popupSettings: [{ type: Input }],\n navigation: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n focusedDate: [{ type: Input }],\n value: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n title: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesValidation: [{ type: Input }],\n weekNumber: [{ type: Input }],\n valueChange: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-datepicker',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-datepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ],\n selector: 'kendo-datepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc5.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: PickerService }, { type: DisabledDatesService }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], navigation: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-datepicker']\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective]\n }], popupSettings: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst TIME_PART = {\n dayperiod: 'dayperiod',\n hour: 'hour',\n millisecond: 'millisecond',\n minute: 'minute',\n second: 'second'\n};\n\n/**\n * @hidden\n */\nconst timeRangeValidator = (min, max) => {\n return (control) => {\n if (!min || !max || !control.value) {\n return null;\n }\n const err = {\n timeRangeError: {\n maxValue: max,\n minValue: min,\n value: control.value\n }\n };\n return isInTimeRange(control.value, min, max) ? null : err;\n };\n};\n\nconst VALUE_DOC_LINK$3 = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/timepicker/#toc-integration-with-json';\nconst INTL_DATE_FORMAT = 'https://github.com/telerik/kendo-intl/blob/master/docs/date-formatting/index.md';\nconst formatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.dayperiod}|literal`);\n/**\n * Represents the [Kendo UI TimePicker component for Angular]({% slug overview_timepicker %}#toc-basic-usage).\n */\nclass TimePickerComponent {\n constructor(zone, localization, cdr, popupService, element, renderer, injector, pickerService, intl, touchEnabled$$1) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.element = element;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.intl = intl;\n this.touchEnabled = touchEnabled$$1;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the TimePicker and\n * determines whether the component is active\n * ([see example]({% slug disabled_timepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the TimePicker\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-timepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the TimePicker input field\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_timepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Specifies the time format that is used to display the input value\n * ([see example]({% slug formats_timepicker %})).\n */\n this.format = 't';\n /**\n * Specifies the hint the TimePicker displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_timepicker %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `tabindex` property of the TimePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the TimePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.resolvedPromise = Promise.resolve(null);\n this.timeRangeValidateFn = noop;\n this.incompleteValidator = noop;\n this._min = cloneDate(MIN_TIME);\n this._max = cloneDate(MAX_TIME);\n this._popupSettings = { animate: true };\n this._show = false;\n this._steps = {};\n this._value = null;\n this._active = false;\n this.domEvents = [];\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * Specifies the smallest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set min(min) {\n this._min = cloneDate(min || MIN_TIME);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set max(max) {\n this._max = cloneDate(max || MAX_TIME);\n }\n get max() {\n return this._max;\n }\n /**\n * Configures the incremental steps of the TimePicker.\n * For more information, refer to the article on\n * [incremental steps]({% slug incrementalsteps_timepicker %}).\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15 };\n * }\n * ```\n *\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n /**\n * Configures the popup of the TimePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the TimePicker component.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n get input() {\n return this.pickerService.input;\n }\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.timeRangeValidateFn = this.rangeValidation ? timeRangeValidator(this.min, this.max) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.verifyFormat();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape) {\n this.show = false;\n return;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.timeRangeValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the TimePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the TimePicker component.\n */\n blur() {\n (this.timeSelector || this.input)['blur'](); //tslint:disable-line:no-string-literal\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n handleChange(value) {\n if (isEqual(this.value, value)) {\n this.focusInput();\n this.show = false;\n return;\n }\n this.value = cloneDate(value);\n this.zone.run(() => {\n this.focusInput();\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n });\n }\n /**\n * @hidden\n */\n handleReject() {\n this.show = false;\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n const val = this.input.formatSections.date ? value : this.mergeTime(value);\n this.handleChange(val);\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicit call handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n normalizeTime(date) {\n return setTime(MIDNIGHT_DATE, date);\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(this.value, value) : value;\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this.isOpen) {\n return;\n }\n this._show = show;\n this.cdr.markForCheck();\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.timeSelector) {\n this.cdr.detectChanges();\n }\n if (this.isActive) {\n this.timeSelector.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$3} for possible resolution.`);\n }\n }\n verifyFormat() {\n if (!isDevMode()) {\n return;\n }\n const formatContainsDateParts = this.intl.splitDateFormat(this.format).some(part => !formatRegExp.test(part.type));\n if (formatContainsDateParts) {\n throw new Error(`Provided format is not supported. Supported specifiers are T|t|H|h|m|s|a. See ${INTL_DATE_FORMAT}`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.timeSelector && this.timeSelector.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n}\nTimePickerComponent.ɵfac = function TimePickerComponent_Factory(t) { return new (t || TimePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nTimePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimePickerComponent, selectors: [[\"kendo-timepicker\"]], viewQuery: function TimePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c13, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c14, true);\n ɵngcc0.ɵɵviewQuery(_c15, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n } }, hostVars: 6, hostBindings: function TimePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClasses)(\"k-timepicker\", ctx.wrapperClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", format: \"format\", placeholder: \"placeholder\", incompleteDateValidation: \"incompleteDateValidation\", cancelButton: \"cancelButton\", nowButton: \"nowButton\", tabindex: \"tabindex\", title: \"title\", rangeValidation: \"rangeValidation\", min: \"min\", max: \"max\", steps: \"steps\", popupSettings: \"popupSettings\", tabIndex: \"tabIndex\", value: \"value\", formatPlaceholder: \"formatPlaceholder\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendo-timepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 26, consts: function () { let i18n_22; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the timepicker component\n * @meaning kendo.timepicker.accept\n */\n const MSG_EXTERNAL_7519663530416240229$$DIST_FESM2015_INDEX_JS_23 = goog.getMsg(\"Set\");\n i18n_22 = MSG_EXTERNAL_7519663530416240229$$DIST_FESM2015_INDEX_JS_23;\n }\n else {\n i18n_22 = $localize `:kendo.timepicker.accept|The Accept button text in the timepicker component␟4c3bf42192220c7611c09ece1c5de14855139dd0␟7519663530416240229:Set`;\n } let i18n_24; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the timepicker component\n * @meaning kendo.timepicker.acceptLabel\n */\n const MSG_EXTERNAL_4355879331538595758$$DIST_FESM2015_INDEX_JS_25 = goog.getMsg(\"Set time\");\n i18n_24 = MSG_EXTERNAL_4355879331538595758$$DIST_FESM2015_INDEX_JS_25;\n }\n else {\n i18n_24 = $localize `:kendo.timepicker.acceptLabel|The label for the Accept button in the timepicker component␟93c2a9c3aa49f56e452c0aecbaabe3bb33fa4222␟4355879331538595758:Set time`;\n } let i18n_26; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the timepicker component\n * @meaning kendo.timepicker.cancel\n */\n const MSG_EXTERNAL_1086687567255473060$$DIST_FESM2015_INDEX_JS_27 = goog.getMsg(\"Cancel\");\n i18n_26 = MSG_EXTERNAL_1086687567255473060$$DIST_FESM2015_INDEX_JS_27;\n }\n else {\n i18n_26 = $localize `:kendo.timepicker.cancel|The Cancel button text in the timepicker component␟132eefca16bd41d489b4647724b91e93793603aa␟1086687567255473060:Cancel`;\n } let i18n_28; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the timepicker component\n * @meaning kendo.timepicker.cancelLabel\n */\n const MSG_EXTERNAL_83621966901491941$$DIST_FESM2015_INDEX_JS_29 = goog.getMsg(\"Cancel changes\");\n i18n_28 = MSG_EXTERNAL_83621966901491941$$DIST_FESM2015_INDEX_JS_29;\n }\n else {\n i18n_28 = $localize `:kendo.timepicker.cancelLabel|The label for the Cancel button in the timepicker component␟2cf6f4ca4470810944b4016c9b6f87943d3390ab␟83621966901491941:Cancel changes`;\n } let i18n_30; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timepicker component\n * @meaning kendo.timepicker.now\n */\n const MSG_EXTERNAL_5912507758515138116$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"Now\");\n i18n_30 = MSG_EXTERNAL_5912507758515138116$$DIST_FESM2015_INDEX_JS_31;\n }\n else {\n i18n_30 = $localize `:kendo.timepicker.now|The Now button text in the timepicker component␟bbc99bb74ae75a503bd813aad0c7253d3553e923␟5912507758515138116:Now`;\n } let i18n_32; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timepicker component\n * @meaning kendo.timepicker.nowLabel\n */\n const MSG_EXTERNAL_371982627910576599$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"Select now\");\n i18n_32 = MSG_EXTERNAL_371982627910576599$$DIST_FESM2015_INDEX_JS_33;\n }\n else {\n i18n_32 = $localize `:kendo.timepicker.nowLabel|The label for the Now button in the timepicker component␟df1a696f318275aa934e27850920889d494c2740␟371982627910576599:Select now`;\n } let i18n_34; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the timepicker component\n * @meaning kendo.timepicker.toggle\n */\n const MSG_EXTERNAL_6938407659294495526$$DIST_FESM2015_INDEX_JS_35 = goog.getMsg(\"Toggle time list\");\n i18n_34 = MSG_EXTERNAL_6938407659294495526$$DIST_FESM2015_INDEX_JS_35;\n }\n else {\n i18n_34 = $localize `:kendo.timepicker.toggle|The label for the toggle button in the timepicker component␟f2c196786ed2d3ecb2369750c36aac9a4053fb30␟6938407659294495526:Toggle time list`;\n } return [[\"kendoTimePickerLocalizedMessages\", \"\", \"accept\", i18n_22, \"acceptLabel\", i18n_24, \"cancel\", i18n_26, \"cancelLabel\", i18n_28, \"now\", i18n_30, \"nowLabel\", i18n_32, \"toggle\", i18n_34], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"disabled\", \"readonly\", \"role\", \"ariaReadOnly\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"incompleteDateValidation\", \"steps\", \"tabindex\", \"title\", \"value\", \"valueChange\"], [\"input\", \"\"], [\"role\", \"button\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-icon\", \"k-i-clock\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"cancelButton\", \"nowButton\", \"format\", \"min\", \"max\", \"steps\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\", \"valueReject\"], [\"timeSelector\", \"\"], [3, \"acceptLabel\", \"accept\", \"cancelLabel\", \"cancel\", \"nowLabel\", \"now\"]]; }, template: function TimePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-dateinput\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimePickerComponent_Template_kendo_dateinput_valueChange_3_listener($event) { return ctx.handleInputChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵelement(6, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, TimePickerComponent_ng_template_7_Template, 3, 18, \"ng-template\", null, 7, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(9, null, 8);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.show)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"role\", ctx.inputRole)(\"ariaReadOnly\", ctx.readonly)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.normalizeTime(ctx.min))(\"max\", ctx.normalizeTime(ctx.max))(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"steps\", ctx.steps)(\"tabindex\", !ctx.show ? ctx.tabindex : -1)(\"title\", ctx.title)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(23, _c21, ctx.handleIconClick, ctx.handleMousedown))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n } }, directives: function () { return [TimePickerLocalizedMessagesDirective, DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, TimeSelectorComponent, TimeSelectorCustomMessagesComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nTimePickerComponent.ctorParameters = () => [\n { type: NgZone },\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PopupService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: Injector },\n { type: PickerService },\n { type: IntlService },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [TOUCH_ENABLED,] }] }\n];\nTimePickerComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n cancelButton: [{ type: Input }],\n nowButton: [{ type: Input }],\n steps: [{ type: Input }],\n popupSettings: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n title: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-timepicker',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ],\n selector: 'kendo-timepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc5.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: PickerService }, { type: ɵngcc1.IntlService }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-timepicker']\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], steps: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], value: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }] }); })();\n\nconst timeFormatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.dayperiod}|literal`);\nconst VALUE_DOC_LINK$4 = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/integration-with-json/';\nconst MIN_MAX_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/date-time-limits/';\nconst DEFAULT_ACTIVE_TAB = 'date';\nconst DEFAULT_DATEINPUT_FORMAT = 'g';\nconst DEFAULT_TIMESELECTOR_FORMAT = 't';\n/**\n * Represents the [Kendo UI DateTimePicker component for Angular]({% slug overview_datetimepicker %}).\n */\nclass DateTimePickerComponent {\n constructor(popupService, intl, cdr, pickerService, ngZone, host, touchEnabled$$1, localization, disabledDatesService, renderer) {\n this.popupService = popupService;\n this.intl = intl;\n this.cdr = cdr;\n this.pickerService = pickerService;\n this.ngZone = ngZone;\n this.host = host;\n this.touchEnabled = touchEnabled$$1;\n this.localization = localization;\n this.disabledDatesService = disabledDatesService;\n this.renderer = renderer;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets the title of the input element of the DateTimePicker.\n */\n this.title = '';\n /**\n * Sets or gets the `disabled` property of the DateTimePicker and determines whether the component is active\n * ([see example]({% slug disabled_datetimepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DateTimePicker\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-datetimepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DateTimePicker input field\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datetimepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Determines whether to display the **Cancel** button in the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-toggling-the-cancel-button)).\n */\n this.cancelButton = true;\n /**\n * Determines whether to display a week number column in the `month` view of the popup Calendar\n * ([see example]({% slug datetimepicker_calendar_options %}#toc-week-number-column)).\n */\n this.weekNumber = false;\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form\n * ([see example]({% slug dateranges_datetimepicker %}#toc-prevent-invalid-input)).\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datetimepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Fires each time the user selects a new value.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain closed.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain open.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the user focuses the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the user blurs the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n *\n * Controls whether the Calendar or the TimeSelector will be displayed.\n */\n this.activeTab = DEFAULT_ACTIVE_TAB;\n /**\n * @hidden\n *\n * Specifies the stripped time-related format that is used in the TimeSelector.\n * Updates each time the `format` property value changes.\n */\n this.timeSelectorFormat = DEFAULT_TIMESELECTOR_FORMAT;\n /**\n * @hidden\n */\n this.timeSelectorMin = cloneDate(MIN_TIME);\n /**\n * @hidden\n */\n this.timeSelectorMax = cloneDate(MAX_TIME);\n /**\n * @hidden\n */\n this.calendarValue = null;\n /**\n * @hidden\n */\n this.calendarMin = cloneDate(MIN_DATE);\n /**\n * @hidden\n */\n this.calendarMax = lastMillisecondOfDate(MAX_DATE);\n this._popupSettings = { animate: true };\n this._value = null;\n this._format = DEFAULT_DATEINPUT_FORMAT;\n this._tabindex = 0;\n this._defaultTab = DEFAULT_ACTIVE_TAB;\n this._min = mergeDateAndTime(MIN_DATE, MIN_TIME);\n this._max = mergeDateAndTime(MAX_DATE, MAX_TIME);\n this._isActive = false;\n this.onControlTouched = noop;\n this.onControlChange = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesValidateFn = noop;\n this.incompleteValidator = noop;\n this.subscriptions = new Subscription();\n }\n /**\n * @hidden\n */\n get input() {\n return this.pickerService.input;\n }\n /**\n * @hidden\n */\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * Specifies the value of the DateTimePicker component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n this.setCalendarValue(value);\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the date format for displaying the input value\n * ([see example]({% slug formats_datetimepicker %})).\n */\n set format(value) {\n this._format = value;\n this.timeSelectorFormat = this.getTimeSelectorFormat(value);\n }\n get format() {\n return this._format;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the DateTimePicker.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Sets the dates of the DateTimePicker that will be disabled\n * ([see example]({% slug disabled_dates_datetimepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Configures the popup settings of the DateTimePicker\n * ([see example]({% slug datetimepicker_popup_options %}#toc-customizing-the-popup)).\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the smallest valid date.\n * The Calendar will not display dates before this value.\n * If the `min` value of the Calendar is selected, the TimePicker will not display\n * time entries before the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set min(value) {\n if (!isPresent(value)) {\n return;\n }\n this._min = cloneDate(value);\n this.calendarMin = getDate(value);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid date.\n * The Calendar will not display dates after this value.\n * If the `max` value of the Calendar is selected, the TimePicker will not display\n * time entries after the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set max(value) {\n if (!isPresent(value)) {\n return;\n }\n this._max = cloneDate(value);\n this.calendarMax = lastMillisecondOfDate(value);\n }\n get max() {\n return this._max;\n }\n /**\n * Indicates whether the component is currently open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * Indicates whether the component or its popup content is focused.\n */\n get isActive() {\n return this._isActive;\n }\n set isActive(value) {\n if (value) {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(this.wrapper.nativeElement, 'k-state-focused');\n }\n this._isActive = value;\n }\n /**\n * Sets the active tab on opening the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-setting-the-default-tab)).\n */\n set defaultTab(tab) {\n this._defaultTab = tab || DEFAULT_ACTIVE_TAB;\n this.activeTab = this.defaultTab;\n }\n get defaultTab() {\n return this._defaultTab;\n }\n /**\n * @hidden\n */\n get tabSwitchTransition() {\n /*\n When the popup is opening, disables the set transition in the themes. When `defaultTab` is set to `time`,\n the popup opens with an active **Time** tab and the animation of the initial transition is undesired.\n Setting the inline transition style to `none` overrides the set animation in the themes.\n Setting the inline transition style to `null` does not apply any inline styles or override the themes CSS.\n */\n return this.isOpen ? null : 'none';\n }\n /**\n * @hidden\n *\n * Indicates whether the Calendar will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableCalendar() {\n return this.activeTab !== 'date' && !this.calendar.isActive;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n /**\n * @hidden\n *\n * Indicates whether the TimeSelector will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableTimeSelector() {\n return this.activeTab !== 'time' && !this.timeSelector.isActive;\n }\n get activeTabComponent() {\n if (!this.isOpen) {\n return;\n }\n if (!(isPresent(this.calendar) || isPresent(this.timeSelector))) {\n this.cdr.detectChanges();\n }\n return this.activeTab === 'date' ? this.calendar : this.timeSelector;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!isPresent(appendTo) || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n ngOnInit() {\n this.subscriptions.add(this.pickerService.onFocus\n // detect popup changes to disable the inactive view mark-up when the popup is open\n .pipe(tap(this.detectPopupChanges.bind(this)))\n .subscribe(this.handleFocus.bind(this)));\n this.subscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.subscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleCalendarValueChange.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(() => this.cdr.markForCheck()));\n this.subscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n if (isWindowAvailable()) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => fromEvent(window, 'blur').subscribe(this.handleCancel.bind(this))));\n }\n }\n ngOnChanges(changes) {\n if (isPresent(changes.min) || isPresent(changes.max)) {\n this.verifyMinMaxRange();\n }\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n }\n ngOnDestroy() {\n if (this.isOpen) {\n this.closePopup();\n }\n this.subscriptions.unsubscribe();\n }\n /**\n * * If the popup is closed, focuses the DateTimePicker input.\n * * If the popup is open, the focus is moved to its content.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else {\n this.input.focus();\n }\n }\n /**\n * Blurs the DateTimePicker.\n */\n blur() {\n if (this.isOpen && this.activeTabComponent.isActive) {\n this.activeTabComponent.blur();\n }\n else {\n this.input.blur();\n }\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly || show === this.isOpen) {\n return;\n }\n const shouldOpen = isPresent(show) ? show : !this.isOpen;\n if (shouldOpen) {\n this.openPopup();\n }\n else {\n this.closePopup();\n // Changes the tab and the calendar or clock icon to the designated default.\n if (this.activeTab !== this.defaultTab) {\n this.activeTab = this.defaultTab;\n this.cdr.detectChanges();\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(disabled) {\n this.disabled = disabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n *\n * Used by the TextBoxContainer to determine if the floating label will render in the input.\n */\n isEmpty() {\n return !isPresent(this.value) && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n // prevents the event default to evade focusing the DateInput input when placed inside a label (FF/IE/Edge)\n event.preventDefault();\n const runInZone = !this.isOpen || hasObservers(this.close);\n this.run(runInZone, () => {\n const shouldOpen = !this.isOpen;\n // handle focus first to maintain correct event order `focus` => `open`\n this.handleFocus();\n this.togglePopup(shouldOpen);\n this.switchFocus();\n });\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => this.onFocus.emit());\n }\n }\n /**\n * @hidden\n */\n handleBlur(event) {\n if (!this.isActive || this.focusTargetInComponent(event)) {\n return;\n }\n this.isActive = false;\n const isNgControlUntouched = this.host.nativeElement.classList.contains('ng-untouched');\n const runInZone = isNgControlUntouched || hasObservers(this.onBlur) || (this.isOpen && hasObservers(this.close));\n this.run(runInZone, () => {\n this.onBlur.emit();\n this.onControlTouched();\n this.togglePopup(false);\n this.cdr.markForCheck();\n });\n }\n /**\n * @hidden\n */\n changeActiveTab(tab) {\n if (!this.isOpen || this.activeTab === tab) {\n return;\n }\n // persists the Tcurrent value of the TimeSelector when switching between tabs\n if (!isEqual(this.timeSelector.value, this.timeSelector.current)) {\n this.timeSelector.handleAccept();\n }\n this.activeTab = tab;\n this.cdr.detectChanges();\n this.detectPopupChanges();\n }\n /**\n * @hidden\n */\n handleTabChangeTransitionEnd(dateTimeSelector, event) {\n // handle only the .k-datetime-selector element transition, ignore any child element transitions\n if (event.target !== dateTimeSelector) {\n return;\n }\n this.activeTabComponent.focus();\n }\n /**\n * @hidden\n */\n handleAccept() {\n if (!this.isOpen) {\n return;\n }\n const candidate = mergeDateAndTime(this.calendar.value, this.timeSelector.current);\n const valueChangePresent = !isEqual(this.value, candidate);\n const runInZone = valueChangePresent || hasObservers(this.close);\n this.run(runInZone, () => {\n this.handleValueChange(candidate);\n this.togglePopup(false);\n });\n }\n /**\n * @hidden\n */\n handleCancel() {\n if (!this.isOpen) {\n return;\n }\n const runInZone = hasObservers(this.close);\n this.run(runInZone, () => this.togglePopup(false));\n }\n /**\n * @hidden\n */\n handleInputValueChange(value) {\n this.handleValueChange(value);\n if (this.isOpen) {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleCalendarValueChange() {\n this.setTimeSelectorMinMax(this.calendar.value);\n this.changeActiveTab('time');\n }\n /**\n * @hidden\n */\n handleKeyDown(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n const { keyCode, altKey } = event;\n switch (keyCode) {\n case altKey && Keys.ArrowUp:\n case Keys.Escape:\n this.handleCancel();\n break;\n case !this.isOpen && altKey && Keys.ArrowDown:\n this.ngZone.run(() => this.togglePopup(true));\n break;\n case altKey && Keys.ArrowRight:\n this.changeActiveTab('time');\n break;\n case altKey && Keys.ArrowLeft:\n this.changeActiveTab('date');\n break;\n case this.isOpen && this.timeSelector.isActive && isPresent(this.calendarValue) && Keys.Enter:\n this.handleAccept();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleTabOut(event) {\n const { keyCode, shiftKey, target } = event;\n // if no focusable next sibling elements exist in the controls sections, the user is tabbing out of the popup\n const focusableSiblingAvailable = isPresent(target.nextElementSibling) && !target.nextElementSibling.disabled;\n if (keyCode === Keys.Tab && !shiftKey && !focusableSiblingAvailable) {\n this.input.focus();\n this.handleCancel();\n }\n }\n /**\n * @hidden\n */\n handleBackTabOut(event) {\n const { keyCode, shiftKey } = event;\n if (keyCode === Keys.Tab && shiftKey) {\n this.input.focus();\n }\n }\n /**\n * @hidden\n *\n * Prevents the diversion of the focus from the currently active element in the component.\n */\n preventMouseDown(event) {\n event.preventDefault();\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(value) && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$4} for possible resolution.`);\n }\n }\n verifyMinMaxRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_MAX_DOC_LINK}.`);\n }\n }\n /**\n * Extracts the time slots and the literals that are not preceded by date parts\n * and concatenates the resulting parts into a string.\n * If the provided format value does not contain any time parts,\n * returns the designated format of the default popup component of the TimePicker.\n */\n getTimeSelectorFormat(format) {\n const timeSelectorFormat = this.intl\n .splitDateFormat(format)\n .filter(this.timeFormatPartFilter)\n .reduce((format, part) => format += part.pattern, '');\n return timeSelectorFormat || DEFAULT_TIMESELECTOR_FORMAT;\n }\n /**\n * The filter expression that filters out all format parts\n * except for `hour`, `minute`, `second`, `dayperiod`, and specific literals.\n * Literals will be left only if they are not preceded by date parts.\n */\n timeFormatPartFilter(part, index, parts) {\n const previousPart = index >= 1 && parts[index - 1];\n if (previousPart && part.type === 'literal') {\n return timeFormatRegExp.test(previousPart.type);\n }\n return timeFormatRegExp.test(part.type);\n }\n togglePopup(open) {\n if (open === this.isOpen) {\n return;\n }\n const event = new PreventableEvent();\n open ? this.open.emit(event) : this.close.emit(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n this.toggle(open);\n this.switchFocus();\n }\n switchFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n openPopup() {\n this.setCalendarValue(this.value);\n this.setTimeSelectorMinMax(this.value);\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n content: this.popupTemplate,\n positionMode: 'absolute',\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n popupClass: `k-datetime-container ${this.popupSettings.popupClass || ''}`,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction }\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.handleCancel());\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n handleValueChange(value) {\n if (isEqual(this.value, value)) {\n return;\n }\n this.value = cloneDate(value);\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * Indicates whether the focus target is part of this component,\n * that is, whether the focus target is inside the component wrapper or in the popup.\n */\n focusTargetInComponent(event) {\n if (!isPresent(event)) {\n return false;\n }\n const relatedTarget = event.relatedTarget || document.activeElement;\n const focusInPopup = isPresent(this.popupRef) && this.popupRef.popupElement.contains(relatedTarget);\n const focusInWrapper = this.wrapper.nativeElement.contains(relatedTarget);\n return focusInPopup || focusInWrapper;\n }\n setTimeSelectorMinMax(selectedDate) {\n const minDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.min));\n this.timeSelectorMin = cloneDate(minDateSelected ? this.min : MIN_TIME);\n const maxDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.max));\n this.timeSelectorMax = cloneDate(maxDateSelected ? this.max : MAX_TIME);\n }\n setCalendarValue(value) {\n const isInCalendarRange = isPresent(value) && isInRange(value, this.calendarMin, this.calendarMax);\n this.calendarValue = isInCalendarRange ? getDate(value) : null;\n }\n /**\n * If the popup is available, runs a popup change detection.\n */\n detectPopupChanges() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.popup.changeDetectorRef.detectChanges();\n }\n /**\n * Depending on the predicate `runInZone` value that is passed,\n * runs the provided function either in the Angular or in the current zone.\n */\n run(runInZone, fn) {\n if (runInZone) {\n this.ngZone.run(() => fn());\n }\n else {\n fn();\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n}\nDateTimePickerComponent.ɵfac = function DateTimePickerComponent_Factory(t) { return new (t || DateTimePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nDateTimePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateTimePickerComponent, selectors: [[\"kendo-datetimepicker\"]], contentQueries: function DateTimePickerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n } }, viewQuery: function DateTimePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c15, true);\n ɵngcc0.ɵɵviewQuery(_c13, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c14, true, TemplateRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n } }, hostVars: 4, hostBindings: function DateTimePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-datetimepicker\", ctx.hostClasses);\n } }, inputs: { focusableId: \"focusableId\", title: \"title\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", cancelButton: \"cancelButton\", weekNumber: \"weekNumber\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", incompleteDateValidation: \"incompleteDateValidation\", value: \"value\", format: \"format\", tabindex: \"tabindex\", disabledDates: \"disabledDates\", popupSettings: \"popupSettings\", min: \"min\", max: \"max\", defaultTab: \"defaultTab\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", steps: \"steps\", focusedDate: \"focusedDate\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendo-datetimepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 34, consts: function () { let i18n_37; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Date tab text in the datetimepicker popup header\n * @meaning kendo.datetimepicker.dateTab\n */\n const MSG_EXTERNAL_3360129034450596425$$DIST_FESM2015_INDEX_JS_38 = goog.getMsg(\"Date\");\n i18n_37 = MSG_EXTERNAL_3360129034450596425$$DIST_FESM2015_INDEX_JS_38;\n }\n else {\n i18n_37 = $localize `:kendo.datetimepicker.dateTab|The Date tab text in the datetimepicker popup header␟5bb17f81ae8dbc109499ce3792afffa6b7cef855␟3360129034450596425:Date`;\n } let i18n_39; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Date tab in the datetimepicker popup header\n * @meaning kendo.datetimepicker.dateTabLabel\n */\n const MSG_EXTERNAL_1810540079817643910$$DIST_FESM2015_INDEX_JS_40 = goog.getMsg(\"Date tab\");\n i18n_39 = MSG_EXTERNAL_1810540079817643910$$DIST_FESM2015_INDEX_JS_40;\n }\n else {\n i18n_39 = $localize `:kendo.datetimepicker.dateTabLabel|The label for the Date tab in the datetimepicker popup header␟2a400c9e364a4c6d83ac39b5513c962805db54b2␟1810540079817643910:Date tab`;\n } let i18n_41; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Time tab text in the datetimepicker popup header\n * @meaning kendo.datetimepicker.timeTab\n */\n const MSG_EXTERNAL_3807284594201983607$$DIST_FESM2015_INDEX_JS_42 = goog.getMsg(\"Time\");\n i18n_41 = MSG_EXTERNAL_3807284594201983607$$DIST_FESM2015_INDEX_JS_42;\n }\n else {\n i18n_41 = $localize `:kendo.datetimepicker.timeTab|The Time tab text in the datetimepicker popup header␟e9b2b760a6916040e7520a9a2926d65de175944d␟3807284594201983607:Time`;\n } let i18n_43; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Time tab in the datetimepicker popup header\n * @meaning kendo.datetimepicker.timeTabLabel\n */\n const MSG_EXTERNAL_2577682127494513393$$DIST_FESM2015_INDEX_JS_44 = goog.getMsg(\"Time tab\");\n i18n_43 = MSG_EXTERNAL_2577682127494513393$$DIST_FESM2015_INDEX_JS_44;\n }\n else {\n i18n_43 = $localize `:kendo.datetimepicker.timeTabLabel|The label for the Time tab in the datetimepicker popup header␟13bf7e3a1036140119732c6d5952f7a20c22999e␟2577682127494513393:Time tab`;\n } let i18n_45; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the datetimepicker component\n * @meaning kendo.datetimepicker.toggle\n */\n const MSG_EXTERNAL_3159207801887264026$$DIST_FESM2015_INDEX_JS_46 = goog.getMsg(\"Toggle popup\");\n i18n_45 = MSG_EXTERNAL_3159207801887264026$$DIST_FESM2015_INDEX_JS_46;\n }\n else {\n i18n_45 = $localize `:kendo.datetimepicker.toggle|The label for the toggle button in the datetimepicker component␟60296a83f0d3e3d07aaba87c4f8e91b0aca3c22a␟3159207801887264026:Toggle popup`;\n } let i18n_47; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the datetimepicker component\n * @meaning kendo.datetimepicker.accept\n */\n const MSG_EXTERNAL_3915774704336012538$$DIST_FESM2015_INDEX_JS_48 = goog.getMsg(\"Set\");\n i18n_47 = MSG_EXTERNAL_3915774704336012538$$DIST_FESM2015_INDEX_JS_48;\n }\n else {\n i18n_47 = $localize `:kendo.datetimepicker.accept|The Accept button text in the datetimepicker component␟4359b59db7ded88e106ada877e744c71b188f8f9␟3915774704336012538:Set`;\n } let i18n_49; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the datetimepicker component\n * @meaning kendo.datetimepicker.acceptLabel\n */\n const MSG_EXTERNAL_4770689705864890748$$DIST_FESM2015_INDEX_JS_50 = goog.getMsg(\"Set\");\n i18n_49 = MSG_EXTERNAL_4770689705864890748$$DIST_FESM2015_INDEX_JS_50;\n }\n else {\n i18n_49 = $localize `:kendo.datetimepicker.acceptLabel|The label for the Accept button in the datetimepicker component␟cbea4571cca81ad9767a6b29f0287d1f3f6372dc␟4770689705864890748:Set`;\n } let i18n_51; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the datetimepicker component\n * @meaning kendo.datetimepicker.cancel\n */\n const MSG_EXTERNAL_5100781969600382158$$DIST_FESM2015_INDEX_JS_52 = goog.getMsg(\"Cancel\");\n i18n_51 = MSG_EXTERNAL_5100781969600382158$$DIST_FESM2015_INDEX_JS_52;\n }\n else {\n i18n_51 = $localize `:kendo.datetimepicker.cancel|The Cancel button text in the datetimepicker component␟17ab795d6f7527dd962a309759ca58cb4edd7e52␟5100781969600382158:Cancel`;\n } let i18n_53; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the datetimepicker component\n * @meaning kendo.datetimepicker.cancelLabel\n */\n const MSG_EXTERNAL_3535986227615756275$$DIST_FESM2015_INDEX_JS_54 = goog.getMsg(\"Cancel\");\n i18n_53 = MSG_EXTERNAL_3535986227615756275$$DIST_FESM2015_INDEX_JS_54;\n }\n else {\n i18n_53 = $localize `:kendo.datetimepicker.cancelLabel|The label for the Cancel button in the datetimepicker component␟ba26795ab9f4c21d66b17549ba854a96fcdac1f9␟3535986227615756275:Cancel`;\n } let i18n_55; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timepicker component\n * @meaning kendo.datetimepicker.now\n */\n const MSG_EXTERNAL_5497093725885127701$$DIST_FESM2015_INDEX_JS_56 = goog.getMsg(\"NOW\");\n i18n_55 = MSG_EXTERNAL_5497093725885127701$$DIST_FESM2015_INDEX_JS_56;\n }\n else {\n i18n_55 = $localize `:kendo.datetimepicker.now|The Now button text in the timepicker component␟7172e7e9a1741f6b63439ec89e498c995cb23b0d␟5497093725885127701:NOW`;\n } let i18n_57; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timepicker component\n * @meaning kendo.datetimepicker.nowLabel\n */\n const MSG_EXTERNAL_5046379108717037514$$DIST_FESM2015_INDEX_JS_58 = goog.getMsg(\"Select now\");\n i18n_57 = MSG_EXTERNAL_5046379108717037514$$DIST_FESM2015_INDEX_JS_58;\n }\n else {\n i18n_57 = $localize `:kendo.datetimepicker.nowLabel|The label for the Now button in the timepicker component␟52d90641b26b1ce4c011cadf0437ce36c1dac1d5␟5046379108717037514:Select now`;\n } let i18n_59; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.datetimepicker.today\n */\n const MSG_EXTERNAL_7904626229769721311$$DIST_FESM2015_INDEX_JS_60 = goog.getMsg(\"TODAY\");\n i18n_59 = MSG_EXTERNAL_7904626229769721311$$DIST_FESM2015_INDEX_JS_60;\n }\n else {\n i18n_59 = $localize `:kendo.datetimepicker.today|The label for the today button in the calendar header␟7ee30b9ae5918cc544fbd87a4135694397aeefaf␟7904626229769721311:TODAY`;\n } return [[\"kendoDateTimePickerLocalizedMessages\", \"\", \"dateTab\", i18n_37, \"dateTabLabel\", i18n_39, \"timeTab\", i18n_41, \"timeTabLabel\", i18n_43, \"toggle\", i18n_45, \"accept\", i18n_47, \"acceptLabel\", i18n_49, \"cancel\", i18n_51, \"cancelLabel\", i18n_53, \"now\", i18n_55, \"nowLabel\", i18n_57, \"today\", i18n_59], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"value\", \"format\", \"min\", \"max\", \"incompleteDateValidation\", \"formatPlaceholder\", \"placeholder\", \"disabled\", \"readonly\", \"role\", \"ariaReadOnly\", \"steps\", \"tabindex\", \"title\", \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\"], [1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-link\", \"k-link-date\"], [1, \"k-icon\"], [\"container\", \"\"], [\"popupTemplate\", \"\"], [3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-datetime-buttongroup\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-button-group\", \"k-button-group-stretched\"], [\"type\", \"button\", 1, \"k-button\", \"k-date-tab\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-tab\", 3, \"kendoEventsOutsideAngular\"], [1, \"k-datetime-selector\", 3, \"kendoEventsOutsideAngular\"], [\"dateTimeSelector\", \"\"], [1, \"k-datetime-calendar-wrap\"], [3, \"value\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"navigation\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"disabled\", \"disabledDates\", \"valueChange\"], [3, \"today\"], [1, \"k-datetime-time-wrap\"], [3, \"value\", \"format\", \"min\", \"max\", \"setButton\", \"cancelButton\", \"steps\", \"disabled\"], [3, \"now\", \"nowLabel\"], [1, \"k-datetime-footer\", \"k-action-buttons\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", \"class\", \"k-button k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-time-accept\", \"k-button\", \"k-primary\", 3, \"disabled\", \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\"]]; }, template: function DateTimePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(3, \"kendo-dateinput\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateTimePickerComponent_Template_kendo_dateinput_valueChange_3_listener($event) { return ctx.handleInputValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"span\", 4);\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵelement(6, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(7, null, 7);\n ɵngcc0.ɵɵtemplate(9, DateTimePickerComponent_ng_template_9_Template, 19, 77, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx.value)(\"format\", ctx.format)(\"min\", ctx.min)(\"max\", ctx.max)(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"role\", ctx.inputRole)(\"ariaReadOnly\", ctx.readonly)(\"steps\", ctx.steps)(\"tabindex\", ctx.tabindex)(\"title\", ctx.title)(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.isOpen)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(29, _c20, ctx.handleKeyDown))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(31, _c66, ctx.preventMouseDown, ctx.handleIconClick))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-i-calendar\", ctx.activeTab === \"date\")(\"k-i-clock\", ctx.activeTab === \"time\");\n } }, directives: function () { return [LocalizedMessagesDirective, DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, CalendarComponent, CalendarCustomMessagesComponent, TimeSelectorComponent, TimeSelectorCustomMessagesComponent, ɵngcc2.NgIf]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDateTimePickerComponent.ctorParameters = () => [\n { type: PopupService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: PickerService },\n { type: NgZone },\n { type: ElementRef },\n { type: Boolean, decorators: [{ type: Inject, args: [TOUCH_ENABLED,] }] },\n { type: LocalizationService },\n { type: DisabledDatesService },\n { type: Renderer2 }\n];\nDateTimePickerComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-datetimepicker',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n value: [{ type: Input }],\n format: [{ type: Input }],\n tabindex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n popupSettings: [{ type: Input }],\n focusableId: [{ type: Input }],\n title: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n cancelButton: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n steps: [{ type: Input }],\n focusedDate: [{ type: Input }],\n weekNumber: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesValidation: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n valueChange: [{ type: Output }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n defaultTab: [{ type: Input }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective,] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective,] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective,] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective,] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective,] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective,] }],\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { read: TemplateRef },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-datetimepicker',\n exportAs: 'kendo-datetimepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ],\n template: `\n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n\n \n \n
    \n
    \n \n {{localization.get('dateTab')}}\n \n \n {{localization.get('timeTab')}}\n \n
    \n
    \n \n
    \n \n \n \n \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n {{localization.get('cancel')}}\n \n \n {{localization.get('accept')}}\n \n \n \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc5.PopupService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PickerService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: Boolean, decorators: [{\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }, { type: ɵngcc4.LocalizationService }, { type: DisabledDatesService }, { type: ɵngcc0.Renderer2 }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-datetimepicker']\n }], focusableId: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], value: [{\n type: Input\n }], format: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], defaultTab: [{\n type: Input\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective]\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective]\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective]\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective]\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective]\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { read: TemplateRef }]\n }] }); })();\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst DEFAULT_VIEWS_LENGTH = 2;\n/**\n * @hidden\n */\nclass HorizontalViewListComponent {\n constructor(bus, cdr) {\n this.bus = bus;\n this.cdr = cdr;\n this.activeView = CalendarViewEnum.month;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.views = DEFAULT_VIEWS_LENGTH;\n this.valueChange = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.dates = [];\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get getComponentClass() {\n return true;\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnChanges(changes) {\n this.initService();\n if (!this.service) {\n return;\n }\n this.views = this.views || DEFAULT_VIEWS_LENGTH;\n const focusedDate = this.focusedDate;\n const viewDate = this.clampDate(this.service.viewDate(focusedDate, this.max, this.views));\n this.skip = this.service.skip(viewDate, this.min);\n this.total = this.service.total(this.min, this.max);\n const activeViewChanged = hasChange(changes, 'activeView');\n const viewsHasChanged = this.views > 0 && hasChange(changes, 'views');\n if (activeViewChanged || !this.isInDates(focusedDate) || viewsHasChanged || !this.activeDate) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n this.activeDate = cloneDate(this.dates[0]);\n }\n }\n initService() {\n this.service = this.bus.service(this.activeView);\n }\n handleDateChange(candidate) {\n this.valueChange.emit(candidate);\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n navigate(action) {\n const candidate = this.move(action);\n const list = this.service.datesList(candidate, this.getTake(this.skip));\n if (this.isListInRange(list)) {\n this.dates = list;\n }\n this.activeDate = cloneDate(this.dates[0]);\n this.focusedDate = cloneDate(candidate);\n this.cdr.markForCheck();\n return cloneDate(candidate);\n }\n canNavigate(action) {\n if (!this.service) {\n return false;\n }\n return this.isListInRange(this.service.datesList(this.move(action), this.getTake(this.skip)));\n }\n clampDate(value) {\n return dateInRange(value, this.min, this.max);\n }\n move(action) {\n return this.service.move(this.dates[0] || this.focusedDate, action);\n }\n isListInRange(list) {\n const lowerBound = this.service.beginningOfPeriod(this.min);\n const upperBound = this.service.beginningOfPeriod(this.service.addToDate(this.max, 1));\n return lowerBound <= list[0] && list[list.length - 1] < upperBound;\n }\n isInDates(value) {\n return this.service.isInArray(value, this.dates);\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.views);\n }\n}\nHorizontalViewListComponent.ɵfac = function HorizontalViewListComponent_Factory(t) { return new (t || HorizontalViewListComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nHorizontalViewListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HorizontalViewListComponent, selectors: [[\"kendo-calendar-horizontal\"]], hostVars: 10, hostBindings: function HorizontalViewListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-view\", ctx.getComponentClass)(\"k-calendar-monthview\", ctx.getComponentMonthClass)(\"k-calendar-yearview\", ctx.getComponentYearClass)(\"k-calendar-decadeview\", ctx.getComponentDecadeClass)(\"k-calendar-centuryview\", ctx.getComponentCenturyClass);\n } }, inputs: { activeView: \"activeView\", isActive: \"isActive\", min: \"min\", max: \"max\", views: \"views\", weekNumber: \"weekNumber\", focusedDate: \"focusedDate\", cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", headerTitleTemplateRef: \"headerTitleTemplateRef\", activeRangeEnd: \"activeRangeEnd\", cellUID: \"cellUID\", selectionRange: \"selectionRange\", value: \"value\" }, outputs: { valueChange: \"valueChange\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 3, vars: 7, consts: [[3, \"activeView\", \"currentDate\", \"min\", \"max\", \"rangeLength\", \"templateRef\", \"today\"], [1, \"k-content\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", \"direction\", \"horizontal\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"selectionRange\", \"activeRangeEnd\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", \"cellEnter\", \"cellLeave\", 4, \"kFor\", \"kForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", \"direction\", \"horizontal\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"selectionRange\", \"activeRangeEnd\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", \"cellEnter\", \"cellLeave\"]], template: function HorizontalViewListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-header\", 0);\n ɵngcc0.ɵɵlistener(\"today\", function HorizontalViewListComponent_Template_kendo_calendar_header_today_0_listener($event) { return ctx.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"table\", 1);\n ɵngcc0.ɵɵtemplate(2, HorizontalViewListComponent_tbody_2_Template, 1, 13, \"tbody\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeView)(\"currentDate\", ctx.activeDate)(\"min\", ctx.min)(\"max\", ctx.max)(\"rangeLength\", ctx.views)(\"templateRef\", ctx.headerTitleTemplateRef);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [HeaderComponent, KForOf, ViewComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nHorizontalViewListComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef }\n];\nHorizontalViewListComponent.propDecorators = {\n cellTemplateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n headerTitleTemplateRef: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n isActive: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n selectionRange: [{ type: Input }],\n value: [{ type: Input }],\n views: [{ type: Input }],\n weekNumber: [{ type: Input }],\n valueChange: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-view\",] }],\n getComponentMonthClass: [{ type: HostBinding, args: [\"class.k-calendar-monthview\",] }],\n getComponentYearClass: [{ type: HostBinding, args: [\"class.k-calendar-yearview\",] }],\n getComponentDecadeClass: [{ type: HostBinding, args: [\"class.k-calendar-decadeview\",] }],\n getComponentCenturyClass: [{ type: HostBinding, args: [\"class.k-calendar-centuryview\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HorizontalViewListComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-horizontal',\n template: `\n \n \n \n \n
    \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { activeView: [{\n type: Input\n }], isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], views: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }], focusedDate: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], headerTitleTemplateRef: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\nconst noop$2 = () => null;\n/**\n * @hidden\n */\nconst disabledDatesRangeValidator = (isDateDisabled) => {\n if (!isPresent(isDateDisabled)) {\n return noop$2;\n }\n return (selectedRange) => {\n const isRangeComplete = isPresent(selectedRange) && isPresent(selectedRange.start) && isPresent(selectedRange.end);\n if (!isRangeComplete || selectedRange.start > selectedRange.end) {\n return null;\n }\n const disabledDates = disabledDatesInRange(selectedRange.start, selectedRange.end, isDateDisabled);\n const error = {\n disabledDatesInRange: disabledDates\n };\n return disabledDates.length ? error : null;\n };\n};\n\n/* tslint:disable:no-forward-ref */\nconst BOTTOM_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK$5 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiViewCalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MultiViewCalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * Represents the Kendo UI MultiViewCalendar component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MultiViewCalendarComponent {\n constructor(bus, element, localization, navigator, renderer, cdr, zone, disabledDatesService) {\n this.bus = bus;\n this.element = element;\n this.localization = localization;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.zone = zone;\n this.disabledDatesService = disabledDatesService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_multiviewcalendar %}#toc-validation)).\n */\n this.disabledDatesRangeValidation = false;\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_multiviewcalendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_multiviewcalendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view, to which the user can navigate\n * ([see example]({% slug dates_multiviewcalendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view, to which the user can navigate.\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_multiviewcalendar %})).\n */\n this.weekNumber = false;\n /**\n * Sets or gets the `views` property of the Calendar and\n * defines the number of rendered months.\n */\n this.views = 2;\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when a view cell is entered\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellEnter = new EventEmitter();\n /**\n * Fires when a view cell is leaved\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellLeave = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n this.cellUID = guid();\n this.isActive = false;\n this.isHovered = false;\n this.isPrevDisabled = true;\n this.isNextDisabled = true;\n this.prevView = Action.PrevView;\n this.nextView = Action.NextView;\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.resolvedPromise = Promise.resolve();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesRangeValidateFn = noop;\n this.subscriptions = new Subscription(() => { });\n this.setClasses(element.nativeElement);\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n this._focusedDate = focusedDate || getToday();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value.\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value.\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = cloneDate(candidate);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the MultiViewCalendar that will be disabled\n * ([see example]({% slug disabled_dates_multiviewcalendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n }\n /**\n * Sets or gets the `selectionRange` property of the Calendar and\n * defines the selection range of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-selection-range)).\n */\n set selectionRange(range$$1) {\n this._selectionRange = range$$1;\n if (this.disabledDatesRangeValidation) {\n this.onValidatorChange();\n }\n }\n get selectionRange() {\n return this._selectionRange;\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get widgetRole() {\n return 'grid';\n }\n get calendarTabIndex() {\n return this.disabled ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get ariaActivedescendant() {\n return this.cellUID + this.focusedDate.getTime();\n }\n /**\n * @hidden\n */\n handleBlur() {\n this.onControlTouched();\n this.isActive = false;\n this.isHovered = false; //ensure that hovered is also not active\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isActive = true;\n }\n /**\n * @hidden\n */\n handleMouseEnter() {\n this.isHovered = true;\n }\n /**\n * @hidden\n */\n handleMouseLeave() {\n this.isHovered = false;\n }\n /**\n * @hidden\n */\n handleMousedown(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleClick() {\n if (this.isActive) {\n return;\n }\n this.focus();\n }\n /**\n * @hidden\n */\n keydown(event) {\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(event), this.activeViewEnum), this.min, this.max);\n if (isEqual(this.focusedDate, candidate)) {\n return;\n }\n this.focusedDate = candidate;\n event.preventDefault();\n }\n /**\n * @hidden\n */\n enter() {\n this.handleDateChange(this.focusedDate);\n }\n ngOnInit() {\n this.setMessages();\n this.subscriptions.add(this.localization.changes.subscribe(() => this.setMessages()));\n this.subscriptions.add(this.bus.viewChanged.subscribe(({ view }) => {\n this.activeView = CalendarViewEnum[view];\n this.activeViewChange.emit(this.activeView);\n this.cdr.detectChanges();\n this.updateButtonState();\n }));\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n const useValue = hasExistingValue(changes, 'value') && !hasExistingValue(changes, 'focusedDate');\n const focusedDate = dateInRange(cloneDate(useValue ? this.value : this.focusedDate), this.min, this.max);\n this.focusedDate = !isEqual(this.focusedDate, focusedDate) ? focusedDate : this.focusedDate;\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDates || changes.disabledDatesRangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesRangeValidateFn = this.disabledDatesRangeValidation ? disabledDatesRangeValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.onValidatorChange();\n }\n if (changes.min || changes.max || changes.focusedDate || changes.activeView) {\n this.updateButtonState();\n }\n }\n ngOnDestroy() {\n clearTimeout(this.messagesTimeout);\n this.subscriptions.unsubscribe();\n }\n ngAfterViewInit() {\n this.updateButtonState();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n /**\n * @hidden\n */\n handleDateChange(candidate) {\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const isSameDate = !canNavigateDown && isEqual(candidate, this.value);\n this.focusedDate = cloneDate(candidate) || this.focusedDate;\n if (this.disabled || isSameDate) {\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (!this.disabledDatesService.isDateDisabled(candidate)) {\n this.value = cloneDate(candidate);\n this.onControlChange(cloneDate(candidate));\n this.valueChange.emit(cloneDate(candidate));\n }\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.focusedDate = dateInRange(cloneDate(candidate) || this.focusedDate, this.min, this.max);\n this.value = cloneDate(candidate);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesRangeValidateFn(this.selectionRange);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplate || this.cellTemplate;\n case CalendarViewEnum.year:\n return this.yearCellTemplate;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplate;\n case CalendarViewEnum.century:\n return this.centuryCellTemplate;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n navigate(action) {\n this.focusedDate = this.viewList.navigate(action);\n this.updateButtonState();\n }\n /**\n * @hidden\n */\n emitCellEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.zone.run(() => {\n emitter.emit(args);\n });\n }\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, 'k-calendar-infinite');\n this.renderer.addClass(element, 'k-calendar-range');\n }\n setMessages() {\n this.zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.prevButtonTitle = this.localization.get('prevButtonTitle');\n this.nextButtonTitle = this.localization.get('nextButtonTitle');\n this.cdr.detectChanges();\n });\n });\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$3} and ${MAX_DOC_LINK$3}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK$1} and ${TOP_VIEW_DOC_LINK$1}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$5} for possible resolution.`);\n }\n }\n updateButtonState() {\n this.resolvedPromise.then(() => {\n this.isPrevDisabled = !this.viewList.canNavigate(this.prevView);\n this.isNextDisabled = !this.viewList.canNavigate(this.nextView);\n this.cdr.markForCheck();\n });\n }\n}\nMultiViewCalendarComponent.ɵfac = function MultiViewCalendarComponent_Factory(t) { return new (t || MultiViewCalendarComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nMultiViewCalendarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MultiViewCalendarComponent, selectors: [[\"kendo-multiviewcalendar\"]], contentQueries: function MultiViewCalendarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n } }, viewQuery: function MultiViewCalendarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(HorizontalViewListComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewList = _t.first);\n } }, hostVars: 7, hostBindings: function MultiViewCalendarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"blur\", function MultiViewCalendarComponent_blur_HostBindingHandler() { return ctx.handleBlur(); })(\"focus\", function MultiViewCalendarComponent_focus_HostBindingHandler() { return ctx.handleFocus(); })(\"mouseenter\", function MultiViewCalendarComponent_mouseenter_HostBindingHandler() { return ctx.handleMouseEnter(); })(\"mouseleave\", function MultiViewCalendarComponent_mouseleave_HostBindingHandler() { return ctx.handleMouseLeave(); })(\"mousedown\", function MultiViewCalendarComponent_mousedown_HostBindingHandler($event) { return ctx.handleMousedown($event); })(\"click\", function MultiViewCalendarComponent_click_HostBindingHandler() { return ctx.handleClick(); })(\"keydown\", function MultiViewCalendarComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keydown.enter\", function MultiViewCalendarComponent_keydown_enter_HostBindingHandler() { return ctx.enter(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.widgetId)(\"role\", ctx.widgetRole)(\"tabindex\", ctx.calendarTabIndex)(\"aria-disabled\", ctx.ariaDisabled)(\"aria-activedescendant\", ctx.ariaActivedescendant);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.ariaDisabled);\n } }, inputs: { id: \"id\", rangeValidation: \"rangeValidation\", disabledDatesRangeValidation: \"disabledDatesRangeValidation\", disabled: \"disabled\", tabindex: \"tabindex\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", views: \"views\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", selectionRange: \"selectionRange\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], activeRangeEnd: \"activeRangeEnd\" }, outputs: { activeViewChange: \"activeViewChange\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\", valueChange: \"valueChange\" }, exportAs: [\"kendo-multiviewcalendar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 20, consts: function () { let i18n_67; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.multiviewcalendar.today\n */\n const MSG_EXTERNAL_3892034896682737327$$DIST_FESM2015_INDEX_JS_68 = goog.getMsg(\"TODAY\");\n i18n_67 = MSG_EXTERNAL_3892034896682737327$$DIST_FESM2015_INDEX_JS_68;\n }\n else {\n i18n_67 = $localize `:kendo.multiviewcalendar.today|The label for the today button in the calendar header␟063d99483243b27bc8282abfb5f2c76877e1112e␟3892034896682737327:TODAY`;\n } let i18n_69; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the previous button in the Multiview calendar\n * @meaning kendo.multiviewcalendar.prevButtonTitle\n */\n const MSG_EXTERNAL_9101635325676663492$$DIST_FESM2015_INDEX_JS_70 = goog.getMsg(\"Navigate to previous view\");\n i18n_69 = MSG_EXTERNAL_9101635325676663492$$DIST_FESM2015_INDEX_JS_70;\n }\n else {\n i18n_69 = $localize `:kendo.multiviewcalendar.prevButtonTitle|The label for the previous button in the Multiview calendar␟e783e2af4828224b846fa92148ea1cc52b21bb13␟9101635325676663492:Navigate to previous view`;\n } let i18n_71; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the next button in the Multiview calendar\n * @meaning kendo.multiviewcalendar.nextButtonTitle\n */\n const MSG_EXTERNAL_3994336778698343633$$DIST_FESM2015_INDEX_JS_72 = goog.getMsg(\"Navigate to next view\");\n i18n_71 = MSG_EXTERNAL_3994336778698343633$$DIST_FESM2015_INDEX_JS_72;\n }\n else {\n i18n_71 = $localize `:kendo.multiviewcalendar.nextButtonTitle|The label for the next button in the Multiview calendar␟3e3a529a242f39d22f841c3bd8045ec75b696b7a␟3994336778698343633:Navigate to next view`;\n } return [[\"kendoMultiViewCalendarLocalizedMessages\", \"\", \"today\", i18n_67, \"prevButtonTitle\", i18n_69, \"nextButtonTitle\", i18n_71], [\"type\", \"button\", 1, \"k-button\", \"k-prev-view\", 3, \"disabled\", \"title\", \"click\"], [1, \"k-icon\", \"k-i-arrow-chevron-left\"], [3, \"activeView\", \"isActive\", \"cellTemplateRef\", \"headerTitleTemplateRef\", \"weekNumberTemplateRef\", \"cellUID\", \"views\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"activeRangeEnd\", \"selectionRange\", \"value\", \"valueChange\", \"cellEnter\", \"cellLeave\"], [\"type\", \"button\", 1, \"k-button\", \"k-next-view\", 3, \"disabled\", \"title\", \"click\"], [1, \"k-icon\", \"k-i-arrow-chevron-right\"]]; }, template: function MultiViewCalendarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function MultiViewCalendarComponent_Template_button_click_1_listener() { return ctx.navigate(ctx.prevView); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"kendo-calendar-horizontal\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_valueChange_3_listener($event) { return ctx.handleDateChange($event); })(\"cellEnter\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_cellEnter_3_listener($event) { return ctx.emitCellEvent(ctx.cellEnter, $event); })(\"cellLeave\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_cellLeave_3_listener($event) { return ctx.emitCellEvent(ctx.cellLeave, $event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"button\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function MultiViewCalendarComponent_Template_button_click_4_listener() { return ctx.navigate(ctx.nextView); });\n ɵngcc0.ɵɵelement(5, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n let tmp_5_0 = null;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.isPrevDisabled)(\"title\", ctx.prevButtonTitle);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.isPrevDisabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeViewEnum)(\"isActive\", ctx.isActive || ctx.isHovered)(\"cellTemplateRef\", (tmp_5_0 = ctx.activeCellTemplate()) == null ? null : tmp_5_0.templateRef)(\"headerTitleTemplateRef\", ctx.headerTitleTemplate == null ? null : ctx.headerTitleTemplate.templateRef)(\"weekNumberTemplateRef\", ctx.weekNumberTemplate == null ? null : ctx.weekNumberTemplate.templateRef)(\"cellUID\", ctx.cellUID)(\"views\", ctx.views)(\"min\", ctx.min)(\"max\", ctx.max)(\"focusedDate\", ctx.focusedDate)(\"weekNumber\", ctx.weekNumber)(\"activeRangeEnd\", ctx.activeRangeEnd)(\"selectionRange\", ctx.selectionRange)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.isNextDisabled)(\"title\", ctx.nextButtonTitle);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.isNextDisabled);\n } }, directives: function () { return [MultiViewCalendarLocalizedMessagesDirective, HorizontalViewListComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nMultiViewCalendarComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: NavigationService },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: NgZone },\n { type: DisabledDatesService }\n];\nMultiViewCalendarComponent.propDecorators = {\n id: [{ type: Input }],\n focusedDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesRangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n disabled: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n selectionRange: [{ type: Input }],\n views: [{ type: Input }],\n activeViewChange: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }],\n valueChange: [{ type: Output }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective, { static: true },] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective, { static: true },] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective, { static: true },] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective, { static: true },] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective, { static: true },] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective, { static: true },] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective, { static: true },] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n viewList: [{ type: ViewChild, args: [HorizontalViewListComponent,] }],\n widgetId: [{ type: HostBinding, args: ['attr.id',] }],\n widgetRole: [{ type: HostBinding, args: ['attr.role',] }],\n calendarTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }],\n ariaActivedescendant: [{ type: HostBinding, args: ['attr.aria-activedescendant',] }],\n handleBlur: [{ type: HostListener, args: [\"blur\",] }],\n handleFocus: [{ type: HostListener, args: [\"focus\",] }],\n handleMouseEnter: [{ type: HostListener, args: [\"mouseenter\",] }],\n handleMouseLeave: [{ type: HostListener, args: [\"mouseleave\",] }],\n handleMousedown: [{ type: HostListener, args: [\"mousedown\", ['$event'],] }],\n handleClick: [{ type: HostListener, args: [\"click\",] }],\n keydown: [{ type: HostListener, args: [\"keydown\", [\"$event\"],] }],\n enter: [{ type: HostListener, args: [\"keydown.enter\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-multiviewcalendar',\n providers: [\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService\n ],\n selector: 'kendo-multiviewcalendar',\n template: `\n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc4.LocalizationService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: DisabledDatesService }]; }, { id: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesRangeValidation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], views: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: true }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: true }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: true }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: true }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: true }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: true }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: true }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], widgetRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], ariaActivedescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], \n /**\n * @hidden\n */\n handleBlur: [{\n type: HostListener,\n args: [\"blur\"]\n }], \n /**\n * @hidden\n */\n handleFocus: [{\n type: HostListener,\n args: [\"focus\"]\n }], \n /**\n * @hidden\n */\n handleMouseEnter: [{\n type: HostListener,\n args: [\"mouseenter\"]\n }], \n /**\n * @hidden\n */\n handleMouseLeave: [{\n type: HostListener,\n args: [\"mouseleave\"]\n }], \n /**\n * @hidden\n */\n handleMousedown: [{\n type: HostListener,\n args: [\"mousedown\", ['$event']]\n }], \n /**\n * @hidden\n */\n handleClick: [{\n type: HostListener,\n args: [\"click\"]\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: [\"keydown\", [\"$event\"]]\n }], \n /**\n * @hidden\n */\n enter: [{\n type: HostListener,\n args: [\"keydown.enter\"]\n }], activeRangeEnd: [{\n type: Input\n }], viewList: [{\n type: ViewChild,\n args: [HorizontalViewListComponent]\n }] }); })();\n\n/**\n * A directive which renders the content of the DateRange Popup. To define the cell template, nest an\n * `` tag with the `kendoRangePopupTemplate` directive inside the component tag.\n */\nclass DateRangePopupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDateRangePopupTemplateDirective.ɵfac = function DateRangePopupTemplateDirective_Factory(t) { return new (t || DateRangePopupTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nDateRangePopupTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangePopupTemplateDirective, selectors: [[\"\", \"kendoDateRangePopupTemplate\", \"\"]] });\n/** @nocollapse */\nDateRangePopupTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangePopupTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangePopupTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\nconst isActive = (cmp) => (cmp && cmp.isActive) || false;\nconst hasActiveContent = (popup) => popup && popup.hasActiveContent();\n/**\n * A service that handles the communication between the components that are placed inside the DateRangeComponent.\n * For example, the start and end `DateInput` and `DateRangePopup` components.\n */\nclass DateRangeService {\n constructor() {\n /**\n * An Observable instance that notifies when the `activeRangeEnd` state is changed.\n */\n this.activeRangeEnd$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `focusedDate` is changed.\n */\n this.focusedDate$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the end `DateInput` component is changed.\n * For example, when a new end `DateInput` is attached or when the old one is detached.\n */\n this.endInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the start `DateInput` component is changed.\n * For example, when a new start `DateInput` is attached or the old one is detached.\n */\n this.startInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `DateRangePopup` component is changed.\n */\n this.dateRangePopup$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the state of the selection range is changed.\n */\n this.range$ = new BehaviorSubject(EMPTY_SELECTIONRANGE);\n }\n /**\n * Gets the current `activeRangeEnd` value.\n */\n get activeRangeEnd() {\n return this.activeRangeEnd$.value;\n }\n /**\n * Gets the current `focusedDate` value.\n */\n get focusedDate() {\n return this.focusedDate$.value;\n }\n /**\n * Gets the `min` range value.\n * The `min` value is extracted from the `start` DateInput value or the `min` value of the Calendar.\n */\n get min() {\n return (this.startInput$.value || {}).min || null;\n }\n /**\n * Gets the `max` range value.\n * The `max` value is extracted from the `end` DateInput value or the `max` value of the Calendar.\n */\n get max() {\n return (this.endInput$.value || {}).max || null;\n }\n /**\n * Gets the current `selectionRange` value.\n */\n get selectionRange() {\n return this.range$.value;\n }\n /**\n * Activates the registered `DateRangePopup` component.\n * The method opens the popup and focuses the calendar.\n */\n activatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!dateRangePopup) {\n return;\n }\n dateRangePopup.activate();\n }\n /**\n * Deactivates the registered `DateRangePopup` component.\n * The method closes the popup.\n */\n deactivatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.show = false;\n }\n /**\n * @hidden\n *\n * Deactivates the registered `DateRangePopup` component and fires the `cancel` event.\n * The method closes the popup.\n */\n cancelPopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.cancelPopup();\n }\n /**\n * Completes all observables to mitigate possible memory leaks.\n * Calls the method when a component that uses it is destroyed.\n */\n destroy() {\n this.activeRangeEnd$.complete();\n this.dateRangePopup$.complete();\n this.focusedDate$.complete();\n this.endInput$.complete();\n this.startInput$.complete();\n this.range$.complete();\n }\n /**\n * Returns `true` when an active component that is placed inside the `DateRangeComponent` is detected.\n * For example, the opened popup or the focused DateInput.\n *\n * @returns `true` if an active component is present.\n */\n hasActiveComponent() {\n const popup = this.dateRangePopup$.value;\n const isPopup = isActive(popup);\n const isStart = isActive(this.startInput$.value);\n const isEnd = isActive(this.endInput$.value);\n return isPopup || isStart || isEnd || hasActiveContent(popup) || false;\n }\n /**\n * Registers a new start `DateInput` component. Notifies all `startInput$` listeners.\n */\n registerStartInput(startInput) {\n this.startInput$.next(startInput);\n }\n /**\n * Registers a new end `DateInput` component. Notifies all `endInput$` listeners.\n */\n registerEndInput(endInput) {\n this.endInput$.next(endInput);\n }\n /**\n * Registers a new `DateRangePopup` component. Notifies all `dateRangePopup$` listeners.\n */\n registerPopup(dateRangePopup) {\n this.dateRangePopup$.next(dateRangePopup);\n }\n /**\n * Updates the `activeRangeEnd` value. Notifies all `activeRangeEnd$` listeners.\n */\n setActiveRangeEnd(activeRange) {\n if (!activeRange || this.activeRangeEnd === activeRange) {\n return;\n }\n this.activeRangeEnd$.next(activeRange);\n }\n /**\n * Updates the focused date. Notifies all `focusedDate$` listeners.\n */\n setFocusedDate(value) {\n if (isEqual(this.focusedDate$.value, value)) {\n return;\n }\n this.focusedDate$.next(value);\n }\n /**\n * Updates the selection range. Notifies all `range$` listeners.\n */\n setRange(range = EMPTY_SELECTIONRANGE) {\n this.range$.next(range);\n }\n}\nDateRangeService.ɵfac = function DateRangeService_Factory(t) { return new (t || DateRangeService)(); };\nDateRangeService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DateRangeService, factory: DateRangeService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Represents the Kendo UI DateRangePopup component for Angular.\n *\n * @example\n * ```ts\n * import { DateInputsModule, DateRangeService } from '@progress/kendo-angular-dateinputs';\n *\n * _@Component({\n * providers: [DateRangeService],\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\nclass DateRangePopupComponent {\n constructor(popupService, dateRangeService, zone, rtl) {\n this.popupService = popupService;\n this.dateRangeService = dateRangeService;\n this.zone = zone;\n this.rtl = rtl;\n /**\n * Controls the popup animation.\n * By default, the opening and closing animations are enabled.\n * For more information about controlling the popup animations,\n * refer to the article on [animations]({% slug animations_popup %}).\n */\n this.animate = true;\n /**\n * Configures the collision behavior of the popup.\n * For more information, refer to the article on\n * [viewport boundary detection]({% slug viewportboundarydetection_popup %}).\n */\n this.collision = { horizontal: 'fit', vertical: 'flip' };\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the calendar element is blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the calendar element is focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is closed either on `ESC` keypress or on leaving the viewport.\n */\n this.cancel = new EventEmitter();\n /**\n * @hidden\n */\n this.popupUID = guid();\n this.calendarSubscriptions = new Subscription(() => { });\n this.popupSubscriptions = new Subscription(() => { });\n this.resolvedPromise = Promise.resolve();\n }\n /**\n * The active calendar that is visible in the popup.\n *\n * > When the popup is closed, the property returns `null`.\n */\n get calendar() {\n return this._calendar;\n }\n set calendar(calendar) {\n this._calendar = calendar;\n this.subscribeFocusBlur(calendar);\n }\n /**\n * Gets the active state of the component.\n * When the opened calendar is active, returns `true`.\n */\n get isActive() {\n return this.calendar && this.calendar.isActive;\n }\n /**\n * Gets or sets the visibility state of the component.\n */\n set show(show) {\n if (this._show === show) {\n return;\n }\n const event = new PreventableEvent();\n if (show) {\n this.open.emit(event);\n }\n else {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n }\n get show() {\n return this._show;\n }\n ngOnInit() {\n this.dateRangeService.registerPopup(this);\n }\n ngAfterViewInit() {\n this.calendarSubscriptions.add(this.contentCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n this.calendarSubscriptions.add(this.viewCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n if (isWindowAvailable()) {\n this.zone.runOutsideAngular(() => this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this)));\n }\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.calendarSubscriptions.unsubscribe();\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n }\n /**\n * Opens the popup component and focuses the calendar.\n */\n activate() {\n if (this.show === true) {\n return;\n }\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n this.show = true;\n this.zone.runOutsideAngular(() => {\n this.activateSubscription = merge(this.contentCalendar.changes, this.viewCalendar.changes)\n .pipe(filter(changes => changes && changes.first), map(changes => changes.first))\n .subscribe((calendar) => setTimeout(() => calendar.focus()));\n });\n }\n /**\n * Focuses the calendar (if available).\n */\n focus() {\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n /**\n * Checks if a focused element ids placed inside the popup.\n *\n * @return boolean;\n */\n hasActiveContent() {\n if (!isDocumentAvailable() || !this.popupRef) {\n return false;\n }\n return this.popupRef.popupElement.contains(document.activeElement);\n }\n /**\n * Toggles the visibility of the popup.\n * If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show The state of the popup.\n */\n toggle(show) {\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n *\n * Closes the popup and triggers the `cancel` event.\n */\n cancelPopup() {\n this.show = false;\n this.cancel.emit();\n }\n handleWindowBlur() {\n if (!this.show) {\n return;\n }\n if (hasObservers(this.close)) {\n this.zone.run(() => this.show = false);\n }\n else {\n this.show = false;\n }\n }\n handleMouseLeave() {\n this.dateRangeService.setRange(this.dateRangeService.selectionRange);\n }\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape || (altKey && keyCode === Keys.ArrowUp)) {\n this.zone.run(() => this.cancelPopup());\n }\n }\n subscribeFocusBlur(calendar) {\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (!calendar) {\n return;\n }\n const nativeElement = calendar.element.nativeElement;\n this.blurSubscription = fromEvent(nativeElement, 'blur').subscribe(() => this.onBlur.emit());\n this.focusSubscription = fromEvent(nativeElement, 'focus').subscribe(() => this.onFocus.emit());\n }\n addPopupSubscriptions(...subscriptions) {\n if (!isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions = new Subscription();\n }\n subscriptions.map(s => this.popupSubscriptions.add(s));\n }\n get _appendTo() {\n const appendTo = this.appendTo;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n _toggle(show) {\n this._show = show;\n if (this.popupRef) {\n this.destroyPopup();\n }\n if (this._show) {\n const direction = this.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.anchor,\n anchorAlign: this.anchorAlign || { vertical: 'bottom', horizontal: direction },\n animate: this.animate,\n appendTo: this._appendTo,\n collision: this.collision,\n content: (this.contentTemplate || {}).templateRef || this.defaultTemplate,\n margin: this.margin,\n popupAlign: this.popupAlign || { vertical: 'top', horizontal: direction },\n positionMode: 'absolute'\n });\n const { popupElement, popupAnchorViewportLeave } = this.popupRef;\n popupElement.setAttribute('id', this.popupUID);\n this.addPopupSubscriptions(this.zone.runOutsideAngular(() => fromEvent(popupElement, 'keydown').subscribe(this.handleKeydown.bind(this))), fromEvent(popupElement, 'mouseleave').subscribe(this.handleMouseLeave.bind(this)), popupAnchorViewportLeave.subscribe(() => this.cancelPopup()));\n }\n }\n destroyPopup() {\n if (isPresent(this.popupRef)) {\n this.popupRef.close();\n this.popupRef = null;\n }\n if (isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions.unsubscribe();\n }\n }\n}\nDateRangePopupComponent.ɵfac = function DateRangePopupComponent_Factory(t) { return new (t || DateRangePopupComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nDateRangePopupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateRangePopupComponent, selectors: [[\"kendo-daterange-popup\"]], contentQueries: function DateRangePopupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DateRangePopupTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MultiViewCalendarComponent, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentCalendar = _t);\n } }, viewQuery: function DateRangePopupComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c13, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c73, true);\n ɵngcc0.ɵɵviewQuery(MultiViewCalendarComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewCalendar = _t);\n } }, inputs: { animate: \"animate\", collision: \"collision\", anchor: \"anchor\", anchorAlign: \"anchorAlign\", appendTo: \"appendTo\", popupAlign: \"popupAlign\", margin: \"margin\" }, outputs: { open: \"open\", close: \"close\", onBlur: \"blur\", onFocus: \"focus\", cancel: \"cancel\" }, exportAs: [\"kendo-daterange-popup\"], decls: 4, vars: 0, consts: [[\"container\", \"\"], [\"defaultTemplate\", \"\"], [\"kendoDateRangeSelection\", \"\"]], template: function DateRangePopupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, null, 0);\n ɵngcc0.ɵɵtemplate(2, DateRangePopupComponent_ng_template_2_Template, 1, 0, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: function () { return [MultiViewCalendarComponent, DateRangeSelectionDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nDateRangePopupComponent.ctorParameters = () => [\n { type: PopupService },\n { type: DateRangeService },\n { type: NgZone },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nDateRangePopupComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n defaultTemplate: [{ type: ViewChild, args: ['defaultTemplate',] }],\n contentTemplate: [{ type: ContentChild, args: [DateRangePopupTemplateDirective,] }],\n viewCalendar: [{ type: ViewChildren, args: [MultiViewCalendarComponent,] }],\n contentCalendar: [{ type: ContentChildren, args: [MultiViewCalendarComponent,] }],\n animate: [{ type: Input }],\n anchor: [{ type: Input }],\n anchorAlign: [{ type: Input }],\n appendTo: [{ type: Input }],\n collision: [{ type: Input }],\n popupAlign: [{ type: Input }],\n margin: [{ type: Input }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onBlur: [{ type: Output, args: ['blur',] }],\n onFocus: [{ type: Output, args: ['focus',] }],\n cancel: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangePopupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendo-daterange-popup',\n selector: 'kendo-daterange-popup',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc5.PopupService }, { type: DateRangeService }, { type: ɵngcc0.NgZone }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { animate: [{\n type: Input\n }], collision: [{\n type: Input\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], cancel: [{\n type: Output\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], defaultTemplate: [{\n type: ViewChild,\n args: ['defaultTemplate']\n }], contentTemplate: [{\n type: ContentChild,\n args: [DateRangePopupTemplateDirective]\n }], viewCalendar: [{\n type: ViewChildren,\n args: [MultiViewCalendarComponent]\n }], contentCalendar: [{\n type: ContentChildren,\n args: [MultiViewCalendarComponent]\n }], anchor: [{\n type: Input\n }], anchorAlign: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], popupAlign: [{\n type: Input\n }], margin: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the Kendo UI DateRange component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public dateRange: any = { start: null, end: null };\n * }\n * ```\n */\nclass DateRangeComponent {\n constructor() {\n /**\n * @hidden\n */\n this.showDefault = false;\n }\n get hasContentPopup() {\n return this.contentPopup.length > 0;\n }\n ngAfterContentInit() {\n this.showDefault = !this.hasContentPopup;\n this.subscription = this.contentPopup.changes.subscribe(() => {\n this.showDefault = !this.hasContentPopup;\n });\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nDateRangeComponent.ɵfac = function DateRangeComponent_Factory(t) { return new (t || DateRangeComponent)(); };\nDateRangeComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateRangeComponent, selectors: [[\"kendo-daterange\"]], contentQueries: function DateRangeComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DateRangePopupComponent, false);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentPopup = _t);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([DateRangeService])], ngContentSelectors: _c0, decls: 2, vars: 1, consts: [[4, \"ngIf\"]], template: function DateRangeComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵtemplate(1, DateRangeComponent_kendo_daterange_popup_1_Template, 1, 0, \"kendo-daterange-popup\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showDefault);\n } }, directives: [ɵngcc2.NgIf, DateRangePopupComponent], encapsulation: 2 });\nDateRangeComponent.propDecorators = {\n contentPopup: [{ type: ContentChildren, args: [DateRangePopupComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeComponent, [{\n type: Component,\n args: [{\n providers: [DateRangeService],\n selector: 'kendo-daterange',\n template: `\n \n \n `\n }]\n }], function () { return []; }, { contentPopup: [{\n type: ContentChildren,\n args: [DateRangePopupComponent]\n }] }); })();\n\n/**\n * @hidden\n */\nclass DateRangeInput {\n constructor(activeRangeEnd, dateRangeService, input, element, renderer, zone) {\n this.activeRangeEnd = activeRangeEnd;\n this.dateRangeService = dateRangeService;\n this.input = input;\n this.element = element;\n this.renderer = renderer;\n this.zone = zone;\n this.navigateCalendarOnFocus = false;\n this.popupSubscriptions = new Subscription(() => { });\n this.subscriptions = new Subscription(() => { });\n }\n get isActiveEnd() {\n return this.dateRangeService.activeRangeEnd === this.activeRangeEnd;\n }\n get popupCalendarActivated() {\n const popup = this.dateRangeService.dateRangePopup$.value;\n return isPresent(popup) && isPresent(popup.calendar);\n }\n init() {\n if (this.input.value) {\n this.dateRangeService.setRange(this.getRange(this.input.value));\n }\n [\n this.input.onBlur.subscribe(() => this.deactivate()),\n this.input.onFocus.pipe(filter(() => !this.popupCalendarActivated)).subscribe(() => this.activate()),\n this.input.valueUpdate.subscribe(value => this.updateRange(value, 'change')),\n this.dateRangeService.activeRangeEnd$.subscribe(() => {\n if (this.navigateCalendarOnFocus) {\n this.focusActiveDate();\n }\n this.toggleActiveClass(this.isActiveEnd);\n }),\n this.dateRangeService.dateRangePopup$.subscribe(popup => this.initPopup(popup)),\n this.dateRangeService.range$.subscribe(range => this.updateInputValue(range)),\n fromEvent(this.element.nativeElement, 'click').subscribe(() => this.activate()),\n fromEvent(this.element.nativeElement, 'keydown').subscribe((event) => this.togglePopup(event || {}))\n ].map(s => this.subscriptions.add(s));\n }\n destroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribePopup();\n }\n initPopup(popup) {\n if (!popup) {\n this.unsubscribePopup();\n return;\n }\n if (!popup.anchor) {\n popup.anchor = this.element.nativeElement;\n }\n [\n popup.cancel.subscribe(() => this.isActiveEnd && this.input.focus()),\n popup.onFocus.subscribe(() => this.toggleActiveClass(this.isActiveEnd)),\n popup.onBlur.subscribe(() => this.deactivate())\n ].map(s => this.popupSubscriptions.add(s));\n }\n unsubscribePopup() {\n this.popupSubscriptions.unsubscribe();\n this.popupSubscriptions = new Subscription(() => { });\n }\n activate() {\n this.dateRangeService.setActiveRangeEnd(this.activeRangeEnd);\n this.dateRangeService.activatePopup();\n }\n deactivate() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.updateRange(this.input.value, 'blur');\n if (this.dateRangeService.hasActiveComponent()) {\n return;\n }\n this.toggleActiveClass(false);\n this.zone.run(() => this.dateRangeService.deactivatePopup());\n });\n });\n }\n updateRange(value, correctOn) {\n const range = this.getRange(value, correctOn);\n if (range) {\n this.focusActiveDate();\n this.dateRangeService.setRange(range);\n }\n }\n togglePopup({ altKey, keyCode }) {\n if (keyCode === Keys.Escape) {\n this.dateRangeService.cancelPopup();\n }\n else if (altKey && keyCode === Keys.ArrowDown) {\n this.dateRangeService.activatePopup();\n }\n }\n focusActiveDate() {\n if (this.input.value && this.isActiveEnd) {\n this.dateRangeService.setFocusedDate(cloneDate(this.input.value));\n }\n }\n toggleActiveClass(show) {\n const action = show ? 'addClass' : 'removeClass';\n const nativeElement = this.element.nativeElement;\n if (nativeElement && nativeElement.querySelector) {\n this.renderer[action](nativeElement.querySelector('.k-dateinput-wrap'), 'k-state-focused');\n }\n }\n}\n\n/**\n * A directive which manages the end range selection.\n *\n * > You can use the DateRangeEndInputDirective only with a DateInput component.\n */\nclass DateRangeEndInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('end', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus. When enabled,\n * the calendar navigates to the value of the focused input. Otherwise, the calendar displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    Toggle input focus to see the calendar navigating between range ends.
    \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerEndInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { start } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && isPresent(value) && value < start;\n return shouldClamp ? clampRange(value) : { start, end: cloneDate(value) };\n }\n updateInputValue(range$$1) {\n const { end } = range$$1 || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, end) || !isInRange(end, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(end));\n this.dateInput.notify();\n }\n}\nDateRangeEndInputDirective.ɵfac = function DateRangeEndInputDirective_Factory(t) { return new (t || DateRangeEndInputDirective)(ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(DateInputComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDateRangeEndInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeEndInputDirective, selectors: [[\"\", \"kendoDateRangeEndInput\", \"\"]], inputs: { navigateCalendarOnFocus: \"navigateCalendarOnFocus\", autoCorrectOn: \"autoCorrectOn\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateRangeEndInputDirective.ctorParameters = () => [\n { type: DateRangeService },\n { type: DateInputComponent },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nDateRangeEndInputDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n navigateCalendarOnFocus: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeEndInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeEndInput]'\n }]\n }], function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { navigateCalendarOnFocus: [{\n type: Input\n }], autoCorrectOn: [{\n type: Input\n }] }); })();\n\n/**\n * A directive which manages the start selection range.\n *\n * > You can use the DateRangeStartInputDirective only with a DateInput component.\n */\nclass DateRangeStartInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('start', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus.\n * When enabled, the calendar navigates to the value of the focused input. Otherwise, the calendar\n * displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
    Toggle input focus to see the calendar navigating between range ends.
    \n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerStartInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { end } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && end && value > end;\n return shouldClamp ? clampRange(value) : { start: cloneDate(value), end };\n }\n updateInputValue(range$$1) {\n const { start } = range$$1 || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, start) || !isInRange(start, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(start));\n this.dateInput.notify();\n }\n}\nDateRangeStartInputDirective.ɵfac = function DateRangeStartInputDirective_Factory(t) { return new (t || DateRangeStartInputDirective)(ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(DateInputComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDateRangeStartInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeStartInputDirective, selectors: [[\"\", \"kendoDateRangeStartInput\", \"\"]], inputs: { navigateCalendarOnFocus: \"navigateCalendarOnFocus\", autoCorrectOn: \"autoCorrectOn\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateRangeStartInputDirective.ctorParameters = () => [\n { type: DateRangeService },\n { type: DateInputComponent },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nDateRangeStartInputDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n navigateCalendarOnFocus: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeStartInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeStartInput]'\n }]\n }], function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { navigateCalendarOnFocus: [{\n type: Input\n }], autoCorrectOn: [{\n type: Input\n }] }); })();\n\n/**\n * A directive which manages the MultiViewCalendar range selection.\n */\nclass DateRangeSelectionDirective {\n constructor(calendar, cdr, element, renderer, dateRangeService) {\n this.calendar = calendar;\n this.cdr = cdr;\n this.element = element;\n this.dateRangeService = dateRangeService;\n /**\n * Specifies the auto-correction behavior. If the start date is greater than the end date,\n * the directive fixes the date range to a single date either on input change or on blur\n * ([see example]({% slug autocorrect_daterange %}#toc-configuring-the-calendar-selection-directive)).\n *\n * By default, the auto-correction is triggered on change.\n * To disable this behavior, set the `autoCorrectOn` property to `none`.\n */\n this.autoCorrectOn = 'change';\n /**\n * Fires when the active range end is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.activeRangeEndChange = new EventEmitter();\n /**\n * Fires when the selection range is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.selectionRangeChange = new EventEmitter();\n this.calendarSubscriptions = new Subscription(() => { });\n this.dateRangeService = this.dateRangeService || new DateRangeService();\n renderer.setAttribute(element.nativeElement, 'aria-multiselectable', 'true');\n }\n /**\n * Gets or sets the selection range of the calendar. When a new range is set,\n * the connected DateRangeService notifies all related parties.\n */\n get selectionRange() {\n return this.calendar ? this.calendar.selectionRange : null;\n }\n set selectionRange(range$$1) {\n if (!this.isEqualCalendarRange(range$$1)) {\n this.setSelectionRange(range$$1);\n }\n if (!isEqualRange(this.dateRangeService.selectionRange, range$$1)) {\n this.dateRangeService.setRange(range$$1);\n }\n this.updateFocusedDate(range$$1);\n }\n /**\n * Gets or sets the active end of the selection range. This option determines which range end will be updated on\n * user interaction. When a new active end is set, the connected DateRangeService notifies all related parties.\n */\n /**\n * Specifies which end of the selection range will be marked as active. The active end gets modified upon user\n * interaction. When a new active end is set, the wired DateRangeService notifies all related components. For\n * example, the start and end DateInput components.\n *\n * > If the selection range is undefined, the value is ignored.\n */\n get activeRangeEnd() {\n return this.calendar.activeRangeEnd;\n }\n set activeRangeEnd(activeRange) {\n if (this.dateRangeService.activeRangeEnd === activeRange) {\n return;\n }\n this.calendar.activeRangeEnd = activeRange;\n this.dateRangeService.setActiveRangeEnd(activeRange);\n }\n get calendarRange() {\n return this.selectionRange || EMPTY_SELECTIONRANGE;\n }\n ngOnInit() {\n const calendar = this.calendar;\n const dateRangeService = this.dateRangeService;\n calendar.min = either(dateRangeService.min, calendar.min);\n calendar.max = either(dateRangeService.max, calendar.max);\n this.addSubscriptions(calendar.cellEnter.subscribe((value) => this.handleHover(value)), calendar.valueChange.subscribe((value) => this.handleChange(value)), dateRangeService.focusedDate$.subscribe(focusedDate => {\n if (!isEqual(calendar.focusedDate, focusedDate)) {\n calendar.focusedDate = focusedDate;\n }\n }), dateRangeService.activeRangeEnd$.subscribe(rangeEnd => {\n if (calendar.activeRangeEnd === rangeEnd) {\n return;\n }\n calendar.activeRangeEnd = rangeEnd;\n this.activeRangeEndChange.emit(rangeEnd);\n this.cdr.markForCheck();\n }), dateRangeService.range$.subscribe(range$$1 => {\n if (!this.isEqualCalendarRange(range$$1)) {\n this.acceptAndEmit(range$$1);\n }\n this.updateFocusedDate(range$$1);\n }), fromEvent(this.element.nativeElement, 'blur').subscribe(() => this.handleBlur()));\n }\n ngOnDestroy() {\n this.calendarSubscriptions.unsubscribe();\n }\n addSubscriptions(...subscriptions) {\n subscriptions.map(s => this.calendarSubscriptions.add(s));\n }\n isEqualCalendarRange(range$$1) {\n return isEqualRange(this.calendar.selectionRange, range$$1);\n }\n handleBlur() {\n const { start, end } = this.calendarRange;\n const autoCorrect = this.autoCorrectOn === 'blur' && start !== null && end !== null && end < start;\n if (autoCorrect) {\n this.dateRangeService.setRange(clampRange(start));\n }\n }\n handleChange(value) {\n const service = this.dateRangeService;\n const autoCorrect = this.autoCorrectOn === 'change' && this.shouldAutoCorrect(value);\n const activeEnd = this.calendar.activeRangeEnd !== 'end' ? 'end' : (autoCorrect ? 'end' : 'start');\n const range$$1 = autoCorrect ? clampRange(value) : this.updateRange(value);\n if (!isEqualRange(service.selectionRange, range$$1)) {\n this.acceptAndEmit(range$$1);\n service.setActiveRangeEnd(activeEnd);\n service.setRange(range$$1);\n }\n }\n handleHover(value) {\n if (this.hasCompleteRange()) {\n return;\n }\n const { start, end } = this.calendarRange;\n const activeRangeEnd = this.calendar.activeRangeEnd;\n const updateRange = (start && activeRangeEnd === 'end') || (end && activeRangeEnd === 'start');\n if (updateRange) {\n this.setSelectionRange(this.updateRange(value));\n }\n }\n hasCompleteRange() {\n const { start, end } = this.dateRangeService.selectionRange || EMPTY_SELECTIONRANGE;\n return Boolean(start) && Boolean(end);\n }\n shouldAutoCorrect(value) {\n const { end, start } = this.calendarRange;\n if (this.calendar.activeRangeEnd !== 'end') {\n return end !== null && value > end;\n }\n else {\n return start !== null && value < start;\n }\n }\n updateFocusedDate(range$$1) {\n if (!range$$1 || this.dateRangeService.focusedDate) {\n return;\n }\n this.dateRangeService.setFocusedDate(range$$1.start || range$$1.end);\n }\n updateRange(value) {\n const { end, start } = this.calendarRange;\n return this.calendar.activeRangeEnd !== 'end' ? ({ start: value, end }) : ({ start, end: value });\n }\n setSelectionRange(range$$1) {\n this.calendar.selectionRange = range$$1;\n this.calendar.writeValue(null);\n }\n acceptAndEmit(range$$1) {\n this.setSelectionRange(range$$1);\n this.selectionRangeChange.emit(range$$1);\n }\n}\nDateRangeSelectionDirective.ɵfac = function DateRangeSelectionDirective_Factory(t) { return new (t || DateRangeSelectionDirective)(ɵngcc0.ɵɵdirectiveInject(MultiViewCalendarComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DateRangeService, 8)); };\nDateRangeSelectionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeSelectionDirective, selectors: [[\"\", \"kendoDateRangeSelection\", \"\"]], inputs: { autoCorrectOn: \"autoCorrectOn\", selectionRange: \"selectionRange\", activeRangeEnd: \"activeRangeEnd\" }, outputs: { activeRangeEndChange: \"activeRangeEndChange\", selectionRangeChange: \"selectionRangeChange\" } });\n/** @nocollapse */\nDateRangeSelectionDirective.ctorParameters = () => [\n { type: MultiViewCalendarComponent },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: Renderer2 },\n { type: DateRangeService, decorators: [{ type: Optional }] }\n];\nDateRangeSelectionDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n selectionRange: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n activeRangeEndChange: [{ type: Output }],\n selectionRangeChange: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeSelectionDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeSelection]'\n }]\n }], function () { return [{ type: MultiViewCalendarComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DateRangeService, decorators: [{\n type: Optional\n }] }]; }, { autoCorrectOn: [{\n type: Input\n }], activeRangeEndChange: [{\n type: Output\n }], selectionRangeChange: [{\n type: Output\n }], selectionRange: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:directive-class-suffix directive-selector */\n/**\n * @hidden\n */\nclass KForOfContext {\n constructor($implicit, kForOf, index, count) {\n this.$implicit = $implicit;\n this.kForOf = kForOf;\n this.index = index;\n this.count = count;\n }\n get first() { return this.index === 0; }\n get last() { return this.index === this.count - 1; }\n get even() { return this.index % 2 === 0; }\n get odd() { return !this.even; }\n}\n/**\n * @hidden\n */\nclass KForOf {\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._differ = null;\n }\n set kForTemplate(value) {\n if (value) {\n this._template = value;\n }\n }\n ngOnChanges(changes) {\n if ('kForOf' in changes) {\n const value = changes.kForOf.currentValue;\n if (this._differ || !value) {\n return;\n }\n try {\n this._differ = this._differs.find(value).create(this.kForTrackBy);\n }\n catch (e) {\n throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'.`);\n }\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.kForOf);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _applyChanges(changes) {\n if (!isDocumentAvailable()) {\n return;\n }\n const viewContainerLength = this._viewContainer.length;\n const dataLength = this.kForOf.length;\n const tuples = {};\n changes.forEachOperation((record, _, currentIndex) => {\n if (currentIndex !== null) {\n tuples[currentIndex] = record.item;\n }\n });\n for (let i = viewContainerLength; i < dataLength; i++) {\n this._viewContainer.createEmbeddedView(this._template, new KForOfContext(null, this.kForOf, -1, -1), i);\n }\n for (let i = this._viewContainer.length; i > dataLength; i--) {\n this._viewContainer.remove(i - 1);\n }\n for (let i = 0; i < this._viewContainer.length; i++) {\n const view = this._viewContainer.get(i);\n view.context.index = i;\n view.context.count = length;\n view.context.$implicit = tuples[i] || null;\n }\n }\n}\nKForOf.ɵfac = function KForOf_Factory(t) { return new (t || KForOf)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers)); };\nKForOf.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: KForOf, selectors: [[\"\", \"kFor\", \"\", \"kForOf\", \"\"]], inputs: { kForTemplate: \"kForTemplate\", kForOf: \"kForOf\", kForTrackBy: \"kForTrackBy\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nKForOf.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: TemplateRef },\n { type: IterableDiffers }\n];\nKForOf.propDecorators = {\n kForOf: [{ type: Input }],\n kForTrackBy: [{ type: Input }],\n kForTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(KForOf, [{\n type: Directive,\n args: [{ selector: '[kFor][kForOf]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }]; }, { kForTemplate: [{\n type: Input\n }], kForOf: [{\n type: Input\n }], kForTrackBy: [{\n type: Input\n }] }); })();\n/**\n * @hidden\n */\nfunction getTypeNameForDebugging(type) {\n return type.name || typeof type;\n}\n\n/**\n * @hidden\n */\nclass HeaderComponent {\n constructor(bus, cdr, localization, intl, disabledDatesService) {\n this.bus = bus;\n this.cdr = cdr;\n this.localization = localization;\n this.intl = intl;\n this.disabledDatesService = disabledDatesService;\n this.navigate = true;\n this.todayAvailable = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.rangeLength = 1;\n this.today = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n get getComponentClass() {\n return true;\n }\n ngOnInit() {\n this.subscriptions\n .add(this.intl.changes.subscribe(this.intlChange.bind(this)))\n .add(this.localization.changes.subscribe(this.l10nChange.bind(this)))\n .add(this.disabledDatesService.changes.subscribe(this.setTodayAvailability.bind(this)));\n }\n ngOnChanges(_) {\n const service = this.bus.service(this.activeView);\n if (!service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n this.todayMessage = this.localization.get('today');\n this.setTodayAvailability();\n this.navigate = this.bus.canMoveUp(this.activeView);\n this.title = this.getTitle();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n handleTodayClick() {\n if (!this.todayAvailable) {\n return;\n }\n this.bus.moveToBottom(this.activeView);\n this.today.emit(dateInRange(getToday(), this.min, this.max));\n }\n handleNavigation() {\n if (!this.navigate) {\n return;\n }\n this.bus.moveUp(this.activeView);\n }\n intlChange() {\n if (this.currentDate && this.bus.service(this.activeView)) {\n this.title = this.getTitle();\n this.cdr.markForCheck();\n }\n }\n l10nChange() {\n this.todayMessage = this.localization.get('today');\n this.cdr.markForCheck();\n }\n getTitle() {\n if (!this.currentDate) {\n return '';\n }\n const service = this.bus.service(this.activeView);\n const take = this.rangeLength - 1;\n const title = service.title(this.currentDate);\n const nextDate = service.addToDate(this.currentDate, take);\n if (take < 1 || !service.isInRange(nextDate, this.min, this.max)) {\n return title;\n }\n return `${title} - ${service.title(nextDate)}`;\n }\n setTodayAvailability() {\n const today = getToday();\n const isTodayInRange = isInRange(today, getDate(this.min), getDate(this.max));\n const isDisabled = this.disabledDatesService.isDateDisabled(today);\n this.todayAvailable = isTodayInRange && !isDisabled;\n this.cdr.markForCheck();\n }\n}\nHeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HeaderComponent, selectors: [[\"kendo-calendar-header\"]], hostVars: 2, hostBindings: function HeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-header\", ctx.getComponentClass);\n } }, inputs: { min: \"min\", max: \"max\", rangeLength: \"rangeLength\", activeView: \"activeView\", currentDate: \"currentDate\", templateRef: \"templateRef\" }, outputs: { today: \"today\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 21, consts: [[1, \"k-button\", \"k-bare\", \"k-title\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [3, \"ngIf\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"k-today\", 3, \"kendoEventsOutsideAngular\", \"scope\"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_1_Template, 1, 1, \"ng-template\", 1);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", !ctx.navigate);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(13, _c3, ctx.handleNavigation))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.templateRef)(\"ngTemplateOutlet\", ctx.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(15, _c2, ctx.title, ctx.activeViewValue, ctx.currentDate));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", !ctx.todayAvailable);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(19, _c3, ctx.handleTodayClick))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.todayMessage, \" \");\n } }, directives: [ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nHeaderComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef },\n { type: LocalizationService },\n { type: IntlService },\n { type: DisabledDatesService }\n];\nHeaderComponent.propDecorators = {\n activeView: [{ type: Input }],\n currentDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeLength: [{ type: Input }],\n templateRef: [{ type: Input }],\n today: [{ type: Output }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-header\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-calendar-header',\n template: `\n \n {{title}}\n
    \n \n \n {{todayMessage}}\n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc1.IntlService }, { type: DisabledDatesService }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeLength: [{\n type: Input\n }], today: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-header\"]\n }], activeView: [{\n type: Input\n }], currentDate: [{\n type: Input\n }], templateRef: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass WeekNamesService {\n constructor(intl) {\n this.intl = intl;\n }\n getWeekNames(includeWeekNumber = false) {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return includeWeekNumber ? [''].concat(weekNames) : weekNames;\n }\n}\nWeekNamesService.ɵfac = function WeekNamesService_Factory(t) { return new (t || WeekNamesService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nWeekNamesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: WeekNamesService, factory: WeekNamesService.ɵfac });\n/** @nocollapse */\nWeekNamesService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WeekNamesService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ViewComponent {\n constructor(bus, intl, cdr, weekService, element, zone, renderer, disabledDatesService) {\n this.bus = bus;\n this.intl = intl;\n this.cdr = cdr;\n this.weekService = weekService;\n this.element = element;\n this.zone = zone;\n this.renderer = renderer;\n this.disabledDatesService = disabledDatesService;\n this.direction = 'vertical';\n this.isActive = true;\n this.change = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.weekNames = [];\n this.colSpan = 0;\n this.subscriptions = new Subscription();\n this.domEvents = [];\n this.subscriptions\n .add(this.intl.changes.subscribe(this.intlChange.bind(this)))\n .add(this.disabledDatesService.changes.subscribe(this.disabledDatesChange.bind(this)));\n }\n get weekNumber() {\n return this.showWeekNumbers && this.activeView === CalendarViewEnum.month;\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n ngOnInit() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n const generateWeekNames = this.isHorizontal() && this.weekNames.length === 0;\n if (generateWeekNames && (changes.weekNumber || changes.direction)) {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n }\n this.colSpan = this.service.rowLength(this.weekNumber);\n this.title = this.service.title(this.viewDate);\n this.updateData();\n if (changes.activeView) {\n this.currentCellIndex = null;\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.domEvents.forEach(unsubscribeCallback => unsubscribeCallback());\n }\n isHorizontal() {\n return this.direction === 'horizontal';\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n firstDate(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n return ctx ? ctx.value : null;\n }\n getWeekNumber(date) {\n if (!this.weekNumber) {\n return null;\n }\n return weekInYear(date, this.intl.firstDay());\n }\n getWeekNumberContext(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n if (!this.weekNumber || !ctx) {\n return null;\n }\n const weekNumber = weekInYear(ctx.value, this.intl.firstDay()).toString();\n return {\n formattedValue: weekNumber,\n id: null,\n isFocused: false,\n isSelected: false,\n isWeekend: false,\n title: weekNumber,\n value: cloneDate(ctx.value)\n };\n }\n getStyles(context) {\n const { isRangeEnd, isRangeStart } = context;\n const isEndActive = this.activeRangeEnd === 'end' && isRangeEnd;\n const isStartActive = this.activeRangeEnd === 'start' && isRangeStart;\n return stringifyClassObject({\n 'k-range-end': isRangeEnd,\n 'k-range-mid': context.isRangeMid,\n 'k-range-split-end': context.isRangeSplitEnd,\n 'k-range-split-start': context.isRangeSplitStart,\n 'k-range-start': isRangeStart,\n 'k-state-active': isStartActive || isEndActive,\n 'k-state-focused': this.isActive && context.isFocused,\n 'k-state-selected': context.isSelected || isRangeStart || isRangeEnd,\n 'k-today': context.isToday,\n 'k-weekend': context.isWeekend,\n 'k-state-disabled': context.isDisabled\n });\n }\n tableCellIndex(rowIndex, cellIndex) {\n return `${rowIndex}:${cellIndex}`;\n }\n firstWeekDateContext(rowCtx) {\n if (!this.weekNumber) {\n return null;\n }\n let idx = 0;\n let ctx = rowCtx[idx];\n while (!ctx && idx < rowCtx.length) {\n ctx = rowCtx[++idx];\n }\n return ctx;\n }\n updateData() {\n const time = this.selectedDate || getToday();\n const viewDate = setTime(this.viewDate, time);\n this.data = this.service.data({\n cellUID: this.cellUID,\n focusedDate: this.focusedDate,\n isActiveView: !this.bus.canMoveDown(this.activeView),\n max: this.max,\n min: this.min,\n selectedDate: this.selectedDate,\n selectionRange: this.selectionRange,\n viewDate: viewDate,\n isDateDisabled: this.disabledDatesService.isDateDisabled\n });\n }\n intlChange() {\n this.updateData();\n if (this.isHorizontal()) {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n }\n this.cdr.markForCheck();\n }\n disabledDatesChange() {\n this.updateData();\n this.cdr.markForCheck();\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', this.cellMouseoverHandler.bind(this)), this.renderer.listen(element, 'mouseleave', this.mouseLeaveHandler.bind(this)), this.renderer.listen(element, 'click', this.clickHandler.bind(this)));\n }\n clickHandler(args) {\n const cell = this.closestCell(args);\n if (cell) {\n const index = cell.getAttribute('data-cell-index');\n const cellContext = this.cellByIndex(index);\n if (!cellContext.isDisabled) {\n this.change.emit(cellContext.value);\n }\n }\n }\n mouseLeaveHandler() {\n if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n cellMouseoverHandler(args) {\n const cell = this.closestCell(args);\n if (cell) {\n const index = cell.getAttribute('data-cell-index');\n if (this.currentCellIndex && this.currentCellIndex !== index) {\n this.emitCellLeave();\n }\n const value = this.cellByIndex(index).value;\n this.cellEnter.emit(value);\n this.currentCellIndex = index;\n }\n else if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n closestCell(eventArgs) {\n return closestInScope(eventArgs.target, node => node.hasAttribute('data-cell-index'), this.element.nativeElement);\n }\n emitCellLeave() {\n const item = this.cellByIndex(this.currentCellIndex);\n if (item) {\n this.cellLeave.emit(item.value);\n }\n this.currentCellIndex = null;\n }\n cellByIndex(index) {\n const [rowIndex, cellIndex] = index.split(':');\n return this.data[rowIndex][cellIndex];\n }\n}\nViewComponent.ɵfac = function ViewComponent_Factory(t) { return new (t || ViewComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(WeekNamesService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nViewComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ViewComponent, selectors: [[\"\", \"kendoCalendarView\", \"\"]], inputs: { direction: \"direction\", isActive: \"isActive\", weekNumber: \"weekNumber\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", selectedDate: \"selectedDate\", viewDate: \"viewDate\", activeRangeEnd: \"activeRangeEnd\", selectionRange: \"selectionRange\", min: \"min\", max: \"max\", viewIndex: \"viewIndex\", templateRef: \"templateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\" }, outputs: { change: \"change\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c74, decls: 5, vars: 3, consts: [[\"emptyCell\", \"\"], [\"role\", \"row\", 4, \"ngIf\"], [\"role\", \"row\", 4, \"kFor\", \"kForOf\"], [1, \"k-empty\"], [\"role\", \"row\"], [\"scope\", \"col\", 3, \"colSpan\"], [4, \"ngFor\", \"ngForOf\"], [3, \"ngIf\"], [4, \"kFor\", \"kForOf\"], [\"class\", \"k-alt\", 4, \"ngIf\", \"ngIfElse\"], [1, \"k-alt\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"role\", \"gridcell\", 3, \"ngClass\", \"title\", 4, \"ngIf\", \"ngIfElse\"], [\"role\", \"gridcell\", 3, \"ngClass\", \"title\"], [1, \"k-link\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function ViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_ng_template_0_Template, 2, 0, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_2_Template, 3, 2, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(3, ViewComponent_tr_3_Template, 2, 1, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(4, ViewComponent_tr_4_Template, 3, 2, \"tr\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.isHorizontal());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isMonthView() && ctx.isHorizontal());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.data);\n } }, directives: [ɵngcc2.NgIf, KForOf, ɵngcc2.NgForOf, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgClass], encapsulation: 2 });\n/** @nocollapse */\nViewComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: WeekNamesService },\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 },\n { type: DisabledDatesService }\n];\nViewComponent.propDecorators = {\n direction: [{ type: Input }],\n isActive: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n selectedDate: [{ type: Input }],\n viewDate: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n selectionRange: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n weekNumber: [{ type: Input }],\n viewIndex: [{ type: Input }],\n templateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n change: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ViewComponent, [{\n type: Component,\n args: [{\n selector: '[kendoCalendarView]',\n template: `\n  \n {{title}}\n \n {{name}}\n \n \n \n \n \n {{getWeekNumber(firstDate(row))}}\n \n \n \n \n \n \n \n {{cell.formattedValue}}\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: WeekNamesService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: DisabledDatesService }]; }, { direction: [{\n type: Input\n }], isActive: [{\n type: Input\n }], change: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], viewIndex: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `HeaderComponent`—The component that renders the UI for vertical navigation.\n * - `ViewComponent`—The component that renders the active Calendar view.\n */\nclass CalendarCommonModule {\n}\nCalendarCommonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarCommonModule });\nCalendarCommonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarCommonModule_Factory(t) { return new (t || CalendarCommonModule)(); }, imports: [[CommonModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarCommonModule, { declarations: function () { return [KForOf, HeaderComponent, ViewComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [KForOf, HeaderComponent, ViewComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarCommonModule, [{\n type: NgModule,\n args: [{\n declarations: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n exports: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n */\nclass TemplatesModule {\n}\nTemplatesModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TemplatesModule });\nTemplatesModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TemplatesModule_Factory(t) { return new (t || TemplatesModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TemplatesModule, { declarations: [CellTemplateDirective, MonthCellTemplateDirective, YearCellTemplateDirective, DecadeCellTemplateDirective, CenturyCellTemplateDirective, WeekNumberCellTemplateDirective, HeaderTitleTemplateDirective, NavigationItemTemplateDirective], exports: [CellTemplateDirective, MonthCellTemplateDirective, YearCellTemplateDirective, DecadeCellTemplateDirective, CenturyCellTemplateDirective, WeekNumberCellTemplateDirective, HeaderTitleTemplateDirective, NavigationItemTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplatesModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ],\n exports: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass CalendarMessages extends ComponentMessages {\n}\nCalendarMessages.ɵfac = function CalendarMessages_Factory(t) { return ɵCalendarMessages_BaseFactory(t || CalendarMessages); };\nCalendarMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CalendarMessages, inputs: { today: \"today\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCalendarMessages.propDecorators = {\n today: [{ type: Input }]\n};\nconst ɵCalendarMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(CalendarMessages);\n\n/**\n * @hidden\n */\nclass CalendarLocalizedMessagesDirective extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nCalendarLocalizedMessagesDirective.ɵfac = function CalendarLocalizedMessagesDirective_Factory(t) { return new (t || CalendarLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nCalendarLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CalendarLocalizedMessagesDirective, selectors: [[\"\", \"kendoCalendarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nCalendarLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoCalendarLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass CalendarCustomMessagesComponent extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCalendarCustomMessagesComponent.ɵfac = function CalendarCustomMessagesComponent_Factory(t) { return new (t || CalendarCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nCalendarCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CalendarCustomMessagesComponent, selectors: [[\"kendo-calendar-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CalendarCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCalendarCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-calendar-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES = [\n VirtualizationComponent\n];\n/**\n * @hidden\n *\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Virtualization component.\n */\nclass VirtualizationModule {\n}\nVirtualizationModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: VirtualizationModule });\nVirtualizationModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function VirtualizationModule_Factory(t) { return new (t || VirtualizationModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(VirtualizationModule, { declarations: function () { return [VirtualizationComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [VirtualizationComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(VirtualizationModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendar module\n * import { CalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarModule], // import Calendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarModule {\n}\nCalendarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarModule });\nCalendarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarModule_Factory(t) { return new (t || CalendarModule)(); }, providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ], CalendarCommonModule, TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarModule, { declarations: function () { return [CalendarComponent, NavigationComponent, CalendarCustomMessagesComponent, CalendarLocalizedMessagesDirective, ViewListComponent]; }, imports: function () { return [CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, VirtualizationModule, EventsModule,\n ResizeSensorModule]; }, exports: function () { return [CalendarComponent, NavigationComponent, CalendarCustomMessagesComponent, CalendarLocalizedMessagesDirective, ViewListComponent, CalendarCommonModule, TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent\n ],\n exports: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ],\n providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { today: \"today\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n today: [{ type: Input }],\n prevButtonTitle: [{ type: Input }],\n nextButtonTitle: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass MultiViewCalendarLocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nMultiViewCalendarLocalizedMessagesDirective.ɵfac = function MultiViewCalendarLocalizedMessagesDirective_Factory(t) { return new (t || MultiViewCalendarLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nMultiViewCalendarLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MultiViewCalendarLocalizedMessagesDirective, selectors: [[\"\", \"kendoMultiViewCalendarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nMultiViewCalendarLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoMultiViewCalendarLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass MultiViewCalendarCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nMultiViewCalendarCustomMessagesComponent.ɵfac = function MultiViewCalendarCustomMessagesComponent_Factory(t) { return new (t || MultiViewCalendarCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nMultiViewCalendarCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MultiViewCalendarCustomMessagesComponent, selectors: [[\"kendo-multiviewcalendar-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function MultiViewCalendarCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nMultiViewCalendarCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-multiviewcalendar-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MultiViewCalendar module\n * import { MultiViewCalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MultiViewCalendarModule], // import MultiViewCalendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n */\nclass MultiViewCalendarModule {\n}\nMultiViewCalendarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MultiViewCalendarModule });\nMultiViewCalendarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MultiViewCalendarModule_Factory(t) { return new (t || MultiViewCalendarModule)(); }, providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, PopupModule], CalendarCommonModule, TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MultiViewCalendarModule, { declarations: function () { return [HorizontalViewListComponent, MultiViewCalendarLocalizedMessagesDirective, MultiViewCalendarCustomMessagesComponent, MultiViewCalendarComponent]; }, imports: function () { return [CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, PopupModule]; }, exports: function () { return [HorizontalViewListComponent, MultiViewCalendarLocalizedMessagesDirective, MultiViewCalendarCustomMessagesComponent, MultiViewCalendarComponent, CalendarCommonModule, TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarModule, [{\n type: NgModule,\n args: [{\n declarations: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent\n ],\n exports: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, PopupModule],\n providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }], null, null); })();\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CalendarModule`—The calendar module.\n * - `MultiViewCalendarModule`—The multi-view calendar module.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendars module\n * import { CalendarsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarsModule], // import the Calendars module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarsModule {\n}\nCalendarsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarsModule });\nCalendarsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarsModule_Factory(t) { return new (t || CalendarsModule)(); }, imports: [[\n CalendarModule,\n MultiViewCalendarModule\n ], CalendarModule, MultiViewCalendarModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarsModule, { imports: [CalendarModule, MultiViewCalendarModule], exports: [CalendarModule, MultiViewCalendarModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarsModule, [{\n type: NgModule,\n args: [{\n exports: [\n CalendarModule,\n MultiViewCalendarModule\n ],\n imports: [\n CalendarModule,\n MultiViewCalendarModule\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass DateInputMessages extends ComponentMessages {\n}\nDateInputMessages.ɵfac = function DateInputMessages_Factory(t) { return ɵDateInputMessages_BaseFactory(t || DateInputMessages); };\nDateInputMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateInputMessages, inputs: { decrement: \"decrement\", increment: \"increment\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDateInputMessages.propDecorators = {\n decrement: [{ type: Input }],\n increment: [{ type: Input }]\n};\nconst ɵDateInputMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DateInputMessages);\n\n/**\n * @hidden\n */\nclass DateInputLocalizedMessagesDirective extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDateInputLocalizedMessagesDirective.ɵfac = function DateInputLocalizedMessagesDirective_Factory(t) { return new (t || DateInputLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateInputLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateInputLocalizedMessagesDirective, selectors: [[\"\", \"kendoDateInputLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateInputLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoDateInputLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateInputCustomMessagesComponent extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateInputCustomMessagesComponent.ɵfac = function DateInputCustomMessagesComponent_Factory(t) { return new (t || DateInputCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateInputCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateInputCustomMessagesComponent, selectors: [[\"kendo-dateinput-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DateInputCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDateInputCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-dateinput-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateInput component.\n */\nclass DateInputModule {\n}\nDateInputModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateInputModule });\nDateInputModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateInputModule_Factory(t) { return new (t || DateInputModule)(); }, imports: [[CommonModule, IntlModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateInputModule, { declarations: function () { return [DateInputComponent, DateInputCustomMessagesComponent, DateInputLocalizedMessagesDirective]; }, imports: function () { return [CommonModule, IntlModule, EventsModule]; }, exports: function () { return [DateInputComponent, DateInputCustomMessagesComponent, DateInputLocalizedMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputModule, [{\n type: NgModule,\n args: [{\n declarations: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n exports: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n imports: [CommonModule, IntlModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass DatePickerMessages extends ComponentMessages {\n}\nDatePickerMessages.ɵfac = function DatePickerMessages_Factory(t) { return ɵDatePickerMessages_BaseFactory(t || DatePickerMessages); };\nDatePickerMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DatePickerMessages, inputs: { today: \"today\", toggle: \"toggle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDatePickerMessages.propDecorators = {\n today: [{ type: Input }],\n toggle: [{ type: Input }]\n};\nconst ɵDatePickerMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(DatePickerMessages);\n\n/**\n * @hidden\n */\nclass DatePickerLocalizedMessagesDirective extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDatePickerLocalizedMessagesDirective.ɵfac = function DatePickerLocalizedMessagesDirective_Factory(t) { return new (t || DatePickerLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDatePickerLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DatePickerLocalizedMessagesDirective, selectors: [[\"\", \"kendoDatePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDatePickerLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoDatePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DatePickerCustomMessagesComponent extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDatePickerCustomMessagesComponent.ɵfac = function DatePickerCustomMessagesComponent_Factory(t) { return new (t || DatePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDatePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DatePickerCustomMessagesComponent, selectors: [[\"kendo-datepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DatePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDatePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-datepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst ɵ0$e = touchEnabled;\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DatePicker component.\n */\nclass DatePickerModule {\n}\nDatePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DatePickerModule });\nDatePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DatePickerModule_Factory(t) { return new (t || DatePickerModule)(); }, providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$e }], imports: [[\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ], TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DatePickerModule, { declarations: function () { return [DatePickerComponent, DatePickerCustomMessagesComponent, DatePickerLocalizedMessagesDirective]; }, imports: function () { return [CommonModule, DateInputModule, CalendarModule, IntlModule,\n PopupModule, TemplatesModule, EventsModule]; }, exports: function () { return [DatePickerComponent, DatePickerCustomMessagesComponent, DatePickerLocalizedMessagesDirective, TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective\n ],\n exports: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ],\n providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$e }]\n }]\n }], null, null); })();\n\nconst COMPONENT_DIRECTIVES$1 = [\n DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective\n];\nconst COMPONENT_MODULES = [\n MultiViewCalendarModule,\n DateInputModule,\n PopupModule,\n EventsModule\n];\n/**\n * The exported package module.\n *\n * The package exports:\n * - `DateRangeComponent`—The DateRange component class.\n * - `DateRangePopupComponent`—The DateRangePopup component class.\n * - `DateRangeSelectionDirective`—The MultiviewCalendar date range selection directive.\n * - `DateRangeEndInputDirective`—The end DateInput date range selection directive.\n * - `DateRangeStartInputDirective`—The start DateInput date range selection directive.\n * - `DateRangePopupTemplateDirective`—The DateRangePopup content template directive.\n * - `MultiViewCalendarModule`—The MultiViewCalendar module.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the DateRange module\n * import { DateRangeModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, DateRangeModule], // import DateRange module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateRangeModule {\n}\nDateRangeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateRangeModule });\nDateRangeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateRangeModule_Factory(t) { return new (t || DateRangeModule)(); }, imports: [[CommonModule, COMPONENT_MODULES]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateRangeModule, { declarations: function () { return [DateRangeComponent, DateRangePopupComponent, DateRangePopupTemplateDirective, DateRangeSelectionDirective, DateRangeStartInputDirective, DateRangeEndInputDirective]; }, imports: function () { return [CommonModule, MultiViewCalendarModule, DateInputModule, PopupModule,\n EventsModule]; }, exports: function () { return [DateRangeComponent, DateRangePopupComponent, DateRangePopupTemplateDirective, DateRangeSelectionDirective, DateRangeStartInputDirective, DateRangeEndInputDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$1],\n exports: [COMPONENT_DIRECTIVES$1],\n imports: [CommonModule, COMPONENT_MODULES]\n }]\n }], null, null); })();\n\nconst div$1 = domContainerFactory('div');\nconst ul$1 = domContainerFactory('ul');\nconst li$1 = domContainerFactory('li');\nconst listItem = () => li$1('02', 'k-item');\nconst list = () => ul$1([listItem()], 'k-reset');\nconst scrollable$1 = () => (div$1([list()], 'k-time-container k-content k-scrollable'));\nconst timeListWrapper = () => {\n if (!isDocumentAvailable()) {\n return null;\n }\n return div$1([div$1([scrollable$1()], 'k-time-list')], 'k-time-list-wrapper', { left: '-10000px', position: 'absolute' });\n};\nconst TIMELIST_WRAPPER = timeListWrapper();\n/**\n * @hidden\n */\nclass TimePickerDOMService {\n ensureHeights() {\n if (this.timeListHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n const listContainer = container && container.querySelector('.k-time-list-container');\n const hostContainer = listContainer || document.body;\n const wrapper = hostContainer.appendChild(TIMELIST_WRAPPER);\n this.timeListHeight = wrapper.querySelector('.k-scrollable').getBoundingClientRect().height;\n this.itemHeight = wrapper.querySelector('li').getBoundingClientRect().height;\n hostContainer.removeChild(wrapper);\n }\n isActive(element) {\n if (!isDocumentAvailable() || !element) {\n return false;\n }\n return (element.nativeElement || element) === document.activeElement;\n }\n}\nTimePickerDOMService.ɵfac = function TimePickerDOMService_Factory(t) { return new (t || TimePickerDOMService)(); };\nTimePickerDOMService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: TimePickerDOMService, factory: TimePickerDOMService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerDOMService, [{\n type: Injectable\n }], null, null); })();\n\nconst HOURS_IN_DAY = 24;\nconst clampToRange = (rangeValue) => (value) => value % rangeValue;\nconst clamp = clampToRange(HOURS_IN_DAY);\nconst stepper = (start, step) => (idx) => clamp(start + (idx * step));\nconst distanceFromMin = (value, min) => clamp(HOURS_IN_DAY + value - min);\nconst limit = (borderValue) => (barrier, value) => {\n const useBarrier = !value || getDate(barrier).getTime() === getDate(value).getTime();\n return useBarrier ? barrier : setHours(barrier, borderValue);\n};\nconst limitDown = limit(0);\nconst limitUp = limit(HOURS_IN_DAY - 1);\n/**\n * @hidden\n */\nclass HoursService {\n constructor(intl) {\n this.intl = intl;\n this.boundRange = false;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setHours(value, candidate.getHours());\n }\n configure(settings) {\n const { boundRange = this.boundRange, insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.boundRange = boundRange;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (hour) => {\n const date = setHours(MIDNIGHT_DATE, hour);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getHour = stepper(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getHour(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return this.boundRange ? [limitDown(min, value), limitUp(max, value)] : [min, max];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastHour(value) === value.getHours();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastHour(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getHours());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setHours(this.max, this.lastHour(value)));\n }\n divideByStep(value) {\n return distanceFromMin(value.getHours(), this.min.getHours()) / this.step;\n }\n lastHour(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getHours(), max.getHours()];\n }\n}\nHoursService.ɵfac = function HoursService_Factory(t) { return new (t || HoursService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nHoursService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: HoursService, factory: HoursService.ɵfac });\n/** @nocollapse */\nHoursService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HoursService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst MINUTES_IN_HOUR = 60;\nconst clampToRange$1 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$1 = clampToRange$1(MINUTES_IN_HOUR);\nconst stepper$1 = (start, step) => (idx) => clamp$1(start + (idx * step));\nconst distanceFromMin$1 = (value, min) => clamp$1(MINUTES_IN_HOUR + value - min);\nconst limit$1 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours();\n return useBarrier ? barrier : setMinutes(barrier, borderValue);\n};\nconst limitDown$1 = limit$1(0);\nconst limitUp$1 = limit$1(MINUTES_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass MinutesService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setMinutes(value, candidate.getMinutes());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (minute) => {\n const date = setMinutes(MIDNIGHT_DATE, minute);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getMinute = stepper$1(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getMinute(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$1(min, value), limitUp$1(max, value)];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastMinute(value) === value.getMinutes();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastMinute(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getMinutes());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$1(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setMinutes(this.max, this.lastMinute(value)));\n }\n divideByStep(value) {\n return distanceFromMin$1(value.getMinutes(), this.min.getMinutes()) / this.step;\n }\n lastMinute(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getMinutes(), max.getMinutes()];\n }\n}\nMinutesService.ɵfac = function MinutesService_Factory(t) { return new (t || MinutesService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nMinutesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MinutesService, factory: MinutesService.ɵfac });\n/** @nocollapse */\nMinutesService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MinutesService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst SECONDS_IN_HOUR = 60;\nconst clampToRange$2 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$2 = clampToRange$2(SECONDS_IN_HOUR);\nconst stepper$2 = (start, step) => (idx) => clamp$2(start + (idx * step));\nconst distanceFromMin$2 = (value, min) => clamp$2(SECONDS_IN_HOUR + value - min);\nconst limit$2 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours() && barrier.getMinutes() === value.getMinutes();\n return useBarrier ? barrier : setSeconds(barrier, borderValue);\n};\nconst limitDown$2 = limit$2(0);\nconst limitUp$2 = limit$2(SECONDS_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass SecondsService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setSeconds(value, candidate.getSeconds());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (minute) => {\n const date = setSeconds(MIDNIGHT_DATE, minute);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getSecond = stepper$2(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getSecond(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$2(min, value), limitUp$2(max, value)];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastSecond(value) === value.getSeconds();\n return matchMax || !this.isMissing(value);\n }\n divideByStep(value) {\n return distanceFromMin$2(value.getSeconds(), this.min.getSeconds()) / this.step;\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastSecond(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getSeconds());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$2(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setSeconds(this.max, this.lastSecond(value)));\n }\n lastSecond(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getSeconds(), max.getSeconds()];\n }\n}\nSecondsService.ɵfac = function SecondsService_Factory(t) { return new (t || SecondsService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nSecondsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SecondsService, factory: SecondsService.ɵfac });\n/** @nocollapse */\nSecondsService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SecondsService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst setHours$1 = (date, hours) => {\n const clone = cloneDate(date);\n clone.setHours(hours);\n return clone;\n};\nconst isAM = (value) => value !== null && value < 12;\nconst isPM = (value) => value !== null && (!value || value > 11);\nconst inRange = (value, min, max) => ((!min && !max) || (value >= min && value <= max));\nconst inReverseRange = (value, min, max) => ((!min && !max) || value >= min || value <= max);\n/**\n * @hidden\n */\nclass DayPeriodService {\n constructor(intl) {\n this.intl = intl;\n }\n /**\n * @hidden\n */\n apply(value, candidate) {\n const hour = value.getHours();\n const hourAM = isAM(hour);\n const candidateAM = isAM(candidate.getHours());\n if ((hourAM && candidateAM) || (!hourAM && !candidateAM)) {\n return value;\n }\n const [min, max = 24] = this.normalizedRange();\n const result = hour + (candidateAM ? -12 : 12);\n return setHours$1(value, Math.min(Math.max(min, result), (max || 24)));\n }\n /**\n * @hidden\n */\n configure(settings) {\n const { min = this.min, max = this.max, part = this.part } = settings;\n this.min = min;\n this.max = max;\n this.part = part;\n }\n /**\n * @hidden\n */\n data(_) {\n const names = this.part.names;\n if (!names) {\n return [];\n }\n const data = [];\n const [min, max] = this.normalizedRange();\n const dayPeriod = this.intl.dateFormatNames(names);\n if (isAM(min)) {\n data.push({ text: dayPeriod.am, value: setHours$1(this.min, min) });\n }\n if (isPM(max)) {\n data.push({ text: dayPeriod.pm, value: setHours$1(this.min, Math.max(12, max)) });\n }\n return this.min.getHours() !== min ? data.reverse() : data;\n }\n /**\n * @hidden\n */\n isRangeChanged(_, __) {\n return false;\n }\n /**\n * @hidden\n */\n limitRange(min, max, _) {\n return [min, max];\n }\n /**\n * @hidden\n */\n total() {\n const [min, max] = this.normalizedRange();\n if (!min && !max) {\n return 2;\n }\n if (min > 11 || max < 12) {\n return 1;\n }\n return 2;\n }\n /**\n * @hidden\n */\n selectedIndex(value) {\n if (!this.valueInList(value)) {\n return -1;\n }\n const index = Math.floor(value.getHours() / 12);\n return this.min.getHours() === this.normalizedRange()[0] ? index : (index === 0 ? 1 : 0);\n }\n /**\n * @hidden\n */\n valueInList(value) {\n const reverse = this.min.getHours() !== this.normalizedRange()[0];\n const isInRange = reverse ? inReverseRange : inRange;\n return isInRange(value.getHours(), this.min.getHours(), this.max.getHours());\n }\n normalizedRange() {\n const minHour = this.min.getHours();\n const maxHour = this.max.getHours();\n return [\n Math.min(minHour, maxHour),\n Math.max(minHour, maxHour)\n ];\n }\n}\nDayPeriodService.ɵfac = function DayPeriodService_Factory(t) { return new (t || DayPeriodService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nDayPeriodService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DayPeriodService, factory: DayPeriodService.ɵfac });\n/** @nocollapse */\nDayPeriodService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DayPeriodService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst SNAP_THRESHOLD = 0.05; //% of the item height\nconst SCROLL_THRESHOLD = 2; //< 2px threshold\nconst nil = () => (null);\nconst getters = {\n 35: (data, _) => data[data.length - 1],\n 36: (data, _) => data[0],\n 38: (data, index) => data[index - 1],\n 40: (data, index) => data[index + 1]\n};\nconst services$1 = {\n [TIME_PART.dayperiod]: DayPeriodService,\n [TIME_PART.hour]: HoursService,\n [TIME_PART.minute]: MinutesService,\n [TIME_PART.second]: SecondsService\n};\n/**\n * @hidden\n */\nclass TimeListComponent {\n constructor(element, injector, dom, renderer, zone) {\n this.element = element;\n this.injector = injector;\n this.dom = dom;\n this.renderer = renderer;\n this.zone = zone;\n this.min = cloneDate(MIDNIGHT_DATE);\n this.max = cloneDate(MAX_TIME);\n this.step = 1;\n this.disabled = false;\n this.valueChange = new EventEmitter();\n this.componentClass = true;\n this.animateToIndex = true;\n this.isActive = false;\n this.skip = 0;\n this.total = 60;\n this.data = [];\n this.indexToScroll = -1;\n this.domEvents = [];\n }\n get tabIndex() {\n return this.disabled ? undefined : 0;\n }\n ngOnChanges(changes) {\n if (changes.part) {\n this.service = this.injector.get(services$1[this.part.type]);\n this.service.configure(this.serviceSettings());\n }\n const value = this.value;\n const valueChanges = changes.value || {};\n const [min, max] = this.service.limitRange(this.min, this.max, value);\n if (this.service.isRangeChanged(min, max) || changes.min || changes.max || changes.step) {\n this.data = [];\n this.service.configure(this.serviceSettings({ min, max }));\n }\n // Skip the rendering of the list whenever possible\n if (!this.data.length || this.hasMissingValue(valueChanges)) {\n this.animateToIndex = false;\n this.data = this.service.data(value);\n }\n this.animateToIndex = this.animateToIndex && this.textHasChanged(valueChanges);\n this.total = this.service.total(value);\n this.indexToScroll = this.selectedIndex(value);\n }\n ngOnInit() {\n this.animateToIndex = true;\n this.dom.ensureHeights();\n this.itemHeight = this.dom.itemHeight;\n this.listHeight = this.dom.timeListHeight;\n this.topOffset = (this.listHeight - this.itemHeight) / 2;\n this.bottomOffset = this.listHeight - this.itemHeight;\n this.topThreshold = this.itemHeight * SNAP_THRESHOLD;\n this.bottomThreshold = this.itemHeight * (1 - SNAP_THRESHOLD);\n const translate = `translateY(${this.topOffset}px)`;\n this.style = { transform: translate, '-ms-transform': translate };\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnDestroy() {\n this.scrollSubscription.unsubscribe();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n ngAfterViewInit() {\n this.scrollOnce((index) => this.virtualization.scrollToIndex(index));\n }\n ngAfterViewChecked() {\n this.scrollOnce((index) => {\n const action = this.animateToIndex ? 'animateToIndex' : 'scrollToIndex';\n this.virtualization[action](index);\n this.animateToIndex = true;\n });\n }\n handleChange(dataItem) {\n const candidate = this.service.apply(this.value, dataItem.value);\n if (this.value.getTime() === candidate.getTime()) {\n return;\n }\n this.indexToScroll = this.data.indexOf(dataItem);\n this.value = candidate;\n this.valueChange.emit(candidate);\n }\n handleItemClick(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-timelist-item-index'), this.element.nativeElement);\n if (item) {\n const index = item.getAttribute('data-timelist-item-index');\n this.handleChange(this.data[index]);\n }\n }\n /**\n * Focuses the host element of the TimeList.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the TimeList component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n itemOffset(scrollTop) {\n const valueIndex = this.selectedIndex(this.value);\n const activeIndex = this.virtualization.activeIndex();\n const offset = this.virtualization.itemOffset(activeIndex);\n const distance = Math.abs(Math.ceil(scrollTop) - offset);\n if (valueIndex === activeIndex && distance < SCROLL_THRESHOLD) {\n return offset;\n }\n const scrollUp = valueIndex > activeIndex;\n const moveToNext = scrollUp && distance >= this.bottomThreshold || !scrollUp && distance > this.topThreshold;\n return moveToNext ? this.virtualization.itemOffset(activeIndex + 1) : offset;\n }\n hasMissingValue({ previousValue, currentValue }) {\n const isPreviousMissing = previousValue && !this.service.valueInList(previousValue);\n const isCurrentMissing = currentValue && !this.service.valueInList(currentValue);\n return isPreviousMissing || isCurrentMissing;\n }\n scrollOnce(action) {\n if (this.indexToScroll !== -1) {\n action(this.indexToScroll);\n this.indexToScroll = -1;\n }\n }\n serviceSettings(settings) {\n const defaults = {\n boundRange: false,\n insertUndividedMax: false,\n max: this.max,\n min: this.min,\n part: this.part,\n step: this.step\n };\n const result = Object.assign({}, defaults, settings);\n result.boundRange = result.part.type !== 'hour';\n return result;\n }\n selectedIndex(value) {\n if (!value) {\n return -1;\n }\n return this.service.selectedIndex(value);\n }\n textHasChanged({ previousValue, currentValue }) {\n if (!previousValue || !currentValue) {\n return false;\n }\n const oldData = this.data[this.selectedIndex(previousValue)];\n const newData = this.data[this.selectedIndex(currentValue)];\n return oldData && newData && oldData.text !== newData.text;\n }\n handleKeyDown(e) {\n const getter = getters[e.keyCode] || nil;\n const dataItem = getter(this.data, this.service.selectedIndex(this.value));\n if (dataItem) {\n this.handleChange(dataItem);\n e.preventDefault();\n }\n }\n bindEvents() {\n this.scrollSubscription = this.virtualization\n .scroll$()\n .pipe(debounceTime(100), map((e) => e.target.scrollTop), map((top) => this.itemOffset(top)), map((itemOffset) => this.virtualization.itemIndex(itemOffset)))\n .subscribe(index => {\n this.virtualization.scrollToIndex(index);\n this.handleChange(this.data[index]);\n });\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', () => !this.isActive && this.focus()), this.renderer.listen(element, 'click', () => this.focus()), this.renderer.listen(element, 'blur', () => this.isActive = false), this.renderer.listen(element, 'focus', () => this.isActive = true), this.renderer.listen(element, 'keydown', this.handleKeyDown.bind(this)));\n }\n}\nTimeListComponent.ɵfac = function TimeListComponent_Factory(t) { return new (t || TimeListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(TimePickerDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nTimeListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeListComponent, selectors: [[\"kendo-timelist\"]], viewQuery: function TimeListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(VirtualizationComponent, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n } }, hostVars: 3, hostBindings: function TimeListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndex);\n ɵngcc0.ɵɵclassProp(\"k-time-list\", ctx.componentClass);\n } }, inputs: { min: \"min\", max: \"max\", step: \"step\", disabled: \"disabled\", value: \"value\", part: \"part\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 3, vars: 13, consts: [[\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-time-container\", 3, \"skip\", \"take\", \"total\", \"itemHeight\", \"maxScrollDifference\", \"topOffset\", \"bottomOffset\"], [1, \"k-reset\", 3, \"ngStyle\", \"kendoEventsOutsideAngular\", \"scope\"], [\"class\", \"k-item\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-item\"]], template: function TimeListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-virtualization\", 0);\n ɵngcc0.ɵɵelementStart(1, \"ul\", 1);\n ɵngcc0.ɵɵtemplate(2, TimeListComponent_li_2_Template, 3, 2, \"li\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"skip\", ctx.skip)(\"take\", ctx.total)(\"total\", ctx.total)(\"itemHeight\", ctx.itemHeight)(\"maxScrollDifference\", ctx.listHeight)(\"topOffset\", ctx.topOffset)(\"bottomOffset\", ctx.bottomOffset);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.style)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(11, _c3, ctx.handleItemClick))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: [VirtualizationComponent, ɵngcc2.NgStyle, ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgForOf], encapsulation: 2 });\n/** @nocollapse */\nTimeListComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Injector },\n { type: TimePickerDOMService },\n { type: Renderer2 },\n { type: NgZone }\n];\nTimeListComponent.propDecorators = {\n min: [{ type: Input }],\n max: [{ type: Input }],\n part: [{ type: Input }],\n step: [{ type: Input }],\n disabled: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent, { static: true },] }],\n tabIndex: [{ type: HostBinding, args: [\"attr.tabindex\",] }],\n componentClass: [{ type: HostBinding, args: [\"class.k-time-list\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-timelist',\n template: `\n \n
      \n
    • \n {{item.text}}\n
    • \n
    \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Injector }, { type: TimePickerDOMService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], step: [{\n type: Input\n }], disabled: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], componentClass: [{\n type: HostBinding,\n args: [\"class.k-time-list\"]\n }], tabIndex: [{\n type: HostBinding,\n args: [\"attr.tabindex\"]\n }], value: [{\n type: Input\n }], part: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent, { static: true }]\n }] }); })();\n\nconst isEqualTillMinute = (value, min) => value.getHours() === min.getHours() && value.getMinutes() === min.getMinutes();\nconst isEqualTillSecond = (value, min) => isEqualTillMinute(value, min) && value.getSeconds() === min.getSeconds();\nconst isEqualTillMillisecond = (value, min) => isEqualTillSecond(value, min) && value.getMilliseconds() === min.getMilliseconds();\nconst ɵ3$6 = (value) => value.getHours(), ɵ4$2 = (_, min) => min.getHours(), ɵ5$1 = (value) => value.getMinutes(), ɵ6$1 = (value, min) => isEqualTillMinute(value, min) ? min.getMinutes() : 0, ɵ7$1 = (value) => value.getSeconds(), ɵ8$1 = (value, min) => isEqualTillSecond(value, min) ? min.getSeconds() : 0, ɵ9$1 = (value) => value.getMilliseconds(), ɵ10$1 = (value, min) => isEqualTillMillisecond(value, min) ? min.getMilliseconds() : 0;\nconst defaultGetters = [\n {\n type: TIME_PART.hour,\n getter: ɵ3$6,\n minGetter: ɵ4$2\n }, {\n type: TIME_PART.minute,\n getter: ɵ5$1,\n minGetter: ɵ6$1\n }, {\n type: TIME_PART.second,\n getter: ɵ7$1,\n minGetter: ɵ8$1\n }, {\n type: TIME_PART.millisecond,\n getter: ɵ9$1,\n minGetter: ɵ10$1\n }\n];\nconst left = getter => (origin, _) => getter(origin);\nconst right = getter => (_, candidate) => getter(candidate);\nconst convertToObject = (parts) => parts.reduce((obj, p) => { obj[p.type] = p.type; return obj; }, {});\nconst getterByPart = parts => g => parts[g.type] ? right(g.getter) : left(g.getter);\nconst gettersFactory = getters => parts => (getters.map(getterByPart(convertToObject(parts))));\nconst snapValue = (getter, minGetter, step) => (date, min) => {\n const value = getter(date);\n const minValue = minGetter(date, min);\n const rest = value - minValue;\n if (rest < 0) {\n return minValue;\n }\n const mod = rest % step;\n return value - mod + (mod > step / 2 ? step : 0);\n};\nconst snappersFactory = (getters) => steps => (getters.map(g => {\n const step = steps[g.type];\n return step ? snapValue(g.getter, g.minGetter, step) : g.getter;\n}));\n/**\n * @hidden\n */\nconst generateGetters = gettersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst generateSnappers = snappersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst valueMerger = getters => (origin, candidate) => {\n origin.setHours(...getters.map(g => g(origin, candidate)));\n return origin;\n};\n/**\n * @hidden\n */\nconst snapTime = snappers => (candidate, min) => {\n const date = cloneDate(candidate);\n date.setHours(...snappers.map(s => s(date, min)));\n return date;\n};\n\nconst listReducer = (state, list, idx, all) => {\n if (state.length || !list.isActive) {\n return state;\n }\n return [{\n next: all[idx + 1] || list,\n prev: all[idx - 1] || list\n }];\n};\nvar Direction;\n(function (Direction) {\n Direction[Direction[\"Left\"] = 0] = \"Left\";\n Direction[Direction[\"Right\"] = 1] = \"Right\";\n})(Direction || (Direction = {}));\n/**\n * @hidden\n *\n * Represents the Kendo UI TimeSelector component for Angular.\n */\nclass TimeSelectorComponent {\n constructor(localization, cdr, element, intl, dom, zone, renderer, pickerService) {\n this.localization = localization;\n this.cdr = cdr;\n this.element = element;\n this.intl = intl;\n this.dom = dom;\n this.zone = zone;\n this.renderer = renderer;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.componentClass = true;\n /**\n * Specifies the time format used to display the time list columns.\n */\n this.format = 't';\n /**\n * Specifies the smallest valid time value.\n */\n this.min = cloneDate(MIN_TIME);\n /**\n * Specifies the biggest valid time value.\n */\n this.max = cloneDate(MAX_TIME);\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Set** button in the popup.\n */\n this.setButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `disabled` property of the TimeSelector and determines whether the component is active.\n */\n this.disabled = false;\n /**\n * Specifies the value of the TimeSelector component.\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user cancels the selected value.\n */\n this.valueReject = new EventEmitter();\n this.isActive = false;\n this.showNowButton = true;\n this._activeListIndex = -1;\n this._steps = {};\n this.domEvents = [];\n if (this.pickerService) {\n this.pickerService.timeSelector = this;\n }\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * Configures the incremental steps of the TimeSelector.\n *\n * The available options are:\n * - `hour: Number`—Controls the incremental step of the hour value.\n * - `minute: Number`—Controls the incremental step of the minute value.\n * - `second: Number`—Controls the incremental step of the second value.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15 };\n * }\n * ```\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n set current(value) {\n this._current = timeInRange(this.snapTime(cloneDate(value || MIDNIGHT_DATE), this.min), this.min, this.max);\n if (!NgZone.isInAngularZone()) {\n this.cdr.detectChanges();\n }\n }\n get current() {\n return this._current;\n }\n get activeListIndex() {\n return this._activeListIndex;\n }\n set activeListIndex(value) {\n this._activeListIndex = value;\n if (!this.timeListWrappers || !this.timeListWrappers.length) {\n return;\n }\n this.timeListWrappers.forEach(listWrapper => {\n this.renderer.removeClass(listWrapper.nativeElement, 'k-state-focused');\n });\n if (value >= 0) {\n const listIndex = this.listIndex(value);\n const focusedWrapper = this.timeListWrappers.toArray()[listIndex];\n if (focusedWrapper) {\n this.renderer.addClass(focusedWrapper.nativeElement, 'k-state-focused');\n }\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions = this.intl.changes.subscribe(this.intlChange.bind(this));\n if (this.localization) {\n this.subscriptions.add(this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck()));\n }\n this.dom.calculateHeights(this.element.nativeElement);\n this.init();\n this.bindEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(_) {\n this.init();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.timeSelector = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * Focuses the TimeSelector component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.focus();\n }\n /**\n * Blurs the TimeSelector component.\n */\n blur() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.blur();\n }\n /**\n * @hidden\n */\n handleAccept() {\n this.handleChange(this.mergeValue(cloneDate(this.value || getDate(getNow())), this.current));\n }\n /**\n * @hidden\n */\n handleNow() {\n this.current = getNow();\n this.handleChange(this.current);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleReject() {\n this.current = this.value;\n this.valueReject.emit();\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n this.emitFocus(args);\n }\n /**\n * @hidden\n */\n handleListFocus(args) {\n const index = parseInt(args.target.getAttribute('data-timelist-index'), 10);\n this.activeListIndex = index;\n this.handleFocus(args);\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n const currentTarget = currentFocusTarget(args);\n if (currentTarget && this.containsElement(currentTarget)) {\n return;\n }\n this.activeListIndex = -1;\n this.isActive = false;\n this.emitBlur(args);\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n partStep(part) {\n return this.steps[part.type] || 1;\n }\n init(changes) {\n if (!changes || hasChange(changes, 'format')) {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n }\n if (!changes || hasChange(changes, 'steps')) {\n this.snapTime = snapTime(generateSnappers(this.steps));\n }\n if (!changes || hasChange(changes, 'value')) {\n this.current = this.value;\n }\n this.showNowButton = !this.hasSteps() && this.nowButton && isInTimeRange(getNow(), this.min, this.max);\n }\n focusList(dir) {\n if (!this.timeLists.length) {\n return;\n }\n this.timeLists.reduce(listReducer, [])\n .map(state => dir === Direction.Right ? state.next : state.prev)\n .map(list => list && list.focus());\n }\n handleChange(value) {\n this.value = value;\n this.valueChange.emit(cloneDate(value));\n }\n hasActiveButton() {\n if (!this.accept) {\n return false;\n }\n return [this.accept, this.cancel, this.now].reduce((isActive, el) => isActive || this.dom.isActive(el), false);\n }\n hasSteps() {\n const keys = Object.keys(this.steps);\n return keys.length !== keys.reduce((acc, k) => acc + this.steps[k], 0);\n }\n intlChange() {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n this.cdr.markForCheck();\n }\n bindEvents() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element.nativeElement, 'keydown', this.handleKeydown.bind(this)));\n });\n }\n }\n handleKeydown(args) {\n const { keyCode, altKey } = args;\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowLeft, Keys.ArrowRight].indexOf(keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && altKey) {\n return;\n }\n if (keyCode === Keys.Enter && !this.hasActiveButton()) {\n this.handleAccept();\n }\n else if (keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight) {\n this.focusList(keyCode === Keys.ArrowLeft ? Direction.Left : Direction.Right);\n }\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus(args) {\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n listIndex(partIndex) {\n let listIdx = 0;\n let partIdx = 0;\n while (partIdx < partIndex) {\n if (this.dateFormatParts[partIdx].type !== 'literal') {\n listIdx++;\n }\n partIdx++;\n }\n return listIdx;\n }\n}\nTimeSelectorComponent.ɵfac = function TimeSelectorComponent_Factory(t) { return new (t || TimeSelectorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(TimePickerDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nTimeSelectorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeSelectorComponent, selectors: [[\"kendo-timeselector\"]], viewQuery: function TimeSelectorComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c76, true);\n ɵngcc0.ɵɵviewQuery(_c77, true);\n ɵngcc0.ɵɵviewQuery(_c78, true);\n ɵngcc0.ɵɵviewQuery(TimeListComponent, true);\n ɵngcc0.ɵɵviewQuery(_c79, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.accept = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cancel = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.now = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.timeLists = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.timeListWrappers = _t);\n } }, hostVars: 4, hostBindings: function TimeSelectorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-timeselector\", ctx.componentClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { format: \"format\", min: \"min\", max: \"max\", cancelButton: \"cancelButton\", setButton: \"setButton\", nowButton: \"nowButton\", disabled: \"disabled\", value: \"value\", steps: \"steps\" }, outputs: { valueChange: \"valueChange\", valueReject: \"valueReject\" }, exportAs: [\"kendo-timeselector\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 9, vars: 4, consts: function () { let i18n_80; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the timeselector component\n * @meaning kendo.timeselector.accept\n */\n const MSG_EXTERNAL_5362895271044573681$$DIST_FESM2015_INDEX_JS_81 = goog.getMsg(\"Set\");\n i18n_80 = MSG_EXTERNAL_5362895271044573681$$DIST_FESM2015_INDEX_JS_81;\n }\n else {\n i18n_80 = $localize `:kendo.timeselector.accept|The Accept button text in the timeselector component␟801811aa1609e3f173c86baa82cee037f75a215f␟5362895271044573681:Set`;\n } let i18n_82; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the timeselector component\n * @meaning kendo.timeselector.acceptLabel\n */\n const MSG_EXTERNAL_3417396278000787211$$DIST_FESM2015_INDEX_JS_83 = goog.getMsg(\"Set time\");\n i18n_82 = MSG_EXTERNAL_3417396278000787211$$DIST_FESM2015_INDEX_JS_83;\n }\n else {\n i18n_82 = $localize `:kendo.timeselector.acceptLabel|The label for the Accept button in the timeselector component␟b4b1e5ac55f0330f6c4e32b866ae4339ad969978␟3417396278000787211:Set time`;\n } let i18n_84; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the timeselector component\n * @meaning kendo.timeselector.cancel\n */\n const MSG_EXTERNAL_1890188482755567622$$DIST_FESM2015_INDEX_JS_85 = goog.getMsg(\"Cancel\");\n i18n_84 = MSG_EXTERNAL_1890188482755567622$$DIST_FESM2015_INDEX_JS_85;\n }\n else {\n i18n_84 = $localize `:kendo.timeselector.cancel|The Cancel button text in the timeselector component␟3004d7704ffa6202a3b3925fcea490e486203a3e␟1890188482755567622:Cancel`;\n } let i18n_86; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the timeselector component\n * @meaning kendo.timeselector.cancelLabel\n */\n const MSG_EXTERNAL_5738120209397145846$$DIST_FESM2015_INDEX_JS_87 = goog.getMsg(\"Cancel changes\");\n i18n_86 = MSG_EXTERNAL_5738120209397145846$$DIST_FESM2015_INDEX_JS_87;\n }\n else {\n i18n_86 = $localize `:kendo.timeselector.cancelLabel|The label for the Cancel button in the timeselector component␟08dfbdfffd662371a6ff4c0b6ed82b9faa48143b␟5738120209397145846:Cancel changes`;\n } let i18n_88; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timeselector component\n * @meaning kendo.timeselector.now\n */\n const MSG_EXTERNAL_1926162752852226109$$DIST_FESM2015_INDEX_JS_89 = goog.getMsg(\"Now\");\n i18n_88 = MSG_EXTERNAL_1926162752852226109$$DIST_FESM2015_INDEX_JS_89;\n }\n else {\n i18n_88 = $localize `:kendo.timeselector.now|The Now button text in the timeselector component␟98cba1ae36a7bbe15e1bac1837e07922ec109e7d␟1926162752852226109:Now`;\n } let i18n_90; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timeselector component\n * @meaning kendo.timeselector.nowLabel\n */\n const MSG_EXTERNAL_7789175884909488647$$DIST_FESM2015_INDEX_JS_91 = goog.getMsg(\"Select now\");\n i18n_90 = MSG_EXTERNAL_7789175884909488647$$DIST_FESM2015_INDEX_JS_91;\n }\n else {\n i18n_90 = $localize `:kendo.timeselector.nowLabel|The label for the Now button in the timeselector component␟08e6a8a51d970609e138950fdd89c5cf201869f3␟7789175884909488647:Select now`;\n } return [[\"kendoTimeSelectorLocalizedMessages\", \"\", \"accept\", i18n_80, \"acceptLabel\", i18n_82, \"cancel\", i18n_84, \"cancelLabel\", i18n_86, \"now\", i18n_88, \"nowLabel\", i18n_90], [1, \"k-time-header\"], [1, \"k-title\"], [\"class\", \"k-button k-bare k-time-now\", \"type\", \"button\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [1, \"k-time-list-container\"], [1, \"k-time-highlight\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"class\", \"k-time-footer k-action-buttons\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-button\", \"k-bare\", \"k-time-now\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"now\", \"\"], [\"class\", \"k-time-list-wrapper\", \"role\", \"presentation\", \"tabindex\", \"-1\", 4, \"ngIf\"], [\"class\", \"k-time-separator\", 4, \"ngIf\"], [\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-time-list-wrapper\"], [\"listWrapper\", \"\"], [3, \"min\", \"max\", \"part\", \"step\", \"disabled\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\"], [1, \"k-time-separator\"], [1, \"k-time-footer\", \"k-action-buttons\"], [\"class\", \"k-button k-time-cancel\", \"type\", \"button\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [\"type\", \"button\", \"class\", \"k-time-accept k-button k-primary\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"cancel\", \"\"], [\"type\", \"button\", 1, \"k-time-accept\", \"k-button\", \"k-primary\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"accept\", \"\"]]; }, template: function TimeSelectorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, TimeSelectorComponent_button_4_Template, 3, 10, \"button\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"div\", 4);\n ɵngcc0.ɵɵelement(6, \"span\", 5);\n ɵngcc0.ɵɵtemplate(7, TimeSelectorComponent_ng_template_7_Template, 2, 2, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, TimeSelectorComponent_div_8_Template, 3, 2, \"div\", 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.intl.formatDate(ctx.current, ctx.format), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showNowButton);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.dateFormatParts);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.setButton || ctx.cancelButton);\n } }, directives: function () { return [TimeSelectorLocalizedMessagesDirective, ɵngcc2.NgIf, ɵngcc2.NgForOf, ɵngcc3.EventsOutsideAngularDirective, TimeListComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nTimeSelectorComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: IntlService },\n { type: TimePickerDOMService },\n { type: NgZone },\n { type: Renderer2 },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nTimeSelectorComponent.propDecorators = {\n accept: [{ type: ViewChild, args: ['accept',] }],\n cancel: [{ type: ViewChild, args: ['cancel',] }],\n now: [{ type: ViewChild, args: ['now',] }],\n timeLists: [{ type: ViewChildren, args: [TimeListComponent,] }],\n timeListWrappers: [{ type: ViewChildren, args: ['listWrapper',] }],\n componentClass: [{ type: HostBinding, args: ['class.k-timeselector',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n format: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n cancelButton: [{ type: Input }],\n setButton: [{ type: Input }],\n nowButton: [{ type: Input }],\n disabled: [{ type: Input }],\n steps: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n valueReject: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timeselector',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ],\n selector: 'kendo-timeselector',\n template: `\n \n \n
    \n \n {{ intl.formatDate(current, format) }}\n \n {{localization.get('now')}}\n
    \n
    \n \n \n \n {{intl.dateFieldName(part)}}\n \n
    \n
    \n {{part.pattern}}\n
    \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.IntlService }, { type: TimePickerDOMService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { componentClass: [{\n type: HostBinding,\n args: ['class.k-timeselector']\n }], format: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], setButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueReject: [{\n type: Output\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], steps: [{\n type: Input\n }], accept: [{\n type: ViewChild,\n args: ['accept']\n }], cancel: [{\n type: ViewChild,\n args: ['cancel']\n }], now: [{\n type: ViewChild,\n args: ['now']\n }], timeLists: [{\n type: ViewChildren,\n args: [TimeListComponent]\n }], timeListWrappers: [{\n type: ViewChildren,\n args: ['listWrapper']\n }] }); })();\n\n/**\n * @hidden\n */\nclass TimePickerMessages extends ComponentMessages {\n}\nTimePickerMessages.ɵfac = function TimePickerMessages_Factory(t) { return ɵTimePickerMessages_BaseFactory(t || TimePickerMessages); };\nTimePickerMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimePickerMessages, inputs: { accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", now: \"now\", nowLabel: \"nowLabel\", toggle: \"toggle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nTimePickerMessages.propDecorators = {\n accept: [{ type: Input }],\n acceptLabel: [{ type: Input }],\n cancel: [{ type: Input }],\n cancelLabel: [{ type: Input }],\n now: [{ type: Input }],\n nowLabel: [{ type: Input }],\n toggle: [{ type: Input }]\n};\nconst ɵTimePickerMessages_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(TimePickerMessages);\n\n/**\n * @hidden\n */\nclass TimePickerLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimePickerLocalizedMessagesDirective.ɵfac = function TimePickerLocalizedMessagesDirective_Factory(t) { return new (t || TimePickerLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimePickerLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimePickerLocalizedMessagesDirective, selectors: [[\"\", \"kendoTimePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTimePickerLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTimePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass TimePickerCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimePickerCustomMessagesComponent.ɵfac = function TimePickerCustomMessagesComponent_Factory(t) { return new (t || TimePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimePickerCustomMessagesComponent, selectors: [[\"kendo-timepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TimePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nTimePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-timepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass TimeSelectorLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimeSelectorLocalizedMessagesDirective.ɵfac = function TimeSelectorLocalizedMessagesDirective_Factory(t) { return new (t || TimeSelectorLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimeSelectorLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimeSelectorLocalizedMessagesDirective, selectors: [[\"\", \"kendoTimeSelectorLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTimeSelectorLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTimeSelectorLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n *\n * Custom component messages override default component messages.\n */\nclass TimeSelectorCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimeSelectorCustomMessagesComponent.ɵfac = function TimeSelectorCustomMessagesComponent_Factory(t) { return new (t || TimeSelectorCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimeSelectorCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeSelectorCustomMessagesComponent, selectors: [[\"kendo-timeselector-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TimeSelectorCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nTimeSelectorCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-timeselector-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES$2 = [\n TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent\n];\nconst COMPONENT_MODULES$1 = [\n DateInputModule,\n IntlModule,\n PopupModule,\n VirtualizationModule,\n EventsModule\n];\nconst ɵ0$n = touchEnabled;\nconst providers = [\n TimePickerDOMService,\n HoursService,\n MinutesService,\n SecondsService,\n DayPeriodService,\n {\n provide: TOUCH_ENABLED,\n useValue: ɵ0$n\n }\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TimePicker component.\n */\nclass TimePickerModule {\n}\nTimePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TimePickerModule });\nTimePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TimePickerModule_Factory(t) { return new (t || TimePickerModule)(); }, providers: providers, imports: [[CommonModule, ...COMPONENT_MODULES$1]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TimePickerModule, { declarations: function () { return [TimePickerLocalizedMessagesDirective, TimeListComponent, TimePickerCustomMessagesComponent, TimePickerComponent, TimeSelectorLocalizedMessagesDirective, TimeSelectorCustomMessagesComponent, TimeSelectorComponent]; }, imports: function () { return [CommonModule, DateInputModule, IntlModule,\n PopupModule, VirtualizationModule, EventsModule]; }, exports: function () { return [TimePickerLocalizedMessagesDirective, TimeListComponent, TimePickerCustomMessagesComponent, TimePickerComponent, TimeSelectorLocalizedMessagesDirective, TimeSelectorCustomMessagesComponent, TimeSelectorComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$2],\n exports: [COMPONENT_DIRECTIVES$2],\n imports: [CommonModule, ...COMPONENT_MODULES$1],\n providers: providers\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass Messages$1 extends ComponentMessages {\n}\nMessages$1.ɵfac = function Messages$1_Factory(t) { return ɵMessages$1_BaseFactory(t || Messages$1); };\nMessages$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages$1, inputs: { toggle: \"toggle\", dateTab: \"dateTab\", dateTabLabel: \"dateTabLabel\", timeTab: \"timeTab\", timeTabLabel: \"timeTabLabel\", accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", today: \"today\", now: \"now\", nowLabel: \"nowLabel\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages$1.propDecorators = {\n toggle: [{ type: Input }],\n dateTab: [{ type: Input }],\n dateTabLabel: [{ type: Input }],\n timeTab: [{ type: Input }],\n timeTabLabel: [{ type: Input }],\n accept: [{ type: Input }],\n acceptLabel: [{ type: Input }],\n cancel: [{ type: Input }],\n cancelLabel: [{ type: Input }],\n today: [{ type: Input }],\n now: [{ type: Input }],\n nowLabel: [{ type: Input }]\n};\nconst ɵMessages$1_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(Messages$1);\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateTimePickerCustomMessagesComponent extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateTimePickerCustomMessagesComponent.ɵfac = function DateTimePickerCustomMessagesComponent_Factory(t) { return new (t || DateTimePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateTimePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateTimePickerCustomMessagesComponent, selectors: [[\"kendo-datetimepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages$1,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DateTimePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDateTimePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-datetimepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoDateTimePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages$1,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: '[kendoDateTimePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES$3 = [\n DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective\n];\nconst ɵ0$o = touchEnabled;\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateTimePicker component.\n */\nclass DateTimePickerModule {\n}\nDateTimePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateTimePickerModule });\nDateTimePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateTimePickerModule_Factory(t) { return new (t || DateTimePickerModule)(); }, providers: [\n { provide: TOUCH_ENABLED, useValue: ɵ0$o }\n ], imports: [[\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ], TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateTimePickerModule, { declarations: function () { return [DateTimePickerComponent, DateTimePickerCustomMessagesComponent, LocalizedMessagesDirective]; }, imports: function () { return [CommonModule,\n IntlModule, DateInputModule, CalendarModule, TimePickerModule, PopupModule,\n EventsModule, TemplatesModule]; }, exports: function () { return [DateTimePickerComponent, DateTimePickerCustomMessagesComponent, LocalizedMessagesDirective, TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n ...COMPONENT_DIRECTIVES$3\n ],\n exports: [\n ...COMPONENT_DIRECTIVES$3,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ],\n providers: [\n { provide: TOUCH_ENABLED, useValue: ɵ0$o }\n ]\n }]\n }], null, null); })();\n\nconst COMPONENT_MODULES$2 = [\n CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Date Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Date Inputs module\n * import { DateInputsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, DateInputsModule], // import the Date Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateInputsModule {\n}\nDateInputsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateInputsModule });\nDateInputsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateInputsModule_Factory(t) { return new (t || DateInputsModule)(); }, imports: [COMPONENT_MODULES$2, CalendarsModule, DateInputModule, DatePickerModule, TimePickerModule, DateRangeModule, DateTimePickerModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateInputsModule, { imports: [CalendarsModule, DateInputModule, DatePickerModule, TimePickerModule, DateRangeModule, DateTimePickerModule], exports: [CalendarsModule, DateInputModule, DatePickerModule, TimePickerModule, DateRangeModule, DateTimePickerModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputsModule, [{\n type: NgModule,\n args: [{\n exports: COMPONENT_MODULES$2,\n imports: COMPONENT_MODULES$2\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CalendarCommonModule, CALENDAR_RANGE_VALIDATORS, CALENDAR_VALUE_ACCESSOR, KENDO_INPUT_PROVIDER, KForOf, KForOfContext, HeaderComponent, HorizontalViewListComponent, CalendarMessages, MultiViewCalendarCustomMessagesComponent, Messages, RANGE_CALENDAR_RANGE_VALIDATORS, RANGE_CALENDAR_VALUE_ACCESSOR, NavigationComponent, BusViewService, CenturyViewService, DecadeViewService, DisabledDatesService, CalendarDOMService, MonthViewService, NavigationService, ScrollSyncService, WeekNamesService, YearViewService, TemplatesModule, CellTemplateDirective, CenturyCellTemplateDirective, DecadeCellTemplateDirective, HeaderTitleTemplateDirective, MonthCellTemplateDirective, NavigationItemTemplateDirective, WeekNumberCellTemplateDirective, YearCellTemplateDirective, ViewListComponent, ViewComponent, PickerService, DateInputMessages, DatePickerMessages, DateRangeInput, DateRangePopupTemplateDirective, DateTimePickerCustomMessagesComponent, LocalizedMessagesDirective, Messages$1, TimePickerMessages, TimePickerCustomMessagesComponent, TimeSelectorCustomMessagesComponent, DayPeriodService, TimePickerDOMService, HoursService, MinutesService, SecondsService, TimeListComponent, TimeSelectorComponent, TOUCH_ENABLED, ScrollerService, DEFAULT_SCROLLER_FACTORY, SCROLLER_FACTORY_TOKEN, VirtualizationComponent, VirtualizationModule, CalendarComponent, DateInputComponent, DatePickerComponent, TimePickerComponent, DateTimePickerComponent, MultiViewCalendarComponent, DateRangeComponent, DateRangePopupComponent, DateRangeEndInputDirective, DateRangeStartInputDirective, DateRangeSelectionDirective, CalendarModule, CalendarsModule, DateInputModule, DatePickerModule, DateInputsModule, TimePickerModule, DateTimePickerModule, MultiViewCalendarModule, DateRangeModule, DateRangeService, CalendarCustomMessagesComponent, DateInputCustomMessagesComponent, DatePickerCustomMessagesComponent, PreventableEvent, CalendarLocalizedMessagesDirective, MultiViewCalendarLocalizedMessagesDirective, DateInputLocalizedMessagesDirective, DatePickerLocalizedMessagesDirective, TimePickerLocalizedMessagesDirective, TimeSelectorLocalizedMessagesDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzswQkFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzswQkFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2dIQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs2R0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzswR0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7eUVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OzJEQWlCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b01BaUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FMQTBERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7bUhBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3dFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztxR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MklBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzswSkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2dLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7eUtBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2dLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt5S0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4TUF5REU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytLQTRFRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyT0FrR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bVBBK0dFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MFNBc1BFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7K0hBd0NFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUtBc0VFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7aUtBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzRIQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O2lGQVVFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztpU0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1U0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs4V0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dU9BR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VIQTBCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z0hBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O3lIQWtERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBZUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBd0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt3SkFBQztBQUNEO0FBQ0E7QUFDQTttR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFxQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2dOQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTttRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkEyQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MExBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtxR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFlRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OEtBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTt1R0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21LQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkF5QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzBCQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7b0dBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzswR0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzBHQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z0hBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswSUErQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxTkFvSEU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs0UkFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTt1R0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21LQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7cUtBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7MEJBUUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2dZQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTt1RkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3VLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBd0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzBCQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29weXJpZ2h0IMKpIDIwMjAgUHJvZ3Jlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIExpY2Vuc2VkIHVuZGVyIGNvbW1lcmNpYWwgbGljZW5zZS4gU2VlIExJQ0VOU0UubWQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5qZWN0aW9uVG9rZW4sIENvbXBvbmVudCwgSW5qZWN0LCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE5nWm9uZSwgSW5wdXQsIE91dHB1dCwgSG9zdEJpbmRpbmcsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NoaWxkLCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBpc0Rldk1vZGUsIGZvcndhcmRSZWYsIE9wdGlvbmFsLCBDb250ZW50Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkcmVuLCBDb250ZW50Q2hpbGRyZW4sIEl0ZXJhYmxlRGlmZmVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCwgUlRMLCBDb21wb25lbnRNZXNzYWdlcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWwxMG4nO1xuaW1wb3J0IHsgZ2V0RGF0ZSwgaXNFcXVhbCwgY2xvbmVEYXRlLCBhZGREYXlzLCBhZGREZWNhZGVzLCBhZGRDZW50dXJpZXMsIGZpcnN0RGVjYWRlT2ZDZW50dXJ5LCBsYXN0RGVjYWRlT2ZDZW50dXJ5LCBmaXJzdFllYXJPZkRlY2FkZSwgY3JlYXRlRGF0ZSwgZHVyYXRpb25JbkNlbnR1cmllcywgYWRkWWVhcnMsIGxhc3RZZWFyT2ZEZWNhZGUsIGR1cmF0aW9uSW5EZWNhZGVzLCBhZGRXZWVrcywgYWRkTW9udGhzLCBmaXJzdERheU9mTW9udGgsIGxhc3REYXlPZk1vbnRoLCBkYXlPZldlZWssIGR1cmF0aW9uSW5Nb250aHMsIGZpcnN0TW9udGhPZlllYXIsIGxhc3RNb250aE9mWWVhciwgZHVyYXRpb25JblllYXJzLCB3ZWVrSW5ZZWFyIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGUtbWF0aCc7XG5pbXBvcnQgeyBpc0RvY3VtZW50QXZhaWxhYmxlLCBLZW5kb0lucHV0LCBndWlkLCBoYXNPYnNlcnZlcnMsIEtleXMsIEV2ZW50c01vZHVsZSwgUmVzaXplU2Vuc29yTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IEludGxTZXJ2aWNlLCBJbnRsTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItaW50bCc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiwgaW50ZXJ2YWwsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBmcm9tRXZlbnQsIEVNUFRZLCBmcm9tLCBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2NhbiwgdGFrZVdoaWxlLCB0YXAsIGZpbHRlciwgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUG9wdXBTZXJ2aWNlLCBQb3B1cE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXBvcHVwJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0b3VjaEVuYWJsZWQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tY29tbW9uJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBBY3Rpb247XG4oZnVuY3Rpb24gKEFjdGlvbikge1xuICAgIEFjdGlvbltBY3Rpb25bXCJMZWZ0XCJdID0gMF0gPSBcIkxlZnRcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiUmlnaHRcIl0gPSAxXSA9IFwiUmlnaHRcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiVXBcIl0gPSAyXSA9IFwiVXBcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiRG93blwiXSA9IDNdID0gXCJEb3duXCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIlByZXZWaWV3XCJdID0gNF0gPSBcIlByZXZWaWV3XCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIk5leHRWaWV3XCJdID0gNV0gPSBcIk5leHRWaWV3XCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIkZpcnN0SW5WaWV3XCJdID0gNl0gPSBcIkZpcnN0SW5WaWV3XCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIkxhc3RJblZpZXdcIl0gPSA3XSA9IFwiTGFzdEluVmlld1wiO1xuICAgIEFjdGlvbltBY3Rpb25bXCJMb3dlclZpZXdcIl0gPSA4XSA9IFwiTG93ZXJWaWV3XCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIlVwcGVyVmlld1wiXSA9IDldID0gXCJVcHBlclZpZXdcIjtcbn0pKEFjdGlvbiB8fCAoQWN0aW9uID0ge30pKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEVNUFRZX1NFTEVDVElPTlJBTkdFID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNSUROSUdIVF9EQVRFID0gbmV3IERhdGUoMTk4MCwgMCwgMSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTUlOX0RBVEUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNQVhfREFURSA9IG5ldyBEYXRlKDIwOTksIDExLCAzMSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTUlOX1RJTUUgPSBuZXcgRGF0ZSgxOTgwLCAwLCAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNQVhfVElNRSA9IG5ldyBEYXRlKDE5ODAsIDAsIDEsIDIzLCA1OSwgNTkpO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1iaXR3aXNlIG1heC1saW5lLWxlbmd0aCAqL1xuY29uc3QgaXNTZXQgPSAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG5jb25zdCBzZXR0ZXIgPSAobWV0aG9kKSA9PiAoZGF0ZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCBjbG9uZSA9IGNsb25lRGF0ZShkYXRlKTtcbiAgICBjbG9uZVttZXRob2RdKHZhbHVlKTtcbiAgICByZXR1cm4gY2xvbmU7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNldFRpbWUgPSAob3JpZ2luLCBjYW5kaWRhdGUpID0+IHtcbiAgICBjb25zdCBkYXRlID0gY2xvbmVEYXRlKG9yaWdpbik7XG4gICAgZGF0ZS5zZXRIb3VycyhjYW5kaWRhdGUuZ2V0SG91cnMoKSwgY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSwgY2FuZGlkYXRlLmdldFNlY29uZHMoKSwgY2FuZGlkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICByZXR1cm4gZGF0ZTtcbn07XG5jb25zdCBub3JtYWxpemVUaW1lcyA9IChjYW5kaWRhdGUsIG1pbiwgbWF4KSA9PiAoe1xuICAgIGNhbmRpZGF0ZVZhbHVlOiBzZXRUaW1lKE1JRE5JR0hUX0RBVEUsIGNhbmRpZGF0ZSksXG4gICAgbWF4VmFsdWU6IGFkZERheXMoc2V0VGltZShNSUROSUdIVF9EQVRFLCBtYXgpLCBtaW4uZ2V0SG91cnMoKSA8IG1heC5nZXRIb3VycygpIHx8XG4gICAgICAgIChtaW4uZ2V0SG91cnMoKSA9PT0gbWF4LmdldEhvdXJzKCkgJiYgbWluLmdldE1pbnV0ZXMoKSA8IG1heC5nZXRNaW51dGVzKCkpID8gMCA6IDEpLFxuICAgIG1pblZhbHVlOiBzZXRUaW1lKE1JRE5JR0hUX0RBVEUsIG1pbilcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNldEhvdXJzID0gc2V0dGVyKCdzZXRIb3VycycpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNldE1pbnV0ZXMgPSBzZXR0ZXIoJ3NldE1pbnV0ZXMnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzZXRTZWNvbmRzID0gc2V0dGVyKCdzZXRTZWNvbmRzJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcmFuZ2UgPSAoc3RhcnQsIGVuZCwgc3RlcCA9IDEpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgPSBpICsgc3RlcCkge1xuICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNJblJhbmdlID0gKGNhbmRpZGF0ZSwgbWluLCBtYXgpID0+ICghY2FuZGlkYXRlIHx8ICEoKG1pbiAmJiBtaW4gPiBjYW5kaWRhdGUpIHx8IChtYXggJiYgbWF4IDwgY2FuZGlkYXRlKSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzSW5UaW1lUmFuZ2UgPSAoY2FuZGlkYXRlLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICghY2FuZGlkYXRlIHx8ICFtaW4gfHwgIW1heCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgeyBjYW5kaWRhdGVWYWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlIH0gPSBub3JtYWxpemVUaW1lcyhjYW5kaWRhdGUsIG1pbiwgbWF4KTtcbiAgICByZXR1cm4gbWluVmFsdWUgPD0gY2FuZGlkYXRlVmFsdWUgJiYgY2FuZGlkYXRlVmFsdWUgPD0gbWF4VmFsdWU7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzVmFsaWRSYW5nZSA9IChtaW4sIG1heCkgPT4gKCFpc1NldChtaW4pIHx8ICFpc1NldChtYXgpIHx8IG1pbiA8PSBtYXgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRhdGVJblJhbmdlID0gKGNhbmRpZGF0ZSwgbWluLCBtYXgpID0+IHtcbiAgICBpZiAoIWNhbmRpZGF0ZSkge1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgIH1cbiAgICBpZiAobWluICYmIGNhbmRpZGF0ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1pbik7XG4gICAgfVxuICAgIGlmIChtYXggJiYgY2FuZGlkYXRlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiBjbG9uZURhdGUobWF4KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdGltZUluUmFuZ2UgPSAoY2FuZGlkYXRlLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICghY2FuZGlkYXRlIHx8ICFtaW4gfHwgIW1heCkge1xuICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgIH1cbiAgICBjb25zdCB7IGNhbmRpZGF0ZVZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IG5vcm1hbGl6ZVRpbWVzKGNhbmRpZGF0ZSwgbWluLCBtYXgpO1xuICAgIGlmIChjYW5kaWRhdGVWYWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzZXRUaW1lKGNhbmRpZGF0ZSwgbWluKTtcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZVZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHNldFRpbWUoY2FuZGlkYXRlLCBtYXgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZXROb3cgPSAoKSA9PiBuZXcgRGF0ZSgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdldFRvZGF5ID0gKCkgPT4gZ2V0RGF0ZShuZXcgRGF0ZSgpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub29wID0gKF8pID0+IHsgfTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1lbXB0eVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzV2luZG93QXZhaWxhYmxlID0gKCkgPT4ge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5Q2xhc3NPYmplY3QgPSAoY2xhc3NlcykgPT4ge1xuICAgIGNvbnN0IHB1c2hUb0FjYyA9IChhY2MsIGNscykgPT4gY2xhc3Nlc1tjbHNdID8gYWNjLmNvbmNhdChjbHMpIDogYWNjO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjbGFzc2VzKS5yZWR1Y2UocHVzaFRvQWNjLCBbXSkuam9pbignICcpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzaGlmdFdlZWtOYW1lcyA9IChuYW1lcywgb2Zmc2V0KSA9PiAobmFtZXMuc2xpY2Uob2Zmc2V0KS5jb25jYXQobmFtZXMuc2xpY2UoMCwgb2Zmc2V0KSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGFwcHJveGltYXRlU3RyaW5nTWF0Y2hpbmcgPSAob2xkVGV4dE9yaWdpbiwgb2xkRm9ybWF0LCBuZXdUZXh0T3JpZ2luLCBjYXJldCkgPT4ge1xuICAgIC8vIFJlbW92ZSB0aGUgcmlnaHQgcGFydCBvZiB0aGUgY3Vyc29yLlxuICAgIC8vb2xkRm9ybWF0ID0gb2xkRm9ybWF0LnN1YnN0cmluZygwLCBjYXJldCArIG9sZFRleHQubGVuZ3RoIC0gbmV3VGV4dC5sZW5ndGgpO1xuICAgIGNvbnN0IG9sZEluZGV4ID0gY2FyZXQgKyBvbGRUZXh0T3JpZ2luLmxlbmd0aCAtIG5ld1RleHRPcmlnaW4ubGVuZ3RoO1xuICAgIGNvbnN0IG9sZFRleHRTZXBhcmF0b3IgPSBvbGRUZXh0T3JpZ2luW29sZEluZGV4XTtcbiAgICBjb25zdCBvbGRUZXh0ID0gb2xkVGV4dE9yaWdpbi5zdWJzdHJpbmcoMCwgY2FyZXQgKyBvbGRUZXh0T3JpZ2luLmxlbmd0aCAtIG5ld1RleHRPcmlnaW4ubGVuZ3RoKTtcbiAgICBjb25zdCBuZXdUZXh0ID0gbmV3VGV4dE9yaWdpbi5zdWJzdHJpbmcoMCwgY2FyZXQpO1xuICAgIGNvbnN0IGRpZmYgPSBbXTtcbiAgICAvLyBIYW5kbGUgdHlwaW5nIGEgc2luZ2xlIGNoYXJhY3RlciBvdmVyIHRoZSBzYW1lIHNlbGVjdGlvbi5cbiAgICBpZiAob2xkVGV4dCA9PT0gbmV3VGV4dCAmJiBjYXJldCA+IDApIHtcbiAgICAgICAgZGlmZi5wdXNoKFtvbGRGb3JtYXRbY2FyZXQgLSAxXSwgbmV3VGV4dFtjYXJldCAtIDFdXSk7XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgIH1cbiAgICBpZiAob2xkVGV4dC5pbmRleE9mKG5ld1RleHQpID09PSAwICYmIChuZXdUZXh0Lmxlbmd0aCA9PT0gMCB8fCBvbGRGb3JtYXRbbmV3VGV4dC5sZW5ndGggLSAxXSAhPT0gb2xkRm9ybWF0W25ld1RleHQubGVuZ3RoXSkpIHtcbiAgICAgICAgLy8gSGFuZGxlIERlbGV0ZS9CYWNrc3BhY2UuXG4gICAgICAgIGxldCBkZWxldGVkU3ltYm9sID0gXCJcIjtcbiAgICAgICAgLy9YWFg6XG4gICAgICAgIC8vIFdob2xlIHRleHQgaXMgcmVwbGFjZWQgd2l0aCBhIHNhbWUgY2hhclxuICAgICAgICAvLyBOYXN0eSBwYXRjaCByZXF1aXJlZCB0byBrZWVwIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGZpcnN0IHNlZ21lbnRcbiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBkaWZmLnB1c2goW29sZEZvcm1hdFswXSwgbmV3VGV4dFswXV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBuZXdUZXh0Lmxlbmd0aDsgaSA8IG9sZFRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChvbGRGb3JtYXRbaV0gIT09IGRlbGV0ZWRTeW1ib2wgJiYgb2xkRm9ybWF0W2ldICE9PSBcIl9cIikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRTeW1ib2wgPSBvbGRGb3JtYXRbaV07XG4gICAgICAgICAgICAgICAgZGlmZi5wdXNoKFtkZWxldGVkU3ltYm9sLCBcIlwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBpbnNlcnRpbmcgdGV4dCAodGhlIG5ldyB0ZXh0IGlzIGxvbmdlciB0aGFuIHRoZSBwcmV2aW91cyBvbmUpLlxuICAgIC8vIEhhbmRsZSB0eXBpbmcgb3ZlciBhIGxpdGVyYWwgYXMgd2VsbC5cbiAgICBpZiAobmV3VGV4dC5pbmRleE9mKG9sZFRleHQpID09PSAwIHx8IG9sZEZvcm1hdFtjYXJldCAtIDFdID09PSBcIl9cIikge1xuICAgICAgICBsZXQgc3ltYm9sID0gb2xkRm9ybWF0WzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5tYXgoMCwgb2xkVGV4dC5sZW5ndGggLSAxKTsgaSA8IG9sZEZvcm1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG9sZEZvcm1hdFtpXSAhPT0gXCJfXCIpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBvbGRGb3JtYXRbaV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtbc3ltYm9sLCBuZXdUZXh0W2NhcmV0IC0gMV1dXTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIGVudGVyaW5nIGEgc3BhY2Ugb3IgYSBzZXBhcmF0b3IsIGZvciBuYXZpZ2F0aW9uIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAgaWYgKG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PT0gXCIgXCIgfHwgKG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PT0gb2xkVGV4dFNlcGFyYXRvciAmJiBvbGRGb3JtYXRbb2xkSW5kZXhdID09PSAnXycpKSB7XG4gICAgICAgIHJldHVybiBbW29sZEZvcm1hdFtjYXJldCAtIDFdLCBcIl9cIl1dO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgdHlwaW5nIG92ZXIgYSBjb3JyZWN0bHkgc2VsZWN0ZWQgcGFydC5cbiAgICByZXR1cm4gW1tvbGRGb3JtYXRbY2FyZXQgLSAxXSwgbmV3VGV4dFtjYXJldCAtIDFdXV07XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRvbUNvbnRhaW5lckZhY3RvcnkgPSAodHlwZSkgPT4gKGNoaWxkcmVuLCBjbGFzc2VzID0gXCJcIiwgc3R5bGVzID0ge30pID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBjbGFzc2VzO1xuICAgIE9iamVjdC5rZXlzKHN0eWxlcykubWFwKGtleSA9PiBjb250YWluZXIuc3R5bGVba2V5XSA9IHN0eWxlc1trZXldKTtcbiAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gY2hpbGRyZW4gfHwgJyc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAoY2hpbGRyZW4gfHwgW10pLmZvckVhY2goY2hpbGQgPT4gY2hpbGQgJiYgY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKSk7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0NoYW5nZSA9IChjaGFuZ2VzLCBmaWVsZCkgPT4gY2hhbmdlc1tmaWVsZF0gIT09IHVuZGVmaW5lZDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNFeGlzdGluZ1ZhbHVlID0gKGNoYW5nZXMsIGZpZWxkKSA9PiBjaGFuZ2VzW2ZpZWxkXSAmJiBjaGFuZ2VzW2ZpZWxkXS5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2VzW2ZpZWxkXS5jdXJyZW50VmFsdWUgIT09IG51bGw7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNJblNlbGVjdGlvblJhbmdlID0gKHZhbHVlLCBzZWxlY3Rpb25SYW5nZSkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gc2VsZWN0aW9uUmFuZ2UgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0IDwgdmFsdWUgJiYgdmFsdWUgPCBlbmQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGVpdGhlciA9ICh2YWx1ZTEsIHZhbHVlMikgPT4gdmFsdWUxIHx8IHZhbHVlMjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbGFtcFJhbmdlID0gKHZhbHVlKSA9PiAoeyBzdGFydDogdmFsdWUsIGVuZDogdmFsdWUgfSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNFcXVhbFJhbmdlID0gKGluaXRpYWwsIHVwZGF0ZWQpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0OiBpbml0aWFsU3RhcnQsIGVuZDogaW5pdGlhbEVuZCB9ID0gaW5pdGlhbCB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICBjb25zdCB7IHN0YXJ0OiB1cGRhdGVkU3RhcnQsIGVuZDogdXBkYXRlZEVuZCB9ID0gdXBkYXRlZCB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICByZXR1cm4gaXNFcXVhbChpbml0aWFsU3RhcnQsIHVwZGF0ZWRTdGFydCkgJiYgaXNFcXVhbChpbml0aWFsRW5kLCB1cGRhdGVkRW5kKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBDcmVhdGVzIGEgbmV3IGRhdGUgYmFzZWQgb24gdGhlIGRhdGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGRhdGUgcG9ydGlvblxuICogYW5kIHRoZSB0aW1lIGluZm9ybWF0aW9uIGZyb20gdGhlIHRpbWUgcG9ydGlvbi5cbiAqIElmIGEgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwgcmV0dXJucyBgbnVsbGAuXG4gKi9cbmNvbnN0IG1lcmdlRGF0ZUFuZFRpbWUgPSAoZGF0ZSwgdGltZSkgPT4ge1xuICAgIGlmICghKGRhdGUgJiYgdGltZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIHRpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpLCB0aW1lLmdldE1pbGxpc2Vjb25kcygpKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbGFzdE1pbGxpc2Vjb25kT2ZEYXRlID0gKGRhdGUpID0+IHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDIzLCA1OSwgNTksIDk5OSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmV0dXJucyBhbiBhcnJheSB3aXRoIGRhdGVzIHJhbmdpbmcgYmV0d2VlbiBhbmQgaW5jbHVkaW5nIHRoZSBzcGVjaWZpZWQgc3RhcnQgYW5kXG4gKiBlbmQgZGF0ZXMgdGhhdCBhcmUgZXZhbHVhdGVkIGFzIGRpc2FibGVkLlxuICovXG5jb25zdCBkaXNhYmxlZERhdGVzSW5SYW5nZSA9IChzdGFydCwgZW5kLCBpc0RhdGVEaXNhYmxlZCkgPT4ge1xuICAgIGlmICghKHN0YXJ0ICYmIGVuZCAmJiBpc0RhdGVEaXNhYmxlZCkgfHwgKHN0YXJ0ID4gZW5kKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGRhdGVzID0gW107XG4gICAgbGV0IGN1cnJlbnQgPSBzdGFydDtcbiAgICB3aGlsZSAoY3VycmVudCA8PSBlbmQpIHtcbiAgICAgICAgaWYgKGlzRGF0ZURpc2FibGVkKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBkYXRlcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBhZGREYXlzKGN1cnJlbnQsIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZXM7XG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXMgKi9cbmNvbnN0IEVNUFRZX0RBVEEgPSBbW11dO1xuY29uc3QgQ0VMTFNfTEVOR1RIID0gNTtcbmNvbnN0IFJPV1NfTEVOR1RIID0gMjtcbmNvbnN0IEFDVElPTlMgPSB7XG4gICAgW0FjdGlvbi5MZWZ0XTogKGRhdGUpID0+IGFkZERlY2FkZXMoZGF0ZSwgLTEpLFxuICAgIFtBY3Rpb24uVXBdOiAoZGF0ZSkgPT4gYWRkRGVjYWRlcyhkYXRlLCAtNSksXG4gICAgW0FjdGlvbi5SaWdodF06IChkYXRlKSA9PiBhZGREZWNhZGVzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uRG93bl06IChkYXRlKSA9PiBhZGREZWNhZGVzKGRhdGUsIDUpLFxuICAgIFtBY3Rpb24uUHJldlZpZXddOiAoZGF0ZSkgPT4gYWRkQ2VudHVyaWVzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLk5leHRWaWV3XTogKGRhdGUpID0+IGFkZENlbnR1cmllcyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkZpcnN0SW5WaWV3XTogKGRhdGUpID0+IGZpcnN0RGVjYWRlT2ZDZW50dXJ5KGRhdGUpLFxuICAgIFtBY3Rpb24uTGFzdEluVmlld106IChkYXRlKSA9PiBsYXN0RGVjYWRlT2ZDZW50dXJ5KGRhdGUpXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENlbnR1cnlWaWV3U2VydmljZSB7XG4gICAgYWRkVG9EYXRlKG1pbiwgc2tpcCkge1xuICAgICAgICByZXR1cm4gYWRkQ2VudHVyaWVzKG1pbiwgc2tpcCk7XG4gICAgfVxuICAgIGRhdGVzTGlzdChzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIGNvdW50KS5tYXAoaSA9PiBhZGRDZW50dXJpZXMoc3RhcnQsIGkpKTtcbiAgICB9XG4gICAgZGF0YShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY2VsbFVJRCwgZm9jdXNlZERhdGUsIGlzQWN0aXZlVmlldywgbWF4LCBtaW4sIHNlbGVjdGVkRGF0ZSwgc2VsZWN0aW9uUmFuZ2UgPSBFTVBUWV9TRUxFQ1RJT05SQU5HRSwgdmlld0RhdGUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmICghdmlld0RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9EQVRBO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxzID0gcmFuZ2UoMCwgQ0VMTFNfTEVOR1RIKTtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlID0gZmlyc3REZWNhZGVPZkNlbnR1cnkodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBsYXN0RGF0ZSA9IGxhc3REZWNhZGVPZkNlbnR1cnkodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkRGF0ZUluUmFuZ2UgPSBpc0luUmFuZ2Uoc2VsZWN0ZWREYXRlLCBtaW4sIG1heCk7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIFJPV1NfTEVOR1RIKS5tYXAocm93T2Zmc2V0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VEYXRlID0gYWRkRGVjYWRlcyhmaXJzdERhdGUsIHJvd09mZnNldCAqIENFTExTX0xFTkdUSCk7XG4gICAgICAgICAgICByZXR1cm4gY2VsbHMubWFwKGNlbGxPZmZzZXQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRlID0gdGhpcy5ub3JtYWxpemUoYWRkRGVjYWRlcyhiYXNlRGF0ZSwgY2VsbE9mZnNldCksIG1pbiwgbWF4KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKGNlbGxEYXRlLCBtaW4sIG1heCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VTdGFydCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VFbmQgPSB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlLmVuZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbk1pZGRsZSA9ICFpc1JhbmdlU3RhcnQgJiYgIWlzUmFuZ2VFbmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZU1pZCA9IGlzSW5NaWRkbGUgJiYgaXNJblNlbGVjdGlvblJhbmdlKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHRoaXMudmFsdWUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpZDogYCR7Y2VsbFVJRH0ke2NlbGxEYXRlLmdldFRpbWUoKX1gLFxuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgZm9jdXNlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0FjdGl2ZVZpZXcgJiYgaXNTZWxlY3RlZERhdGVJblJhbmdlICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0ZWREYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrZW5kOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVN0YXJ0OiBpc1JhbmdlU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VNaWQ6IGlzUmFuZ2VNaWQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VFbmQ6IGlzUmFuZ2VFbmQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VTcGxpdEVuZDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGxhc3REYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0U3RhcnQ6IGlzUmFuZ2VNaWQgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmaXJzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuY2VsbFRpdGxlKGNlbGxEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNlbGxEYXRlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNFcXVhbChjYW5kaWRhdGUsIGV4cGVjdGVkKSB7XG4gICAgICAgIGlmICghY2FuZGlkYXRlIHx8ICFleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFllYXJPZkRlY2FkZShjYW5kaWRhdGUpLmdldEZ1bGxZZWFyKCkgPT09IGZpcnN0WWVhck9mRGVjYWRlKGV4cGVjdGVkKS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgICBpc0luQXJyYXkoZGF0ZSwgZGF0ZXMpIHtcbiAgICAgICAgaWYgKCFkYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICByZXR1cm4gZGF0ZXNbMF0uZ2V0RnVsbFllYXIoKSA8PSB5ZWFyICYmIHllYXIgPD0gKGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdLmdldEZ1bGxZZWFyKCkgKyA5OSk7XG4gICAgfVxuICAgIGlzSW5SYW5nZShjYW5kaWRhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBmaXJzdFllYXJPZkRlY2FkZShjYW5kaWRhdGUpLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGFib3ZlTWluID0gIW1pbiB8fCBmaXJzdFllYXJPZkRlY2FkZShtaW4pLmdldEZ1bGxZZWFyKCkgPD0geWVhcjtcbiAgICAgICAgY29uc3QgYmVsb3dNYXggPSAhbWF4IHx8IHllYXIgPD0gZmlyc3RZZWFyT2ZEZWNhZGUobWF4KS5nZXRGdWxsWWVhcigpO1xuICAgICAgICByZXR1cm4gYWJvdmVNaW4gJiYgYmVsb3dNYXg7XG4gICAgfVxuICAgIGJlZ2lubmluZ09mUGVyaW9kKGRhdGUpIHtcbiAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdFllYXIgPSBmaXJzdFllYXJPZkRlY2FkZShmaXJzdERlY2FkZU9mQ2VudHVyeShkYXRlKSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVEYXRlKGZpcnN0WWVhci5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICB9XG4gICAgaXNSYW5nZVN0YXJ0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXRGdWxsWWVhcigpICUgMTAwMCA9PT0gMDtcbiAgICB9XG4gICAgbW92ZSh2YWx1ZSwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gQUNUSU9OU1thY3Rpb25dO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGlmaWVyKHZhbHVlKTtcbiAgICB9XG4gICAgY2VsbFRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmaXJzdFllYXJPZkRlY2FkZSh2YWx1ZSkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgIH1cbiAgICBuYXZpZ2F0aW9uVGl0bGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gZmlyc3REZWNhZGVPZkNlbnR1cnkodmFsdWUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIH1cbiAgICB0aXRsZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2ZpcnN0RGVjYWRlT2ZDZW50dXJ5KHZhbHVlKS5nZXRGdWxsWWVhcigpfSAtICR7bGFzdERlY2FkZU9mQ2VudHVyeSh2YWx1ZSkuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cbiAgICByb3dMZW5ndGgoXykge1xuICAgICAgICByZXR1cm4gQ0VMTFNfTEVOR1RIO1xuICAgIH1cbiAgICBza2lwKHZhbHVlLCBtaW4pIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uSW5DZW50dXJpZXMobWluLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRvdGFsKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluQ2VudHVyaWVzKG1pbiwgbWF4KSArIDE7XG4gICAgfVxuICAgIHZhbHVlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPyBmaXJzdFllYXJPZkRlY2FkZShjdXJyZW50KS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgOiAnJztcbiAgICB9XG4gICAgdmlld0RhdGUoZGF0ZSwgbWF4LCB2aWV3c0NvdW50ID0gMSkge1xuICAgICAgICBjb25zdCB2aWV3c0luUmFuZ2UgPSB0aGlzLnRvdGFsKGRhdGUsIG1heCk7XG4gICAgICAgIGlmICh2aWV3c0luUmFuZ2UgPCB2aWV3c0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBjZW50dXJpZXNUb1N1YnRyYWN0ID0gdmlld3NDb3VudCAtIHZpZXdzSW5SYW5nZTtcbiAgICAgICAgICAgIHJldHVybiBhZGRDZW50dXJpZXMoZGF0ZSwgLTEgKiBjZW50dXJpZXNUb1N1YnRyYWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gICAgbm9ybWFsaXplKGNlbGxEYXRlLCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoY2VsbERhdGUgPCBtaW4gJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtaW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1pbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxEYXRlID4gbWF4ICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtYXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRGF0ZTtcbiAgICB9XG59XG5DZW50dXJ5Vmlld1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgRU1QVFlfREFUQSQxID0gW1tdXTtcbmNvbnN0IENFTExTX0xFTkdUSCQxID0gNTtcbmNvbnN0IFJPV1NfTEVOR1RIJDEgPSAyO1xuY29uc3QgQUNUSU9OUyQxID0ge1xuICAgIFtBY3Rpb24uTGVmdF06IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5VcF06IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCAtNSksXG4gICAgW0FjdGlvbi5SaWdodF06IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkRvd25dOiAoZGF0ZSkgPT4gYWRkWWVhcnMoZGF0ZSwgNSksXG4gICAgW0FjdGlvbi5QcmV2Vmlld106IChkYXRlKSA9PiBhZGREZWNhZGVzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLk5leHRWaWV3XTogKGRhdGUpID0+IGFkZERlY2FkZXMoZGF0ZSwgMSksXG4gICAgW0FjdGlvbi5GaXJzdEluVmlld106IChkYXRlKSA9PiBmaXJzdFllYXJPZkRlY2FkZShkYXRlKSxcbiAgICBbQWN0aW9uLkxhc3RJblZpZXddOiAoZGF0ZSkgPT4gbGFzdFllYXJPZkRlY2FkZShkYXRlKVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEZWNhZGVWaWV3U2VydmljZSB7XG4gICAgYWRkVG9EYXRlKG1pbiwgc2tpcCkge1xuICAgICAgICByZXR1cm4gYWRkRGVjYWRlcyhtaW4sIHNraXApO1xuICAgIH1cbiAgICBkYXRlc0xpc3Qoc3RhcnQsIGNvdW50KSB7XG4gICAgICAgIHJldHVybiByYW5nZSgwLCBjb3VudCkubWFwKGkgPT4gYWRkRGVjYWRlcyhzdGFydCwgaSkpO1xuICAgIH1cbiAgICBkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjZWxsVUlELCBmb2N1c2VkRGF0ZSwgaXNBY3RpdmVWaWV3LCBtYXgsIG1pbiwgc2VsZWN0ZWREYXRlLCBzZWxlY3Rpb25SYW5nZSA9IEVNUFRZX1NFTEVDVElPTlJBTkdFLCB2aWV3RGF0ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKCF2aWV3RGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0RBVEEkMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxscyA9IHJhbmdlKDAsIENFTExTX0xFTkdUSCQxKTtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlID0gZmlyc3RZZWFyT2ZEZWNhZGUodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBsYXN0RGF0ZSA9IGxhc3RZZWFyT2ZEZWNhZGUodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkRGF0ZUluUmFuZ2UgPSBpc0luUmFuZ2Uoc2VsZWN0ZWREYXRlLCBtaW4sIG1heCk7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIFJPV1NfTEVOR1RIJDEpLm1hcChyb3dPZmZzZXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZURhdGUgPSBhZGRZZWFycyhmaXJzdERhdGUsIHJvd09mZnNldCAqIENFTExTX0xFTkdUSCQxKTtcbiAgICAgICAgICAgIHJldHVybiBjZWxscy5tYXAoY2VsbE9mZnNldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGUgPSB0aGlzLm5vcm1hbGl6ZShhZGRZZWFycyhiYXNlRGF0ZSwgY2VsbE9mZnNldCksIG1pbiwgbWF4KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKGNlbGxEYXRlLCBtaW4sIG1heCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VTdGFydCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VFbmQgPSB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlLmVuZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbk1pZGRsZSA9ICFpc1JhbmdlU3RhcnQgJiYgIWlzUmFuZ2VFbmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZU1pZCA9IGlzSW5NaWRkbGUgJiYgaXNJblNlbGVjdGlvblJhbmdlKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHRoaXMudmFsdWUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpZDogYCR7Y2VsbFVJRH0ke2NlbGxEYXRlLmdldFRpbWUoKX1gLFxuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgZm9jdXNlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0FjdGl2ZVZpZXcgJiYgaXNTZWxlY3RlZERhdGVJblJhbmdlICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0ZWREYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrZW5kOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVN0YXJ0OiBpc1JhbmdlU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VNaWQ6IGlzUmFuZ2VNaWQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VFbmQ6IGlzUmFuZ2VFbmQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VTcGxpdEVuZDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGxhc3REYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0U3RhcnQ6IGlzUmFuZ2VNaWQgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmaXJzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuY2VsbFRpdGxlKGNlbGxEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNlbGxEYXRlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNFcXVhbChjYW5kaWRhdGUsIGV4cGVjdGVkKSB7XG4gICAgICAgIGlmICghY2FuZGlkYXRlIHx8ICFleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gZXhwZWN0ZWQuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gICAgaXNJbkFycmF5KGRhdGUsIGRhdGVzKSB7XG4gICAgICAgIGlmICghZGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgcmV0dXJuIGRhdGVzWzBdLmdldEZ1bGxZZWFyKCkgPD0geWVhciAmJiB5ZWFyIDw9IChkYXRlc1tkYXRlcy5sZW5ndGggLSAxXS5nZXRGdWxsWWVhcigpICsgOSk7XG4gICAgfVxuICAgIGlzSW5SYW5nZShjYW5kaWRhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSBjYW5kaWRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgYWJvdmVNaW4gPSAhbWluIHx8IG1pbi5nZXRGdWxsWWVhcigpIDw9IHllYXI7XG4gICAgICAgIGNvbnN0IGJlbG93TWF4ID0gIW1heCB8fCB5ZWFyIDw9IG1heC5nZXRGdWxsWWVhcigpO1xuICAgICAgICByZXR1cm4gYWJvdmVNaW4gJiYgYmVsb3dNYXg7XG4gICAgfVxuICAgIGJlZ2lubmluZ09mUGVyaW9kKGRhdGUpIHtcbiAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdFllYXIgPSBmaXJzdFllYXJPZkRlY2FkZShkYXRlKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURhdGUoZmlyc3RZZWFyLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgIH1cbiAgICBpc1JhbmdlU3RhcnQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgJSAxMDAgPT09IDA7XG4gICAgfVxuICAgIG1vdmUodmFsdWUsIGFjdGlvbikge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IEFDVElPTlMkMVthY3Rpb25dO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGlmaWVyKHZhbHVlKTtcbiAgICB9XG4gICAgY2VsbFRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG5hdmlnYXRpb25UaXRsZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBmaXJzdFllYXJPZkRlY2FkZSh2YWx1ZSkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHRpdGxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7Zmlyc3RZZWFyT2ZEZWNhZGUodmFsdWUpLmdldEZ1bGxZZWFyKCl9IC0gJHtsYXN0WWVhck9mRGVjYWRlKHZhbHVlKS5nZXRGdWxsWWVhcigpfWA7XG4gICAgfVxuICAgIHJvd0xlbmd0aChfKSB7XG4gICAgICAgIHJldHVybiBDRUxMU19MRU5HVEgkMTtcbiAgICB9XG4gICAgc2tpcCh2YWx1ZSwgbWluKSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluRGVjYWRlcyhtaW4sIHZhbHVlKTtcbiAgICB9XG4gICAgdG90YWwobWluLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uSW5EZWNhZGVzKG1pbiwgbWF4KSArIDE7XG4gICAgfVxuICAgIHZhbHVlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIH1cbiAgICB2aWV3RGF0ZShkYXRlLCBtYXgsIHZpZXdzQ291bnQgPSAxKSB7XG4gICAgICAgIGNvbnN0IHZpZXdzSW5SYW5nZSA9IHRoaXMudG90YWwoZGF0ZSwgbWF4KTtcbiAgICAgICAgaWYgKHZpZXdzSW5SYW5nZSA8IHZpZXdzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2FkZXNUb1N1YnRyYWN0ID0gdmlld3NDb3VudCAtIHZpZXdzSW5SYW5nZTtcbiAgICAgICAgICAgIHJldHVybiBhZGREZWNhZGVzKGRhdGUsIC0xICogZGVjYWRlc1RvU3VidHJhY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBub3JtYWxpemUoY2VsbERhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmIChjZWxsRGF0ZSA8IG1pbiAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIG1pbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGUobWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbERhdGUgPiBtYXggJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxEYXRlO1xuICAgIH1cbn1cbkRlY2FkZVZpZXdTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXMgKi9cbmNvbnN0IEVNUFRZX0RBVEEkMiA9IFtbXV07XG5jb25zdCBDRUxMU19MRU5HVEgkMiA9IDc7XG5jb25zdCBST1dTX0xFTkdUSCQyID0gNjtcbmNvbnN0IEFDVElPTlMkMiA9IHtcbiAgICBbQWN0aW9uLkxlZnRdOiAoZGF0ZSkgPT4gYWRkRGF5cyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5VcF06IChkYXRlKSA9PiBhZGRXZWVrcyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5SaWdodF06IChkYXRlKSA9PiBhZGREYXlzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uRG93bl06IChkYXRlKSA9PiBhZGRXZWVrcyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLlByZXZWaWV3XTogKGRhdGUpID0+IGFkZE1vbnRocyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5OZXh0Vmlld106IChkYXRlKSA9PiBhZGRNb250aHMoZGF0ZSwgMSksXG4gICAgW0FjdGlvbi5GaXJzdEluVmlld106IChkYXRlKSA9PiBmaXJzdERheU9mTW9udGgoZGF0ZSksXG4gICAgW0FjdGlvbi5MYXN0SW5WaWV3XTogKGRhdGUpID0+IGxhc3REYXlPZk1vbnRoKGRhdGUpXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE1vbnRoVmlld1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKF9pbnRsU2VydmljZSkge1xuICAgICAgICB0aGlzLl9pbnRsU2VydmljZSA9IF9pbnRsU2VydmljZTtcbiAgICB9XG4gICAgYWRkVG9EYXRlKG1pbiwgc2tpcCkge1xuICAgICAgICByZXR1cm4gYWRkTW9udGhzKG1pbiwgc2tpcCk7XG4gICAgfVxuICAgIGRhdGVzTGlzdChzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIGNvdW50KS5tYXAoaSA9PiBhZGRNb250aHMoc3RhcnQsIGkpKTtcbiAgICB9XG4gICAgZGF0YShvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY2VsbFVJRCwgZm9jdXNlZERhdGUsIGlzQWN0aXZlVmlldywgbWF4LCBtaW4sIHNlbGVjdGVkRGF0ZSwgc2VsZWN0aW9uUmFuZ2UgPSBFTVBUWV9TRUxFQ1RJT05SQU5HRSwgdmlld0RhdGUsIGlzRGF0ZURpc2FibGVkID0gKCkgPT4gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmICghdmlld0RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9EQVRBJDI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3RNb250aERhdGUgPSBmaXJzdERheU9mTW9udGgodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBmaXJzdE1vbnRoRGF5ID0gZ2V0RGF0ZShmaXJzdE1vbnRoRGF0ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RNb250aERhdGUgPSBsYXN0RGF5T2ZNb250aCh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGxhc3RNb250aERheSA9IGdldERhdGUobGFzdE1vbnRoRGF0ZSk7XG4gICAgICAgIGNvbnN0IGJhY2t3YXJkID0gLTE7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWREYXRlSW5SYW5nZSA9IGlzSW5SYW5nZShzZWxlY3RlZERhdGUsIG1pbiwgbWF4KTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGRheU9mV2VlayhmaXJzdE1vbnRoRGF0ZSwgdGhpcy5faW50bFNlcnZpY2UuZmlyc3REYXkoKSwgYmFja3dhcmQpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHJhbmdlKDAsIENFTExTX0xFTkdUSCQyKTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBnZXRUb2RheSgpO1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgUk9XU19MRU5HVEgkMikubWFwKHJvd09mZnNldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlRGF0ZSA9IGFkZERheXMoZGF0ZSwgcm93T2Zmc2V0ICogQ0VMTFNfTEVOR1RIJDIpO1xuICAgICAgICAgICAgcmV0dXJuIGNlbGxzLm1hcChjZWxsT2Zmc2V0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsRGF0ZSA9IHRoaXMubm9ybWFsaXplKGFkZERheXMoYmFzZURhdGUsIGNlbGxPZmZzZXQpLCBtaW4sIG1heCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbERheSA9IGdldERhdGUoY2VsbERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyTW9udGggPSBjZWxsRGF5IDwgZmlyc3RNb250aERheSB8fCBjZWxsRGF5ID4gbGFzdE1vbnRoRGF5O1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPSBjZWxsRGF0ZSA8IG1pbiB8fCBjZWxsRGF0ZSA+IG1heDtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJNb250aCB8fCBvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlU3RhcnQgPSB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlRW5kID0gdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZS5lbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5NaWRkbGUgPSAhaXNSYW5nZVN0YXJ0ICYmICFpc1JhbmdlRW5kO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VNaWQgPSBpc0luTWlkZGxlICYmIGlzSW5TZWxlY3Rpb25SYW5nZShjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiB0aGlzLnZhbHVlKGNlbGxEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGAke2NlbGxVSUR9JHtjZWxsRGF0ZS5nZXRUaW1lKCl9YCxcbiAgICAgICAgICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGZvY3VzZWREYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXNBY3RpdmVWaWV3ICYmIGlzU2VsZWN0ZWREYXRlSW5SYW5nZSAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGVkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzV2Vla2VuZDogdGhpcy5pc1dlZWtlbmQoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3RhcnQ6IGlzUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZU1pZDogaXNSYW5nZU1pZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZUVuZDogaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0U3RhcnQ6IGlzUmFuZ2VNaWQgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmaXJzdE1vbnRoRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VTcGxpdEVuZDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGxhc3RNb250aERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuY2VsbFRpdGxlKGNlbGxEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNlbGxEYXRlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBpc0RhdGVEaXNhYmxlZChjZWxsRGF0ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0VxdWFsKGNhbmRpZGF0ZSwgZXhwZWN0ZWQpIHtcbiAgICAgICAgaWYgKCFjYW5kaWRhdGUgfHwgIWV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldERhdGUoY2FuZGlkYXRlKS5nZXRUaW1lKCkgPT09IGdldERhdGUoZXhwZWN0ZWQpLmdldFRpbWUoKTtcbiAgICB9XG4gICAgaXNJbkFycmF5KGRhdGUsIGRhdGVzKSB7XG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckJvdW5kID0gdGhpcy5iZWdpbm5pbmdPZlBlcmlvZChkYXRlc1swXSk7XG4gICAgICAgIGNvbnN0IHVwcGVyQm91bmQgPSB0aGlzLmJlZ2lubmluZ09mUGVyaW9kKGFkZE1vbnRocyhkYXRlc1tkYXRlcy5sZW5ndGggLSAxXSwgMSkpO1xuICAgICAgICByZXR1cm4gbG93ZXJCb3VuZCA8PSBkYXRlICYmIGRhdGUgPCB1cHBlckJvdW5kO1xuICAgIH1cbiAgICBpc0luUmFuZ2UoY2FuZGlkYXRlLCBtaW4sIG1heCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldERhdGUoY2FuZGlkYXRlKTtcbiAgICAgICAgY29uc3QgYWJvdmVNaW4gPSAhbWluIHx8IGdldERhdGUobWluKSA8PSB2YWx1ZTtcbiAgICAgICAgY29uc3QgYmVsb3dNYXggPSAhbWF4IHx8IHZhbHVlIDw9IGdldERhdGUobWF4KTtcbiAgICAgICAgcmV0dXJuIGFib3ZlTWluICYmIGJlbG93TWF4O1xuICAgIH1cbiAgICBiZWdpbm5pbmdPZlBlcmlvZChkYXRlKSB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpO1xuICAgIH1cbiAgICBpc1JhbmdlU3RhcnQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZS5nZXRNb250aCgpO1xuICAgIH1cbiAgICBtb3ZlKHZhbHVlLCBhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBBQ1RJT05TJDJbYWN0aW9uXTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RpZmllcih2YWx1ZSk7XG4gICAgfVxuICAgIGNlbGxUaXRsZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50bFNlcnZpY2UuZm9ybWF0RGF0ZSh2YWx1ZSwgJ0QnKTtcbiAgICB9XG4gICAgbmF2aWdhdGlvblRpdGxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pc1JhbmdlU3RhcnQodmFsdWUpID8gdmFsdWUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogdGhpcy5hYmJyTW9udGhOYW1lcygpW3ZhbHVlLmdldE1vbnRoKCldO1xuICAgIH1cbiAgICB0aXRsZShjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLndpZGVNb250aE5hbWVzKClbY3VycmVudC5nZXRNb250aCgpXX0gJHtjdXJyZW50LmdldEZ1bGxZZWFyKCl9YDtcbiAgICB9XG4gICAgcm93TGVuZ3RoKHByZXBlbmRDZWxsKSB7XG4gICAgICAgIHJldHVybiBDRUxMU19MRU5HVEgkMiArIChwcmVwZW5kQ2VsbCA/IDEgOiAwKTtcbiAgICB9XG4gICAgc2tpcCh2YWx1ZSwgbWluKSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluTW9udGhzKG1pbiwgdmFsdWUpO1xuICAgIH1cbiAgICB0b3RhbChtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25Jbk1vbnRocyhtaW4sIG1heCkgKyAxO1xuICAgIH1cbiAgICB2YWx1ZShjdXJyZW50KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50ID8gY3VycmVudC5nZXREYXRlKCkudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgfVxuICAgIHZpZXdEYXRlKGRhdGUsIG1heCwgdmlld3NDb3VudCA9IDEpIHtcbiAgICAgICAgY29uc3Qgdmlld3NJblJhbmdlID0gdGhpcy50b3RhbChkYXRlLCBtYXgpO1xuICAgICAgICBpZiAodmlld3NJblJhbmdlIDwgdmlld3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgbW9udGhzVG9TdWJ0cmFjdCA9IHZpZXdzQ291bnQgLSB2aWV3c0luUmFuZ2U7XG4gICAgICAgICAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC0xICogbW9udGhzVG9TdWJ0cmFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIGlzV2Vla2VuZChkYXRlKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5faW50bFNlcnZpY2Uud2Vla2VuZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChlbmQgPCBzdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIGRheSA8PSBlbmQgfHwgc3RhcnQgPD0gZGF5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFydCA8PSBkYXkgJiYgZGF5IDw9IGVuZDtcbiAgICB9XG4gICAgYWJick1vbnRoTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsU2VydmljZS5kYXRlRm9ybWF0TmFtZXMoeyBuYW1lVHlwZTogJ2FiYnJldmlhdGVkJywgdHlwZTogJ21vbnRocycgfSk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZShjZWxsRGF0ZSwgbWluLCBtYXgpIHtcbiAgICAgICAgaWYgKGNlbGxEYXRlIDwgbWluICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtaW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsRGF0ZSA+IG1heCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGUobWF4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2VsbERhdGU7XG4gICAgfVxuICAgIHdpZGVNb250aE5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50bFNlcnZpY2UuZGF0ZUZvcm1hdE5hbWVzKHsgbmFtZVR5cGU6ICd3aWRlJywgdHlwZTogJ21vbnRocycgfSk7XG4gICAgfVxufVxuTW9udGhWaWV3U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTW9udGhWaWV3U2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH1cbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgRU1QVFlfREFUQSQzID0gW1tdXTtcbmNvbnN0IENFTExTX0xFTkdUSCQzID0gNTtcbmNvbnN0IFJPV1NfTEVOR1RIJDMgPSAzO1xuY29uc3QgdXBTdGVwID0gKG1vbnRoKSA9PiB7XG4gICAgaWYgKG1vbnRoID4gNCkge1xuICAgICAgICByZXR1cm4gLTU7XG4gICAgfVxuICAgIGlmIChtb250aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0yO1xuICAgIH1cbiAgICByZXR1cm4gLTc7XG59O1xuY29uc3QgZG93blN0ZXAgPSAobW9udGgpID0+IHtcbiAgICBpZiAobW9udGggPCA3KSB7XG4gICAgICAgIHJldHVybiA1O1xuICAgIH1cbiAgICBpZiAobW9udGggPCAxMCkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIDI7XG59O1xuY29uc3QgQUNUSU9OUyQzID0ge1xuICAgIFtBY3Rpb24uTGVmdF06IChkYXRlKSA9PiBhZGRNb250aHMoZGF0ZSwgLTEpLFxuICAgIFtBY3Rpb24uVXBdOiAoZGF0ZSkgPT4gYWRkTW9udGhzKGRhdGUsIHVwU3RlcChkYXRlLmdldE1vbnRoKCkpKSxcbiAgICBbQWN0aW9uLlJpZ2h0XTogKGRhdGUpID0+IGFkZE1vbnRocyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkRvd25dOiAoZGF0ZSkgPT4gYWRkTW9udGhzKGRhdGUsIGRvd25TdGVwKGRhdGUuZ2V0TW9udGgoKSkpLFxuICAgIFtBY3Rpb24uUHJldlZpZXddOiAoZGF0ZSkgPT4gYWRkWWVhcnMoZGF0ZSwgLTEpLFxuICAgIFtBY3Rpb24uTmV4dFZpZXddOiAoZGF0ZSkgPT4gYWRkWWVhcnMoZGF0ZSwgMSksXG4gICAgW0FjdGlvbi5GaXJzdEluVmlld106IChkYXRlKSA9PiBmaXJzdE1vbnRoT2ZZZWFyKGRhdGUpLFxuICAgIFtBY3Rpb24uTGFzdEluVmlld106IChkYXRlKSA9PiBsYXN0TW9udGhPZlllYXIoZGF0ZSlcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgWWVhclZpZXdTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihfaW50bFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5faW50bFNlcnZpY2UgPSBfaW50bFNlcnZpY2U7XG4gICAgfVxuICAgIGFkZFRvRGF0ZShtaW4sIHNraXApIHtcbiAgICAgICAgcmV0dXJuIGFkZFllYXJzKG1pbiwgc2tpcCk7XG4gICAgfVxuICAgIGRhdGVzTGlzdChzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIGNvdW50KS5tYXAoaSA9PiBhZGRZZWFycyhzdGFydCwgaSkpO1xuICAgIH1cbiAgICBkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjZWxsVUlELCBmb2N1c2VkRGF0ZSwgaXNBY3RpdmVWaWV3LCBtYXgsIG1pbiwgc2VsZWN0ZWREYXRlLCBzZWxlY3Rpb25SYW5nZSA9IEVNUFRZX1NFTEVDVElPTlJBTkdFLCB2aWV3RGF0ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKCF2aWV3RGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0RBVEEkMztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb250aHMgPSB0aGlzLmFiYnJNb250aE5hbWVzKCk7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWREYXRlSW5SYW5nZSA9IGlzSW5SYW5nZShzZWxlY3RlZERhdGUsIG1pbiwgbWF4KTtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlID0gZmlyc3RNb250aE9mWWVhcih2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGxhc3REYXRlID0gbGFzdE1vbnRoT2ZZZWFyKHZpZXdEYXRlKTtcbiAgICAgICAgY29uc3QgY3VycmVudFllYXIgPSBmaXJzdERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSByYW5nZSgwLCBDRUxMU19MRU5HVEgkMyk7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIFJPV1NfTEVOR1RIJDMpLm1hcChyb3dPZmZzZXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZURhdGUgPSBhZGRNb250aHMoZmlyc3REYXRlLCByb3dPZmZzZXQgKiBDRUxMU19MRU5HVEgkMyk7XG4gICAgICAgICAgICByZXR1cm4gY2VsbHMubWFwKGNlbGxPZmZzZXQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRlID0gdGhpcy5ub3JtYWxpemUoYWRkTW9udGhzKGJhc2VEYXRlLCBjZWxsT2Zmc2V0KSwgbWluLCBtYXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRZZWFyID0gY3VycmVudFllYXIgPCBjZWxsRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoY2VsbERhdGUsIG1pbiwgbWF4KSB8fCBjaGFuZ2VkWWVhcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVN0YXJ0ID0gdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZUVuZCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2UuZW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luTWlkZGxlID0gIWlzUmFuZ2VTdGFydCAmJiAhaXNSYW5nZUVuZDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlTWlkID0gaXNJbk1pZGRsZSAmJiBpc0luU2VsZWN0aW9uUmFuZ2UoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogbW9udGhzW2NlbGxEYXRlLmdldE1vbnRoKCldLFxuICAgICAgICAgICAgICAgICAgICBpZDogYCR7Y2VsbFVJRH0ke2NlbGxEYXRlLmdldFRpbWUoKX1gLFxuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgZm9jdXNlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0FjdGl2ZVZpZXcgJiYgaXNTZWxlY3RlZERhdGVJblJhbmdlICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0ZWREYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrZW5kOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVN0YXJ0OiBpc1JhbmdlU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VNaWQ6IGlzUmFuZ2VNaWQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VFbmQ6IGlzUmFuZ2VFbmQsXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VTcGxpdEVuZDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGxhc3REYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0U3RhcnQ6IGlzUmFuZ2VNaWQgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmaXJzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHRvZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuY2VsbFRpdGxlKGNlbGxEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNlbGxEYXRlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNFcXVhbChjYW5kaWRhdGUsIGV4cGVjdGVkKSB7XG4gICAgICAgIGlmICghY2FuZGlkYXRlIHx8ICFleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGUuZ2V0RnVsbFllYXIoKSA9PT0gZXhwZWN0ZWQuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgICAgY2FuZGlkYXRlLmdldE1vbnRoKCkgPT09IGV4cGVjdGVkLmdldE1vbnRoKCk7XG4gICAgfVxuICAgIGlzSW5BcnJheShkYXRlLCBkYXRlcykge1xuICAgICAgICBpZiAoIWRhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHJldHVybiBkYXRlc1swXS5nZXRGdWxsWWVhcigpIDw9IHllYXIgJiYgeWVhciA8PSBkYXRlc1tkYXRlcy5sZW5ndGggLSAxXS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgICBpc0luUmFuZ2UoY2FuZGlkYXRlLCBtaW4sIG1heCkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVWYWx1ZSA9IGNyZWF0ZURhdGUoY2FuZGlkYXRlLmdldEZ1bGxZZWFyKCksIGNhbmRpZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgY29uc3QgYWJvdmVNaW4gPSAhbWluIHx8IGNyZWF0ZURhdGUobWluLmdldEZ1bGxZZWFyKCksIG1pbi5nZXRNb250aCgpLCAxKSA8PSBjYW5kaWRhdGVWYWx1ZTtcbiAgICAgICAgY29uc3QgYmVsb3dNYXggPSAhbWF4IHx8IGNhbmRpZGF0ZVZhbHVlIDw9IGNyZWF0ZURhdGUobWF4LmdldEZ1bGxZZWFyKCksIG1heC5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgcmV0dXJuIGFib3ZlTWluICYmIGJlbG93TWF4O1xuICAgIH1cbiAgICBiZWdpbm5pbmdPZlBlcmlvZChkYXRlKSB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgICB9XG4gICAgaXNSYW5nZVN0YXJ0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXRGdWxsWWVhcigpICUgMTAgPT09IDA7XG4gICAgfVxuICAgIG1vdmUodmFsdWUsIGFjdGlvbikge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IEFDVElPTlMkM1thY3Rpb25dO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGlmaWVyKHZhbHVlKTtcbiAgICB9XG4gICAgY2VsbFRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRGdWxsWWVhcigpfSAke3RoaXMudmFsdWUodmFsdWUpfWA7XG4gICAgfVxuICAgIG5hdmlnYXRpb25UaXRsZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSh2YWx1ZSk7XG4gICAgfVxuICAgIHRpdGxlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIH1cbiAgICByb3dMZW5ndGgoXykge1xuICAgICAgICByZXR1cm4gQ0VMTFNfTEVOR1RIJDM7XG4gICAgfVxuICAgIHNraXAodmFsdWUsIG1pbikge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25JblllYXJzKG1pbiwgdmFsdWUpO1xuICAgIH1cbiAgICB0b3RhbChtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25JblllYXJzKG1pbiwgbWF4KSArIDE7XG4gICAgfVxuICAgIHZhbHVlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPyB0aGlzLmFiYnJNb250aE5hbWVzKClbY3VycmVudC5nZXRNb250aCgpXSA6ICcnO1xuICAgIH1cbiAgICB2aWV3RGF0ZShkYXRlLCBtYXgsIHZpZXdzQ291bnQgPSAxKSB7XG4gICAgICAgIGNvbnN0IHZpZXdzSW5SYW5nZSA9IHRoaXMudG90YWwoZGF0ZSwgbWF4KTtcbiAgICAgICAgaWYgKHZpZXdzSW5SYW5nZSA8IHZpZXdzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJzVG9TdWJ0cmFjdCA9IHZpZXdzQ291bnQgLSB2aWV3c0luUmFuZ2U7XG4gICAgICAgICAgICByZXR1cm4gYWRkWWVhcnMoZGF0ZSwgLTEgKiB5ZWFyc1RvU3VidHJhY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBhYmJyTW9udGhOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGxTZXJ2aWNlLmRhdGVGb3JtYXROYW1lcyh7IG5hbWVUeXBlOiAnYWJicmV2aWF0ZWQnLCB0eXBlOiAnbW9udGhzJyB9KTtcbiAgICB9XG4gICAgbm9ybWFsaXplKGNlbGxEYXRlLCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoY2VsbERhdGUgPCBtaW4gJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtaW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1pbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxEYXRlID4gbWF4ICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtYXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRGF0ZTtcbiAgICB9XG59XG5ZZWFyVmlld1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblllYXJWaWV3U2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFRoZSBFbnVtIHdoaWNoIGRlZmluZXMgYWxsIHBvc3NpYmxlIENhbGVuZGFyIHZpZXcgdHlwZXMuXG4gKi9cbnZhciBDYWxlbmRhclZpZXdFbnVtO1xuKGZ1bmN0aW9uIChDYWxlbmRhclZpZXdFbnVtKSB7XG4gICAgQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtW1wibW9udGhcIl0gPSAwXSA9IFwibW9udGhcIjtcbiAgICBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW1bXCJ5ZWFyXCJdID0gMV0gPSBcInllYXJcIjtcbiAgICBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW1bXCJkZWNhZGVcIl0gPSAyXSA9IFwiZGVjYWRlXCI7XG4gICAgQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtW1wiY2VudHVyeVwiXSA9IDNdID0gXCJjZW50dXJ5XCI7XG59KShDYWxlbmRhclZpZXdFbnVtIHx8IChDYWxlbmRhclZpZXdFbnVtID0ge30pKTtcblxuY29uc3Qgc2VydmljZXMgPSB7XG4gICAgW0NhbGVuZGFyVmlld0VudW0ubW9udGhdOiBNb250aFZpZXdTZXJ2aWNlLFxuICAgIFtDYWxlbmRhclZpZXdFbnVtLnllYXJdOiBZZWFyVmlld1NlcnZpY2UsXG4gICAgW0NhbGVuZGFyVmlld0VudW0uZGVjYWRlXTogRGVjYWRlVmlld1NlcnZpY2UsXG4gICAgW0NhbGVuZGFyVmlld0VudW0uY2VudHVyeV06IENlbnR1cnlWaWV3U2VydmljZVxufTtcbmNvbnN0IHZpZXdPZmZzZXQgPSAodmlldywgb2Zmc2V0KSA9PiB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtW3ZpZXcgKyBvZmZzZXRdXTtcbiAgICByZXR1cm4gY2FuZGlkYXRlICE9PSB1bmRlZmluZWQgPyBjYW5kaWRhdGUgOiB2aWV3O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBCdXNWaWV3U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmJvdHRvbSA9IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgICAgIHRoaXMudG9wID0gQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5O1xuICAgIH1cbiAgICBjb25maWd1cmUoYm90dG9tLCB0b3ApIHtcbiAgICAgICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgIH1cbiAgICBzZXJ2aWNlKHZpZXcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZVR5cGUgPSBzZXJ2aWNlc1t2aWV3XTtcbiAgICAgICAgcmV0dXJuIHNlcnZpY2VUeXBlID8gdGhpcy5pbmplY3Rvci5nZXQoc2VydmljZVR5cGUpIDogbnVsbDtcbiAgICB9XG4gICAgbW92ZURvd24odmlldykge1xuICAgICAgICB0aGlzLm1vdmUodmlldywgLTEpO1xuICAgIH1cbiAgICBtb3ZlVXAodmlldykge1xuICAgICAgICB0aGlzLm1vdmUodmlldywgMSk7XG4gICAgfVxuICAgIG1vdmVUb0JvdHRvbShhY3RpdmVWaWV3KSB7XG4gICAgICAgIGlmIChhY3RpdmVWaWV3ID09PSB0aGlzLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlld0NoYW5nZWQuZW1pdCh7IHZpZXc6IHRoaXMuYm90dG9tIH0pO1xuICAgIH1cbiAgICBjYW5Nb3ZlRG93bih2aWV3KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdHRvbSA8IHZpZXc7XG4gICAgfVxuICAgIGNhbk1vdmVVcCh2aWV3KSB7XG4gICAgICAgIHJldHVybiB2aWV3IDwgdGhpcy50b3A7XG4gICAgfVxuICAgIGNsYW1wKHZpZXcpIHtcbiAgICAgICAgaWYgKHZpZXcgPCB0aGlzLmJvdHRvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aWV3ID4gdGhpcy50b3ApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9XG4gICAgbW92ZSh2aWV3LCBvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5jbGFtcCh2aWV3T2Zmc2V0KHZpZXcsIG9mZnNldCkpO1xuICAgICAgICBpZiAoY2FuZGlkYXRlID09PSB2aWV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHsgdmlldzogY2FuZGlkYXRlIH0pO1xuICAgIH1cbn1cbkJ1c1ZpZXdTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5CdXNWaWV3U2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEluamVjdG9yIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCByZXF1aXJlc1pvbmVPbkJsdXIgPSAobmdDb250cm9sKSA9PiBuZ0NvbnRyb2wgJiZcbiAgICAoIW5nQ29udHJvbC50b3VjaGVkIHx8IChuZ0NvbnRyb2wuY29udHJvbCAmJiBuZ0NvbnRyb2wuY29udHJvbC51cGRhdGVPbiA9PT0gJ2JsdXInKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcHJldmVudERlZmF1bHQgPSAoYXJncykgPT4gYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGN1cnJlbnRGb2N1c1RhcmdldCA9IChibHVyQXJncykgPT4gYmx1ckFyZ3MucmVsYXRlZFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzUHJlc2VudCA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIElmIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgaXRlbVxuICogYW5kIGFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgYXJlIG51bWJlcnMsIHJldHVybnMgYHRydWUuXG4gKi9cbmNvbnN0IGlzTnVtYmVyQXJyYXkgPSAodmFsdWUpID0+IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuZXZlcnkoaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogSWYgdGhlIHByb3ZpZGVkIHBhcmFtZXRlciBpcyBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtXG4gKiBhbmQgYWxsIGl0ZW1zIGluIHRoZSBhcnJheSBhcmUgZGF0ZXMsIHJldHVybnMgYHRydWVgLlxuICovXG5jb25zdCBpc0RhdGVBcnJheSA9ICh2YWx1ZSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5ldmVyeShpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRlKTtcblxuY29uc3QgZGl2ID0gZG9tQ29udGFpbmVyRmFjdG9yeSgnZGl2Jyk7XG5jb25zdCB1bCA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3VsJyk7XG5jb25zdCBsaSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ2xpJyk7XG5jb25zdCB0ZCA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3RkJyk7XG5jb25zdCB0aCA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3RoJyk7XG5jb25zdCB0ciA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3RyJyk7XG5jb25zdCB0Ym9keSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3Rib2R5Jyk7XG5jb25zdCB0aGVhZCA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3RoZWFkJyk7XG5jb25zdCB0YWJsZSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3RhYmxlJyk7XG5jb25zdCBtb250aEhlYWRlciA9ICgpID0+IChkaXYoYFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWJ1dHRvbiBrLWJhcmUgay10aXRsZVwiPk1hcmNoIDIwMTc8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstdG9kYXlcIj5UT0RBWTwvc3Bhbj5cbiAgICAgICAgYCwgJ2stY2FsZW5kYXItaGVhZGVyJykpO1xuY29uc3QgbW9udGhXZWVrSGVhZGVyID0gKCkgPT4gKHRhYmxlKFtcbiAgICB0aGVhZChbXG4gICAgICAgIHRyKFt0aCgnTU8nKV0pXG4gICAgXSlcbl0sICdrLWNhbGVuZGFyLXdlZWtkYXlzJykpO1xuY29uc3QgcmVwZWF0ID0gKGNvdW50LCBtYXBwZXIpID0+IG5ldyBBcnJheShjb3VudCkuZmlsbCgnMScpLm1hcChtYXBwZXIpO1xuY29uc3QgY29udGVudCA9IChyb3dzLCBjZWxscyA9IDEpID0+ICh0YWJsZShbXG4gICAgdGJvZHkoW3RyKFt0aCgnMScpXSldLmNvbmNhdChyZXBlYXQocm93cywgKCkgPT4gdHIocmVwZWF0KGNlbGxzLCBjID0+IHRkKGA8c3BhbiBjbGFzcz1cImstbGlua1wiPiR7Y308L3NwYW4+YCkpKSkpKVxuXSkpO1xuY29uc3Qgc2Nyb2xsYWJsZSA9IChjaGlsZHJlbikgPT4gZGl2KGNoaWxkcmVuLCAnay1jb250ZW50IGstc2Nyb2xsYWJsZScpO1xuY29uc3QgdmlldyA9IChjb250ZW50RWxlbWVudCwgY2xhc3NOYW1lLCByZW5kZXJXZWVrSGVhZGVyKSA9PiAoZGl2KFtcbiAgICBtb250aEhlYWRlcigpLFxuICAgIHJlbmRlcldlZWtIZWFkZXIgPyBtb250aFdlZWtIZWFkZXIoKSA6IG51bGwsXG4gICAgc2Nyb2xsYWJsZShbY29udGVudEVsZW1lbnQsIGNvbnRlbnRFbGVtZW50XSlcbl0sIGNsYXNzTmFtZSwgeyBsZWZ0OiAnLTEwMDAwcHgnLCBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KSk7XG5jb25zdCDJtTYgPSAoKSA9PiB7XG4gICAgbGV0IG5hdkVsZW1lbnQ7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5hdkVsZW1lbnQpIHtcbiAgICAgICAgICAgIG5hdkVsZW1lbnQgPSBkaXYoW3Njcm9sbGFibGUoW3VsKFtsaSgnPHNwYW4+RkVCPC9zcGFuPicpXSldKV0sICdrLWNhbGVuZGFyLW5hdmlnYXRpb24nLCB7IGxlZnQ6ICcwcHgnLCBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmF2RWxlbWVudDtcbiAgICB9O1xufTtcbmNvbnN0IG5hdmlnYXRpb25MaXN0ID0gKMm1NikoKTtcbmNvbnN0IHZpZXdGYWN0b3J5ID0gKHsgY2VsbHMsIHJvd3MgfSwgY2xhc3NOYW1lLCByZW5kZXJXZWVrSGVhZGVyKSA9PiB7XG4gICAgbGV0IHZpZXdFbGVtZW50O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2aWV3RWxlbWVudCkge1xuICAgICAgICAgICAgdmlld0VsZW1lbnQgPSB2aWV3KGNvbnRlbnQocm93cywgY2VsbHMpLCBjbGFzc05hbWUsIHJlbmRlcldlZWtIZWFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3RWxlbWVudDtcbiAgICB9O1xufTtcbmNvbnN0IGdldFNjcm9sbGFibGUgPSAoZWxlbWVudCkgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuay1zY3JvbGxhYmxlJyk7XG5jb25zdCBob3Jpem9udGFsID0gZWxlbWVudCA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSBnZXRTY3JvbGxhYmxlKGVsZW1lbnQpO1xuICAgIHNjcm9sbGFibGVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2stc2Nyb2xsYWJsZS1ob3Jpem9udGFsJyk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuY29uc3QgbW9udGhWaWV3ID0gdmlld0ZhY3RvcnkoeyBjZWxsczogNywgcm93czogNiB9LCAnay1jYWxlbmRhci12aWV3IGstY2FsZW5kYXItbW9udGh2aWV3JywgdHJ1ZSk7XG5jb25zdCB5ZWFyVmlldyA9IHZpZXdGYWN0b3J5KHsgY2VsbHM6IDUsIHJvd3M6IDMgfSwgJ2stY2FsZW5kYXItdmlldyBrLWNhbGVuZGFyLXllYXJ2aWV3JywgZmFsc2UpO1xuY29uc3QgZGVjYWRlVmlldyA9IHZpZXdGYWN0b3J5KHsgY2VsbHM6IDUsIHJvd3M6IDIgfSwgJ2stY2FsZW5kYXItdmlldyBrLWNhbGVuZGFyLWRlY2FkZXZpZXcnLCBmYWxzZSk7XG5jb25zdCBob3J6TW9udGhWaWV3ID0gKCkgPT4gaG9yaXpvbnRhbChtb250aFZpZXcoKSk7XG5jb25zdCBob3J6WWVhclZpZXcgPSAoKSA9PiBob3Jpem9udGFsKHllYXJWaWV3KCkpO1xuY29uc3QgaG9yekRlY2FkZVZpZXcgPSAoKSA9PiBob3Jpem9udGFsKGRlY2FkZVZpZXcoKSk7XG5jb25zdCBoZWlnaHQgPSAoZWxlbWVudCkgPT4gKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0KSB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCk7XG5jb25zdCB3aWR0aCA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBwYXJzZUZsb2F0KHN0eWxlcy53aWR0aClcbiAgICAgICAgKyBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nTGVmdClcbiAgICAgICAgKyBwYXJzZUZsb2F0KHN0eWxlcy5wYWRkaW5nUmlnaHQpO1xuICAgIHJldHVybiBjb21wdXRlZCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoO1xufTtcbmNvbnN0IGdldEJvZHkgPSAoZWxlbWVudCkgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENhbGVuZGFyRE9NU2VydmljZSB7XG4gICAgZW5zdXJlSGVpZ2h0cygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsZW5kYXJIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0cygpO1xuICAgIH1cbiAgICBjYWxjdWxhdGVIZWlnaHRzKGNvbnRhaW5lcikge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG9zdENvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5iYXRjaChtb250aFZpZXcoKSwgKGNvbnRlbnRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3RWxlbWVudCA9IGdldEJvZHkoY29udGVudEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhckhlaWdodCA9IGhlaWdodChjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLm1vbnRoVmlld0hlaWdodCA9IGhlaWdodCh2aWV3RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckhlaWdodCA9IGhlaWdodCh2aWV3RWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGFibGVDb250ZW50SGVpZ2h0ID0gaGVpZ2h0KGdldFNjcm9sbGFibGUoY29udGVudEVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmF0Y2goaG9yek1vbnRoVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdFbGVtZW50ID0gZ2V0Qm9keShjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyV2lkdGggPSB3aWR0aChjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLm1vbnRoVmlld1dpZHRoID0gd2lkdGgodmlld0VsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQ29udGVudFdpZHRoID0gd2lkdGgoZ2V0U2Nyb2xsYWJsZShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaCh5ZWFyVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMueWVhclZpZXdIZWlnaHQgPSBoZWlnaHQoZ2V0Qm9keShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlWWVhckNvbnRlbnRIZWlnaHQgPSBoZWlnaHQoZ2V0U2Nyb2xsYWJsZShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaChob3J6WWVhclZpZXcoKSwgKGNvbnRlbnRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnllYXJWaWV3V2lkdGggPSB3aWR0aChnZXRCb2R5KGNvbnRlbnRFbGVtZW50KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhdGNoKGRlY2FkZVZpZXcoKSwgKGNvbnRlbnRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY2FkZVZpZXdIZWlnaHQgPSBoZWlnaHQoZ2V0Qm9keShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICAgICAgdGhpcy5jZW50dXJ5Vmlld0hlaWdodCA9IHRoaXMuZGVjYWRlVmlld0hlaWdodDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmF0Y2goaG9yekRlY2FkZVZpZXcoKSwgKGNvbnRlbnRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlY2FkZVZpZXdXaWR0aCA9IHdpZHRoKGdldEJvZHkoY29udGVudEVsZW1lbnQpKTtcbiAgICAgICAgICAgIHRoaXMuY2VudHVyeVZpZXdXaWR0aCA9IHRoaXMuZGVjYWRlVmlld1dpZHRoO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaChuYXZpZ2F0aW9uTGlzdCgpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkl0ZW1IZWlnaHQgPSBoZWlnaHQoY29udGVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignbGknKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2aWV3SGVpZ2h0KHZpZXdUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdEaW1lbnNpb24odmlld1R5cGUsICdoZWlnaHQnKTtcbiAgICB9XG4gICAgdmlld1dpZHRoKHZpZXdUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdEaW1lbnNpb24odmlld1R5cGUsICd3aWR0aCcpO1xuICAgIH1cbiAgICB2aWV3RGltZW5zaW9uKHZpZXdUeXBlLCBkaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3Qgdmlld1Byb3AgPSBkaW1lbnNpb24gPT09ICdoZWlnaHQnID8gJ1ZpZXdIZWlnaHQnIDogJ1ZpZXdXaWR0aCc7XG4gICAgICAgIHN3aXRjaCAodmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5tb250aDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tgbW9udGgke3ZpZXdQcm9wfWBdO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLnllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbYHllYXIke3ZpZXdQcm9wfWBdO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLmRlY2FkZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tgZGVjYWRlJHt2aWV3UHJvcH1gXTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2BjZW50dXJ5JHt2aWV3UHJvcH1gXTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmF0Y2goY29udGVudEVsZW1lbnQsIGFjdGlvbikge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLmhvc3RDb250YWluZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdENsb25lID0gdGhpcy5ob3N0Q29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3RDbG9uZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcHBlbmRlZENvbnRlbnQgPSBob3N0Q2xvbmUuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpO1xuICAgICAgICAgICAgYWN0aW9uKGFwcGVuZGVkQ29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaG9zdENsb25lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkNhbGVuZGFyRE9NU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHVwZGF0ZSA9IChhcnIsIGlkeCwgdmFsdWUpID0+IChbXG4gICAgLi4uYXJyLnNsaWNlKDAsIGlkeCArIDEpLFxuICAgIC4uLihhcnIuc2xpY2UoaWR4ICsgMSkubWFwKHggPT4geCArIHZhbHVlKSlcbl0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJvd0hlaWdodFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHRvdGFsID0gMCwgcm93SGVpZ2h0LCBkZXRhaWxSb3dIZWlnaHQpIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5kZXRhaWxSb3dIZWlnaHQgPSBkZXRhaWxSb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMub2Zmc2V0cyA9IFtdO1xuICAgICAgICB0aGlzLmhlaWdodHMgPSBbXTtcbiAgICAgICAgbGV0IGFnZyA9IDA7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRvdGFsOyBpZHgrKykge1xuICAgICAgICAgICAgdGhpcy5vZmZzZXRzLnB1c2goYWdnKTtcbiAgICAgICAgICAgIGFnZyArPSByb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmhlaWdodHMucHVzaChyb3dIZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhlaWdodChyb3dJbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHRzW3Jvd0luZGV4XTtcbiAgICB9XG4gICAgZXhwYW5kRGV0YWlsKHJvd0luZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodChyb3dJbmRleCkgPT09IHRoaXMucm93SGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0hlaWdodChyb3dJbmRleCwgdGhpcy5kZXRhaWxSb3dIZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbGxhcHNlRGV0YWlsKHJvd0luZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodChyb3dJbmRleCkgPiB0aGlzLnJvd0hlaWdodCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dIZWlnaHQocm93SW5kZXgsIHRoaXMuZGV0YWlsUm93SGVpZ2h0ICogLTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluZGV4KHBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5vZmZzZXRzLnJlZHVjZSgocHJldiwgY3VycmVudCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50ID09PSBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50ID4gcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWR4IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHVuZGVmaW5lZCk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gdGhpcy50b3RhbCAtIDEgOiByZXN1bHQ7XG4gICAgfVxuICAgIG9mZnNldChyb3dJbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXRzW3Jvd0luZGV4XTtcbiAgICB9XG4gICAgdG90YWxIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XG4gICAgfVxuICAgIHVwZGF0ZVJvd0hlaWdodChyb3dJbmRleCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5oZWlnaHRzW3Jvd0luZGV4XSArPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vZmZzZXRzID0gdXBkYXRlKHRoaXMub2Zmc2V0cywgcm93SW5kZXgsIHZhbHVlKTtcbiAgICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHggPT4gTWF0aC5tYXgoeCwgMCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2Nyb2xsQWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFBhZ2VBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKHNraXApIHtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2Nyb2xsZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihzY3JvbGxPYnNlcnZhYmxlKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsT2JzZXJ2YWJsZSA9IHNjcm9sbE9ic2VydmFibGU7XG4gICAgICAgIHRoaXMuZmlyc3RMb2FkZWQgPSAwO1xuICAgICAgICB0aGlzLmJvdHRvbU9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMudG9wT2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgY3JlYXRlKHJvd0hlaWdodFNlcnZpY2UsIHNraXAsIHRha2UsIHRvdGFsLCB0b3BPZmZzZXQgPSAwLCBib3R0b21PZmZzZXQgPSAwLCBkaXJlY3Rpb24gPSAndmVydGljYWwnKSB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZSA9IHJvd0hlaWdodFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZmlyc3RMb2FkZWQgPSBza2lwO1xuICAgICAgICB0aGlzLmxhc3RMb2FkZWQgPSBza2lwICsgdGFrZTtcbiAgICAgICAgdGhpcy50YWtlID0gdGFrZTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLmxhc3RTY3JvbGwgPSAwO1xuICAgICAgICB0aGlzLnRvcE9mZnNldCA9IHRvcE9mZnNldDtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSBib3R0b21PZmZzZXQ7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3QoMik7XG4gICAgICAgIGNvbnN0IG9mZnNldEJ1ZmZlclJvd3MgPSB0aGlzLnJvd3NGb3JIZWlnaHQodG9wT2Zmc2V0KTtcbiAgICAgICAgY29uc3Qgc2tpcFdpdGhPZmZzZXQgPSBub3JtYWxpemUoc2tpcCAtIG9mZnNldEJ1ZmZlclJvd3MpO1xuICAgICAgICBzdWJqZWN0Lm5leHQobmV3IFNjcm9sbEFjdGlvbih0aGlzLnJvd09mZnNldChza2lwV2l0aE9mZnNldCkpKTtcbiAgICAgICAgaWYgKG9mZnNldEJ1ZmZlclJvd3MpIHtcbiAgICAgICAgICAgIHN1YmplY3QubmV4dChuZXcgUGFnZUFjdGlvbihza2lwV2l0aE9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbE9ic2VydmFibGUuc3Vic2NyaWJlKHggPT4gdGhpcy5vblNjcm9sbCh4LCBvYnNlcnZlcikpO1xuICAgICAgICB9KS5zdWJzY3JpYmUoeCA9PiBzdWJqZWN0Lm5leHQoeCkpO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25TY3JvbGwoeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIG9mZnNldEhlaWdodCwgb2Zmc2V0V2lkdGggfSwgb2JzZXJ2ZXIpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IHNjcm9sbFRvcCA6IHNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IG9mZnNldFNpemUgPSB0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IG9mZnNldEhlaWdodCA6IG9mZnNldFdpZHRoO1xuICAgICAgICBpZiAodGhpcy5sYXN0U2Nyb2xsID09PSBzY3JvbGxQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwID0gdGhpcy5sYXN0U2Nyb2xsID49IHNjcm9sbFBvc2l0aW9uO1xuICAgICAgICB0aGlzLmxhc3RTY3JvbGwgPSBzY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgY29uc3QgZmlyc3RJdGVtSW5kZXggPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaW5kZXgobm9ybWFsaXplKHNjcm9sbFBvc2l0aW9uIC0gdGhpcy50b3BPZmZzZXQpKTtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChub3JtYWxpemUoc2Nyb2xsUG9zaXRpb24gKyBvZmZzZXRTaXplIC0gdGhpcy5ib3R0b21PZmZzZXQpKTtcbiAgICAgICAgaWYgKCF1cCAmJiBsYXN0SXRlbUluZGV4ID49IHRoaXMubGFzdExvYWRlZCAmJiB0aGlzLmxhc3RMb2FkZWQgPCB0aGlzLnRvdGFsKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gZmlyc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY3JvbGxBY3Rpb24odGhpcy5yb3dPZmZzZXQoZmlyc3RJdGVtSW5kZXgpKSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RMb2FkZWQgPSBNYXRoLm1pbih0aGlzLmZpcnN0TG9hZGVkICsgdGhpcy50YWtlLCB0aGlzLnRvdGFsKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFBhZ2VBY3Rpb24odGhpcy5maXJzdExvYWRlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCAmJiBmaXJzdEl0ZW1JbmRleCA8PSB0aGlzLmZpcnN0TG9hZGVkKSB7XG4gICAgICAgICAgICBjb25zdCBub25WaXNpYmxlQnVmZmVyID0gTWF0aC5mbG9vcih0aGlzLnRha2UgKiAwLjMpO1xuICAgICAgICAgICAgdGhpcy5maXJzdExvYWRlZCA9IG5vcm1hbGl6ZShmaXJzdEl0ZW1JbmRleCAtIG5vblZpc2libGVCdWZmZXIpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgU2Nyb2xsQWN0aW9uKHRoaXMucm93T2Zmc2V0KHRoaXMuZmlyc3RMb2FkZWQpKSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RMb2FkZWQgPSBNYXRoLm1pbih0aGlzLmZpcnN0TG9hZGVkICsgdGhpcy50YWtlLCB0aGlzLnRvdGFsKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFBhZ2VBY3Rpb24odGhpcy5maXJzdExvYWRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJvd09mZnNldChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChpbmRleCkgKyB0aGlzLnRvcE9mZnNldDtcbiAgICB9XG4gICAgcm93c0ZvckhlaWdodChoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChoZWlnaHQgLyB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaGVpZ2h0KDApKTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyogdHNsaW50OmRpc2FibGU6Y29tcG9uZW50LXNlbGVjdG9yLW5hbWUgIGNvbXBvbmVudC1zZWxlY3Rvci10eXBlICovXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgU0NST0xMRVJfRkFDVE9SWV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbignZGF0ZWlucHV0cy1zY3JvbGwtc2VydmljZS1mYWN0b3J5Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gREVGQVVMVF9TQ1JPTExFUl9GQUNUT1JZKG9ic2VydmFibGUpIHtcbiAgICByZXR1cm4gbmV3IFNjcm9sbGVyU2VydmljZShvYnNlcnZhYmxlKTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgU2Nyb2xsRGlyZWN0aW9uO1xuKGZ1bmN0aW9uIChTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICBTY3JvbGxEaXJlY3Rpb25bU2Nyb2xsRGlyZWN0aW9uW1wiQmFja3dhcmRcIl0gPSAwXSA9IFwiQmFja3dhcmRcIjtcbiAgICBTY3JvbGxEaXJlY3Rpb25bU2Nyb2xsRGlyZWN0aW9uW1wiRm9yd2FyZFwiXSA9IDFdID0gXCJGb3J3YXJkXCI7XG59KShTY3JvbGxEaXJlY3Rpb24gfHwgKFNjcm9sbERpcmVjdGlvbiA9IHt9KSk7XG5jb25zdCBGUkFNRV9EVVJBVElPTiA9IDE3O1xuY29uc3Qgc2Nyb2xsTW9kaWZpZXJzID0ge1xuICAgIFtTY3JvbGxEaXJlY3Rpb24uRm9yd2FyZF06IChzdGVwKSA9PiB2YWx1ZSA9PiB2YWx1ZSArIHN0ZXAsXG4gICAgW1Njcm9sbERpcmVjdGlvbi5CYWNrd2FyZF06IChzdGVwKSA9PiB2YWx1ZSA9PiB2YWx1ZSAtIHN0ZXBcbn07XG5jb25zdCBzY3JvbGxOb3JtYWxpemVycyA9IHtcbiAgICBbU2Nyb2xsRGlyZWN0aW9uLkZvcndhcmRdOiAoZW5kKSA9PiB2YWx1ZSA9PiBNYXRoLm1pbih2YWx1ZSwgZW5kKSxcbiAgICBbU2Nyb2xsRGlyZWN0aW9uLkJhY2t3YXJkXTogKGVuZCkgPT4gdmFsdWUgPT4gTWF0aC5tYXgodmFsdWUsIGVuZClcbn07XG5jb25zdCBzY3JvbGxWYWxpZGF0b3JzID0ge1xuICAgIFtTY3JvbGxEaXJlY3Rpb24uRm9yd2FyZF06IGVuZCA9PiBzdGFydCA9PiBzdGFydCA8IGVuZCxcbiAgICBbU2Nyb2xsRGlyZWN0aW9uLkJhY2t3YXJkXTogZW5kID0+IHN0YXJ0ID0+IHN0YXJ0ID4gZW5kXG59O1xuY29uc3QgZGlmZmVyZW5jZVRvU2Nyb2xsID0gKHNjcm9sbFRvcCwgc3RhdGljT2Zmc2V0LCBtYXhTY3JvbGxEaWZmZXJlbmNlKSA9PiB7XG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGguYWJzKHN0YXRpY09mZnNldCAtIHNjcm9sbFRvcCksIG1heFNjcm9sbERpZmZlcmVuY2UpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBWaXJ0dWFsaXphdGlvbkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioc2Nyb2xsZXJGYWN0b3J5LCBjb250YWluZXIsIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJztcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gMTtcbiAgICAgICAgdGhpcy5pdGVtV2lkdGggPSAxO1xuICAgICAgICB0aGlzLnRvcE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuYm90dG9tT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5tYXhTY3JvbGxEaWZmZXJlbmNlID0gMTAwO1xuICAgICAgICB0aGlzLnNjcm9sbE9mZnNldFNpemUgPSAwO1xuICAgICAgICB0aGlzLnNjcm9sbER1cmF0aW9uID0gMTUwO1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxlciA9IHNjcm9sbGVyRmFjdG9yeSh0aGlzLmRpc3BhdGNoZXIpO1xuICAgIH1cbiAgICBnZXQgdG90YWxWZXJ0ZXhMZW5ndGgoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYCR7dGhpcy50b3RhbFNpemV9cHhgO1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyB7IGhlaWdodDogdmFsdWUgfSA6IHsgd2lkdGg6IHZhbHVlIH07XG4gICAgfVxuICAgIGdldCBjb250YWluZXJPZmZzZXRTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250YWluZXJQcm9wZXJ0eSh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICdvZmZzZXRIZWlnaHQnIDogJ29mZnNldFdpZHRoJyk7XG4gICAgfVxuICAgIGdldCBjb250YWluZXJTY3JvbGxTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250YWluZXJQcm9wZXJ0eSh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICdzY3JvbGxIZWlnaHQnIDogJ3Njcm9sbFdpZHRoJyk7XG4gICAgfVxuICAgIGdldCBjb250YWluZXJTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udGFpbmVyUHJvcGVydHkodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0Jyk7XG4gICAgfVxuICAgIGdldCB3cmFwcGVyQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBob3Jpem9udGFsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRpcmVjdGlvbiB8fCBjaGFuZ2VzLnRha2UgfHwgY2hhbmdlcy50b3RhbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0U2VydmljZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG90YWxTaXplID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLnRvdGFsSGVpZ2h0KCkgKyB0aGlzLmJvdHRvbU9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0hlaWdodFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZSA9IHRoaXMuY3JlYXRlUm93SGVpZ2h0U2VydmljZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyU2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGwkKClcbiAgICAgICAgICAgICAgICAucGlwZShtYXAoKGV2ZW50KSA9PiBldmVudC50YXJnZXQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0QWN0aXZlSW5kZXgoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lclNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbnRhaW5lclByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICBhY3RpdmVJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUluZGV4KE1hdGguY2VpbCh0aGlzLmNvbnRhaW5lclNjcm9sbFBvc2l0aW9uKSk7IC8vaGFuZGxlIHN1YnBpeGVsaW5nXG4gICAgfVxuICAgIGl0ZW1JbmRleChvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChvZmZzZXQpO1xuICAgIH1cbiAgICBpdGVtT2Zmc2V0KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGluZGV4KTtcbiAgICB9XG4gICAgaXNJbmRleFZpc2libGUoaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0hlaWdodFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXJUb3AgPSB0aGlzLmNvbnRhaW5lclNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBjb250YWluZXJCb3R0b20gPSBjb250YWluZXJUb3AgKyB0aGlzLmNvbnRhaW5lck9mZnNldFNpemU7XG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaW5kZXgpO1xuICAgICAgICBjb25zdCBib3R0b20gPSB0b3AgKyB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaGVpZ2h0KGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRvcCA+PSBjb250YWluZXJUb3AgJiYgYm90dG9tIDw9IGNvbnRhaW5lckJvdHRvbTtcbiAgICB9XG4gICAgaXNMaXN0U2Nyb2xsZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsUG9zaXRpb24gIT09IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaW5kZXgpO1xuICAgIH1cbiAgICBzY3JvbGxUbyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBzY3JvbGxQcm9wZXJ0eSA9IHRoaXMuZGlyZWN0aW9uID09PSBcInZlcnRpY2FsXCIgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JztcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBzY3JvbGxQcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH1cbiAgICBzY3JvbGxUb0luZGV4KGluZGV4KSB7XG4gICAgICAgIC8vWFhYOiBzY3JvbGxpbmcgd2l0aCB0aWNrIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgbGlzdCBqdW1wIGluIENocm9tZS5cbiAgICAgICAgLy9PcmlnaW5hbCBpc3N1ZTogZm9jdXMgZmlyc3QgZGF5IGluIHRoZSBtb250aCBhbmQgcHJlc3MgTEVGVCBhcnJvdy5cbiAgICAgICAgLy9Ob3RpY2UgaG93IHRoZSB2aWV3IGp1bXBzIG9uIGV2ZXJ5IGRheSBjaGFuZ2UuXG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaW5kZXgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2Nyb2xsVG9Cb3R0b20oKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50b3RhbFNpemUpO1xuICAgIH1cbiAgICBhbmltYXRlVG9JbmRleChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhPZmZzZXQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGluZGV4KTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXRDb250YWluZXJTY3JvbGxEaXJlY3Rpb24oaW5kZXhPZmZzZXQpO1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuc2Nyb2xsUmFuZ2UoaW5kZXhPZmZzZXQsIGRpcmVjdGlvbik7XG4gICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuc2Nyb2xsU3RlcChzdGFydCwgZW5kKTtcbiAgICAgICAgY29uc3QgbW9kaWZ5U2Nyb2xsID0gc2Nyb2xsTW9kaWZpZXJzW2RpcmVjdGlvbl0oc3RlcCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZVNjcm9sbCA9IHNjcm9sbE5vcm1hbGl6ZXJzW2RpcmVjdGlvbl0oZW5kKTtcbiAgICAgICAgY29uc3QgaXNTY3JvbGxWYWxpZCA9IHNjcm9sbFZhbGlkYXRvcnNbZGlyZWN0aW9uXShtb2RpZnlTY3JvbGwoZW5kKSk7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblN1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChvZihzdGFydCksIGludGVydmFsKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSkucGlwZShtYXAoc3RyZWFtID0+IHN0cmVhbVswXSksIHNjYW4obW9kaWZ5U2Nyb2xsKSwgdGFrZVdoaWxlKGlzU2Nyb2xsVmFsaWQpLCBtYXAobm9ybWFsaXplU2Nyb2xsKSkuc3Vic2NyaWJlKCh4KSA9PiB0aGlzLnNjcm9sbFRvKHgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjcm9sbFJhbmdlKGluZGV4T2Zmc2V0LCBkaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyU2Nyb2xsID0gdGhpcy5jb250YWluZXJTY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgaWYgKHBhcnNlSW50KGluZGV4T2Zmc2V0LCAxMCkgPT09IHBhcnNlSW50KGNvbnRhaW5lclNjcm9sbCwgMTApKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogaW5kZXhPZmZzZXQsIGVuZDogaW5kZXhPZmZzZXQgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhTY3JvbGwgPSB0aGlzLmNvbnRhaW5lck1heFNjcm9sbCgpO1xuICAgICAgICBjb25zdCBzaWduID0gZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uQmFja3dhcmQgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlVG9TY3JvbGwoY29udGFpbmVyU2Nyb2xsLCBpbmRleE9mZnNldCwgdGhpcy5tYXhTY3JvbGxEaWZmZXJlbmNlKTtcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oaW5kZXhPZmZzZXQsIG1heFNjcm9sbCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kICsgKHNpZ24gKiBkaWZmZXJlbmNlKSwgMCksIG1heFNjcm9sbCk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICB9XG4gICAgc2Nyb2xsU3RlcChzdGFydCwgZW5kKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhlbmQgLSBzdGFydCkgLyAodGhpcy5zY3JvbGxEdXJhdGlvbiAvIEZSQU1FX0RVUkFUSU9OKTtcbiAgICB9XG4gICAgc2Nyb2xsJCgpIHtcbiAgICAgICAgcmV0dXJuIGlzRG9jdW1lbnRBdmFpbGFibGUoKSA/IGZyb21FdmVudCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJykgOiBFTVBUWTtcbiAgICB9XG4gICAgaW5pdFNlcnZpY2VzKCkge1xuICAgICAgICB0aGlzLnJvd0hlaWdodFNlcnZpY2UgPSB0aGlzLmNyZWF0ZVJvd0hlaWdodFNlcnZpY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxlclxuICAgICAgICAgICAgLmNyZWF0ZSh0aGlzLnJvd0hlaWdodFNlcnZpY2UsIHRoaXMuc2tpcCwgdGhpcy50YWtlLCB0aGlzLnRvdGFsLCB0aGlzLnRvcE9mZnNldCwgdGhpcy5zY3JvbGxPZmZzZXRTaXplLCB0aGlzLmRpcmVjdGlvbilcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgUGFnZUFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxDaGFuZ2UuZW1pdCh4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNyZWF0ZVJvd0hlaWdodFNlcnZpY2UoKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gdGhpcy5pdGVtSGVpZ2h0IDogdGhpcy5pdGVtV2lkdGg7XG4gICAgICAgIHJldHVybiBuZXcgUm93SGVpZ2h0U2VydmljZSh0aGlzLnRvdGFsLCBkaW1lbnNpb24sIDApO1xuICAgIH1cbiAgICBlbWl0QWN0aXZlSW5kZXgoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KHRoaXMuY29udGFpbmVyU2Nyb2xsUG9zaXRpb24gLSB0aGlzLnRvcE9mZnNldCk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RBY3RpdmVJbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Q2hhbmdlLmVtaXQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnRhaW5lck1heFNjcm9sbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsU2l6ZSAtIHRoaXMuY29udGFpbmVyT2Zmc2V0U2l6ZTtcbiAgICB9XG4gICAgZ2V0Q29udGFpbmVyU2Nyb2xsRGlyZWN0aW9uKGluZGV4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBpbmRleE9mZnNldCA8IHRoaXMuY29udGFpbmVyU2Nyb2xsUG9zaXRpb24gPyBTY3JvbGxEaXJlY3Rpb24uQmFja3dhcmQgOiBTY3JvbGxEaXJlY3Rpb24uRm9yd2FyZDtcbiAgICB9XG59XG5WaXJ0dWFsaXphdGlvbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFNDUk9MTEVSX0ZBQ1RPUllfVE9LRU4sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogREVGQVVMVF9TQ1JPTExFUl9GQUNUT1JZXG4gICAgICAgICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tdmlydHVhbGl6YXRpb24nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJrLXNjcm9sbGFibGUtcGxhY2Vob2xkZXJcIlxuICAgICAgICBbY2xhc3Muay1zY3JvbGxhYmxlLWhvcml6b250YWwtcGxhY2Vob2xkZXJdPVwiZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcIlxuICAgICAgICBbbmdTdHlsZV09XCJ0b3RhbFZlcnRleExlbmd0aFwiXG4gICAgPjwvZGl2PlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblZpcnR1YWxpemF0aW9uQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtTQ1JPTExFUl9GQUNUT1JZX1RPS0VOLF0gfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5WaXJ0dWFsaXphdGlvbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGl0ZW1IZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGl0ZW1XaWR0aDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wT2Zmc2V0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3R0b21PZmZzZXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heFNjcm9sbERpZmZlcmVuY2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNjcm9sbE9mZnNldFNpemU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNjcm9sbER1cmF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBza2lwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWtlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3RhbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlSW5kZXhDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBwYWdlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgc2Nyb2xsQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgd3JhcHBlckNsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY29udGVudCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2Nyb2xsYWJsZScsXSB9XSxcbiAgICBob3Jpem9udGFsQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2Nyb2xsYWJsZS1ob3Jpem9udGFsJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2xvc2VzdEluU2NvcGUgPSAobm9kZSwgcHJlZGljYXRlLCBzY29wZSkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHNjb3BlICYmICFwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgaWYgKG5vZGUgIT09IHNjb3BlKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2xvc2VzdCA9IChub2RlLCBwcmVkaWNhdGUpID0+IHtcbiAgICB3aGlsZSAobm9kZSAmJiAhcHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufTtcblxuLyogdHNsaW50OmRpc2FibGU6Y29tcG9uZW50LXNlbGVjdG9yLW5hbWUgIGNvbXBvbmVudC1zZWxlY3Rvci10eXBlICovXG5jb25zdCBJVEVNU19DT1VOVCA9IDMwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGJ1cywgZG9tLCBpbnRsLCBjZHIsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5taW4gPSBuZXcgRGF0ZShNSU5fREFURSk7XG4gICAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIHRoaXMudGFrZSA9IElURU1TX0NPVU5UO1xuICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSAtMTtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZG9tLmVuc3VyZUhlaWdodHMoKTtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJIZWlnaHQgPSB0aGlzLmRvbS5jYWxlbmRhckhlaWdodDtcbiAgICAgICAgdGhpcy5pdGVtSGVpZ2h0ID0gdGhpcy5kb20ubmF2aWdhdGlvbkl0ZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMubWF4Vmlld0hlaWdodCA9IHRoaXMuZG9tLm1vbnRoVmlld0hlaWdodDtcbiAgICAgICAgdGhpcy50b3BPZmZzZXQgPSAoY2FsZW5kYXJIZWlnaHQgLSB0aGlzLml0ZW1IZWlnaHQpIC8gMjtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSBjYWxlbmRhckhlaWdodCAtIHRoaXMuaXRlbUhlaWdodDtcbiAgICAgICAgdGhpcy5pbnRsU3Vic2NyaXB0aW9uID0gdGhpcy5pbnRsLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuaW50bENoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3VmFsdWUgPSBDYWxlbmRhclZpZXdFbnVtW3RoaXMuYWN0aXZlVmlld107XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gZGF0ZUluUmFuZ2UodGhpcy5mb2N1c2VkRGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnNlcnZpY2UudG90YWwodGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgdG90YWxDaGFuZ2VkID0gdGhpcy50b3RhbCAmJiB0aGlzLnRvdGFsICE9PSB0b3RhbDtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5zZXJ2aWNlLnNraXAodmlld0RhdGUsIHRoaXMubWluKTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICBpZiAodG90YWxDaGFuZ2VkIHx8ICF0aGlzLnNlcnZpY2UuaXNJbkFycmF5KHZpZXdEYXRlLCB0aGlzLmRhdGVzKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlcyA9IHRoaXMuc2VydmljZS5kYXRlc0xpc3Qodmlld0RhdGUsIHRoaXMuZ2V0VGFrZSh0aGlzLnNraXApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFjaGFuZ2VzLmZvY3VzZWREYXRlIHx8IHRvdGFsQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gdGhpcy5zZXJ2aWNlLnNraXAodGhpcy5mb2N1c2VkRGF0ZSwgdGhpcy5taW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5pbnRsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4VG9TY3JvbGwgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbi5zY3JvbGxUb0luZGV4KHRoaXMuaW5kZXhUb1Njcm9sbCk7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4VG9TY3JvbGwgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbi5zY3JvbGxUb0luZGV4KHRoaXMuaW5kZXhUb1Njcm9sbCk7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgIH1cbiAgICBvblBhZ2VDaGFuZ2UoeyBza2lwIH0pIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IHRoaXMuc2VydmljZS5kYXRlc0xpc3QodGhpcy5zZXJ2aWNlLmFkZFRvRGF0ZSh0aGlzLm1pbiwgc2tpcCksIHRoaXMuZ2V0VGFrZShza2lwKSk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuICAgIHNjcm9sbENoYW5nZSh7IG9mZnNldCB9KSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGVZKCR7b2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0cmFuc2Zvcm0nLCB0cmFuc2xhdGUpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsLCAnLW1zLXRyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG4gICAgfVxuICAgIGhhbmRsZURhdGVDaGFuZ2UoYXJncykge1xuICAgICAgICBjb25zdCBpdGVtID0gY2xvc2VzdEluU2NvcGUoYXJncy50YXJnZXQsIG5vZGUgPT4gbm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtZGF0ZS1pbmRleCcpLCB0aGlzLmxpc3QubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLWRhdGUtaW5kZXgnKSwgMTApO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5kYXRlc1tpbmRleF07XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKGNhbmRpZGF0ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFRha2Uoc2tpcCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50b3RhbCAtIHNraXAsIHRoaXMudGFrZSk7XG4gICAgfVxuICAgIGludGxDaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxufVxuTmF2aWdhdGlvbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2FsZW5kYXItbmF2aWdhdGlvbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8c3BhbiBjbGFzcz1cImstY2FsZW5kYXItbmF2aWdhdGlvbi1oaWdobGlnaHRcIj48L3NwYW4+XG4gICAgPGtlbmRvLXZpcnR1YWxpemF0aW9uXG4gICAgICAgIFtza2lwXT1cInNraXBcIlxuICAgICAgICBbdGFrZV09XCJ0YWtlXCJcbiAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcbiAgICAgICAgW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiXG4gICAgICAgIFt0b3BPZmZzZXRdPVwidG9wT2Zmc2V0XCJcbiAgICAgICAgW2JvdHRvbU9mZnNldF09XCJib3R0b21PZmZzZXRcIlxuICAgICAgICBbbWF4U2Nyb2xsRGlmZmVyZW5jZV09XCJtYXhWaWV3SGVpZ2h0XCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2Nyb2xsQ2hhbmdlKT1cInNjcm9sbENoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDx1bCAjbGlzdCBjbGFzcz1cImstcmVzZXRcIiBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7IGNsaWNrOiBoYW5kbGVEYXRlQ2hhbmdlIH1cIiBbc2NvcGVdPVwidGhpc1wiPlxuICAgICAgICAgICAgPGxpICprRm9yPVwibGV0IGRhdGUgb2YgZGF0ZXM7IGxldCBpbmRleD1pbmRleFwiIFthdHRyLmRhdGEtZGF0ZS1pbmRleF09XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5rLWNhbGVuZGFyLW5hdmlnYXRpb24tbWFya2VyXT1cInNlcnZpY2UuaXNSYW5nZVN0YXJ0KGRhdGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhdGVtcGxhdGVSZWZcIj57e3NlcnZpY2UubmF2aWdhdGlvblRpdGxlKGRhdGUpfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogc2VydmljZS5uYXZpZ2F0aW9uVGl0bGUoZGF0ZSksIGFjdGl2ZVZpZXc6IGFjdGl2ZVZpZXdWYWx1ZSwgZGF0ZTogZGF0ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2tlbmRvLXZpcnR1YWxpemF0aW9uPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk5hdmlnYXRpb25Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCdXNWaWV3U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2FsZW5kYXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9XG5dO1xuTmF2aWdhdGlvbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHBhZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB2aXJ0dWFsaXphdGlvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbVmlydHVhbGl6YXRpb25Db21wb25lbnQsXSB9XSxcbiAgICBsaXN0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnbGlzdCcsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBnZXRDb21wb25lbnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItbmF2aWdhdGlvblwiLF0gfV1cbn07XG5cbmNvbnN0IFZJRVdTX0NPVU5UID0gNTtcbmNvbnN0IGlzRXF1YWxNb250aFllYXIgPSAoZGF0ZTEsIGRhdGUyKSA9PiAoZGF0ZTEgJiYgZGF0ZTIgJiZcbiAgICBkYXRlMS5nZXRGdWxsWWVhcigpID09PSBkYXRlMi5nZXRGdWxsWWVhcigpICYmXG4gICAgZGF0ZTEuZ2V0TW9udGgoKSA9PT0gZGF0ZTIuZ2V0TW9udGgoKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVmlld0xpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGJ1cywgY2RyLCBpbnRsLCBkb20sIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5kb20gPSBkb207XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWluID0gbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgICAgICB0aGlzLm1heCA9IG5ldyBEYXRlKE1BWF9EQVRFKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb2xzID0gW107XG4gICAgICAgIHRoaXMud2Vla05hbWVzID0gW107XG4gICAgICAgIHRoaXMudGFrZSA9IFZJRVdTX0NPVU5UO1xuICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgICAgIHRoaXMubWluVmlld3NUb1JlbmRlciA9IDE7XG4gICAgfVxuICAgIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93V2Vla051bWJlcnMgJiYgdGhpcy5pc01vbnRoVmlldygpO1xuICAgIH1cbiAgICBzZXQgd2Vla051bWJlcihzaG93V2Vla051bWJlcnMpIHtcbiAgICAgICAgdGhpcy5zaG93V2Vla051bWJlcnMgPSBzaG93V2Vla051bWJlcnM7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRNb250aENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoO1xuICAgIH1cbiAgICBnZXQgZ2V0Q29tcG9uZW50WWVhckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLnllYXI7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnREZWNhZGVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5kZWNhZGU7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRDZW50dXJ5Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0uY2VudHVyeTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMud2Vla05hbWVzID0gdGhpcy5nZXRXZWVrTmFtZXMoKTtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSB0aGlzLmdldEJvdHRvbU9mZnNldCgpO1xuICAgICAgICB0aGlzLnZpZXdPZmZzZXQgPSAtMSAqIHRoaXMuZG9tLmhlYWRlckhlaWdodDtcbiAgICAgICAgdGhpcy52aWV3SGVpZ2h0ID0gdGhpcy5kb20udmlld0hlaWdodCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24gPSB0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHRoaXMuYnVzLnNlcnZpY2UodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHMgPSBuZXcgQXJyYXkodGhpcy5zZXJ2aWNlLnJvd0xlbmd0aCh0aGlzLndlZWtOdW1iZXIpKS5maWxsKCcnKTtcbiAgICAgICAgdGhpcy5jb2xXaWR0aCA9IE1hdGgucm91bmQoMTAwIC8gdGhpcy5jb2xzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMud2Vla05hbWVzID0gaGFzQ2hhbmdlKGNoYW5nZXMsICd3ZWVrTnVtYmVyJykgJiYgdGhpcy53ZWVrTnVtYmVyID8gdGhpcy5nZXRXZWVrTmFtZXMoKSA6IHRoaXMud2Vla05hbWVzO1xuICAgICAgICBjb25zdCBhY3RpdmVWaWV3Q2hhbmdlZCA9IGhhc0NoYW5nZShjaGFuZ2VzLCAnYWN0aXZlVmlldycpO1xuICAgICAgICBjb25zdCBmb2N1c2VkRGF0ZSA9IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gZGF0ZUluUmFuZ2UodGhpcy5zZXJ2aWNlLnZpZXdEYXRlKGZvY3VzZWREYXRlLCB0aGlzLm1heCwgdGhpcy5taW5WaWV3c1RvUmVuZGVyKSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnNlcnZpY2UudG90YWwodGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgdG90YWxDaGFuZ2VkID0gdGhpcy50b3RhbCAmJiB0aGlzLnRvdGFsICE9PSB0b3RhbDtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVEYXRlcyA9IHRvdGFsQ2hhbmdlZCB8fCAhdGhpcy5zZXJ2aWNlLmlzSW5BcnJheShmb2N1c2VkRGF0ZSwgdGhpcy5kYXRlcyk7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuc2VydmljZS5za2lwKHZpZXdEYXRlLCB0aGlzLm1pbik7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9ICFhY3RpdmVWaWV3Q2hhbmdlZDtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSB0aGlzLmdldEJvdHRvbU9mZnNldCgpO1xuICAgICAgICB0aGlzLnZpZXdIZWlnaHQgPSB0aGlzLmRvbS52aWV3SGVpZ2h0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmIChnZW5lcmF0ZURhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVzID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh2aWV3RGF0ZSwgdGhpcy5nZXRUYWtlKHRoaXMuc2tpcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbE1vbnRoWWVhcih0aGlzLmFjdGl2ZURhdGUsIGZvY3VzZWREYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gY2xvbmVEYXRlKGZvY3VzZWREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVJbmRleCA9IGhhc0NoYW5nZShjaGFuZ2VzLCAnZm9jdXNlZERhdGUnKSB8fCBhY3RpdmVWaWV3Q2hhbmdlZDtcbiAgICAgICAgaWYgKGdlbmVyYXRlRGF0ZXMgfHwgdXBkYXRlSW5kZXggfHwgdGhpcy52aXJ0dWFsaXphdGlvbi5pc0luZGV4VmlzaWJsZSh0aGlzLnNraXApKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSB0aGlzLnNlcnZpY2Uuc2tpcChmb2N1c2VkRGF0ZSwgdGhpcy5taW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5pbnRsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4VG9TY3JvbGwgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbi5zY3JvbGxUb0luZGV4KHRoaXMuaW5kZXhUb1Njcm9sbCk7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4VG9TY3JvbGwgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvblt0aGlzLmFuaW1hdGVUb0luZGV4ID8gJ2FuaW1hdGVUb0luZGV4JyA6ICdzY3JvbGxUb0luZGV4J10odGhpcy5pbmRleFRvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgIH1cbiAgICBvblBhZ2VDaGFuZ2UoeyBza2lwIH0pIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IHRoaXMuc2VydmljZS5kYXRlc0xpc3QodGhpcy5zZXJ2aWNlLmFkZFRvRGF0ZSh0aGlzLm1pbiwgc2tpcCksIHRoaXMuZ2V0VGFrZShza2lwKSk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KCk7XG4gICAgfVxuICAgIHNjcm9sbENoYW5nZSh7IG9mZnNldCB9KSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGVZKCR7b2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwsICd0cmFuc2Zvcm0nLCB0cmFuc2xhdGUpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsLCAnLW1zLXRyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG4gICAgfVxuICAgIHNldEFjdGl2ZURhdGUoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5zZXJ2aWNlLmFkZFRvRGF0ZSh0aGlzLm1pbiwgaW5kZXgpO1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmFjdGl2ZURhdGUsIGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBjYW5kaWRhdGU7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KGNhbmRpZGF0ZSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaGFuZGxlRGF0ZUNoYW5nZShjYW5kaWRhdGUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNhbmRpZGF0ZSk7XG4gICAgfVxuICAgIGlzTW9udGhWaWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoO1xuICAgIH1cbiAgICBpc1Njcm9sbGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0dWFsaXphdGlvbi5pc0xpc3RTY3JvbGxlZCh0aGlzLnNlcnZpY2Uuc2tpcCh0aGlzLmZvY3VzZWREYXRlLCB0aGlzLm1pbikpO1xuICAgIH1cbiAgICBnZXRCb3R0b21PZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNjcm9sbGFibGVIZWlnaHQoKSAtIHRoaXMuZG9tLnZpZXdIZWlnaHQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICB9XG4gICAgZ2V0U2Nyb2xsYWJsZUhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5tb250aCA/XG4gICAgICAgICAgICB0aGlzLmRvbS5zY3JvbGxhYmxlQ29udGVudEhlaWdodCA6XG4gICAgICAgICAgICB0aGlzLmRvbS5zY3JvbGxhYmxlWWVhckNvbnRlbnRIZWlnaHQ7XG4gICAgfVxuICAgIGdldFRha2Uoc2tpcCkge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50b3RhbCAtIHNraXAsIHRoaXMudGFrZSk7XG4gICAgfVxuICAgIGdldFdlZWtOYW1lcygpIHtcbiAgICAgICAgY29uc3Qgd2Vla05hbWVzID0gc2hpZnRXZWVrTmFtZXModGhpcy5pbnRsLmRhdGVGb3JtYXROYW1lcyh7IG5hbWVUeXBlOiAnc2hvcnQnLCB0eXBlOiAnZGF5cycgfSksIHRoaXMuaW50bC5maXJzdERheSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla051bWJlciA/IFsnJ10uY29uY2F0KHdlZWtOYW1lcykgOiB3ZWVrTmFtZXM7XG4gICAgfVxuICAgIGludGxDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMud2Vla05hbWVzID0gdGhpcy5nZXRXZWVrTmFtZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNNb250aFZpZXcoKSkge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5WaWV3TGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2FsZW5kYXItdmlld2xpc3QnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPGtlbmRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICBbY3VycmVudERhdGVdPVwiYWN0aXZlRGF0ZVwiXG4gICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cImhlYWRlclRpdGxlVGVtcGxhdGVSZWZcIlxuICAgICAgICAodG9kYXkpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9rZW5kby1jYWxlbmRhci1oZWFkZXI+XG4gICAgPHRhYmxlIGNsYXNzPVwiay1jYWxlbmRhci13ZWVrZGF5c1wiIHN0eWxlPVwidGFibGUtbGF5b3V0OiBhdXRvO1wiICpuZ0lmPVwiaXNNb250aFZpZXcoKVwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBuYW1lIG9mIHdlZWtOYW1lc1wiIFtzdHlsZS53aWR0aC4lXT1cImNvbFdpZHRoXCI+e3tuYW1lfX08L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICA8L3RhYmxlPlxuICAgIDxrZW5kby12aXJ0dWFsaXphdGlvblxuICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICBbc2tpcF09XCJza2lwXCJcbiAgICAgICAgW3Rha2VdPVwidGFrZVwiXG4gICAgICAgIFt0b3RhbF09XCJ0b3RhbFwiXG4gICAgICAgIFtpdGVtSGVpZ2h0XT1cInZpZXdIZWlnaHRcIlxuICAgICAgICBbdG9wT2Zmc2V0XT1cInZpZXdPZmZzZXRcIlxuICAgICAgICBbYm90dG9tT2Zmc2V0XT1cImJvdHRvbU9mZnNldFwiXG4gICAgICAgIFtzY3JvbGxPZmZzZXRTaXplXT1cInZpZXdPZmZzZXRcIlxuICAgICAgICBbbWF4U2Nyb2xsRGlmZmVyZW5jZV09XCJ2aWV3SGVpZ2h0XCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2Nyb2xsQ2hhbmdlKT1cInNjcm9sbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGFjdGl2ZUluZGV4Q2hhbmdlKT1cInNldEFjdGl2ZURhdGUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPHRhYmxlICNsaXN0PlxuICAgICAgICAgICAgPGNvbGdyb3VwPjxjb2wgKm5nRm9yPVwibGV0IF8gb2YgY29sc1wiIC8+PC9jb2xncm91cD5cblxuICAgICAgICAgICAgPHRib2R5ICprRm9yPVwibGV0IGRhdGUgb2YgZGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgIGtlbmRvQ2FsZW5kYXJWaWV3XG4gICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCIgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgIFtjZWxsVUlEXT1cImNlbGxVSURcIlxuICAgICAgICAgICAgICAgICAgIFtmb2N1c2VkRGF0ZV09XCJmb2N1c2VkRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cImNlbGxUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJUZW1wbGF0ZVJlZl09XCJ3ZWVrTnVtYmVyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2tlbmRvLXZpcnR1YWxpemF0aW9uPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblZpZXdMaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2FsZW5kYXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcblZpZXdMaXN0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlclRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjZWxsVUlEOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNBY3RpdmU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlRGF0ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGFnZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZpcnR1YWxpemF0aW9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtWaXJ0dWFsaXphdGlvbkNvbXBvbmVudCxdIH1dLFxuICAgIGxpc3Q6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydsaXN0JywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGdldENvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci12aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnRNb250aENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1tb250aHZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudFllYXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXIteWVhcnZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudERlY2FkZUNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1kZWNhZGV2aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnRDZW50dXJ5Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLWNlbnR1cnl2aWV3XCIsXSB9XVxufTtcblxuY29uc3QgS0VZX1RPX0FDVElPTiA9IHtcbiAgICAnMzMnOiBBY3Rpb24uUHJldlZpZXcsXG4gICAgJzM0JzogQWN0aW9uLk5leHRWaWV3LFxuICAgICczNSc6IEFjdGlvbi5MYXN0SW5WaWV3LFxuICAgICczNic6IEFjdGlvbi5GaXJzdEluVmlldyxcbiAgICAnMzcnOiBBY3Rpb24uTGVmdCxcbiAgICAnMzgnOiBBY3Rpb24uVXAsXG4gICAgJzM5JzogQWN0aW9uLlJpZ2h0LFxuICAgICc0MCc6IEFjdGlvbi5Eb3duLFxuICAgICdtZXRhKzM4JzogQWN0aW9uLlVwcGVyVmlldyxcbiAgICAnbWV0YSs0MCc6IEFjdGlvbi5Mb3dlclZpZXdcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGJ1cykge1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICB9XG4gICAgYWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGAke2V2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSA/ICdtZXRhKycgOiAnJ30ke2V2ZW50LmtleUNvZGV9YDtcbiAgICAgICAgcmV0dXJuIEtFWV9UT19BQ1RJT05bYWN0aW9uXTtcbiAgICB9XG4gICAgbW92ZSh2YWx1ZSwgYWN0aW9uLCBhY3RpdmVWaWV3KSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKGFjdGl2ZVZpZXcpO1xuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uID09PSBBY3Rpb24uVXBwZXJWaWV3ICYmIHRoaXMuYnVzLmNhbk1vdmVVcChhY3RpdmVWaWV3KSkge1xuICAgICAgICAgICAgdGhpcy5idXMubW92ZVVwKGFjdGl2ZVZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gPT09IEFjdGlvbi5Mb3dlclZpZXcgJiYgdGhpcy5idXMuY2FuTW92ZURvd24oYWN0aXZlVmlldykpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzLm1vdmVEb3duKGFjdGl2ZVZpZXcpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJ2aWNlLm1vdmUodmFsdWUsIGFjdGlvbik7XG4gICAgfVxufVxuTmF2aWdhdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk5hdmlnYXRpb25TZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfVxuXTtcblxuY29uc3QgZGl2aWRlQnlNYWduaXR1ZGUgPSAobWFnbml0dWRlKSA9PiB4ID0+IE1hdGguZmxvb3IoeCAvIG1hZ25pdHVkZSk7XG5jb25zdCBwb3dlckJ5TWFnbml0dWRlID0gKG1hZ25pdHVkZSkgPT4geCA9PiB4ICogbWFnbml0dWRlO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNjcm9sbFN5bmNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihkb20sIHpvbmUpIHtcbiAgICAgICAgdGhpcy5kb20gPSBkb207XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgfVxuICAgIGNvbmZpZ3VyZShhY3RpdmVWaWV3KSB7XG4gICAgICAgIGNvbnN0IG1hZ25pdHVkZSA9IE1hdGgubWF4KHRoaXMuZG9tLnZpZXdIZWlnaHQoYWN0aXZlVmlldykgLyB0aGlzLmRvbS5uYXZpZ2F0aW9uSXRlbUhlaWdodCwgMSk7XG4gICAgICAgIHRoaXMuZGl2aWRlQnlNYWduaXR1ZGUgPSBkaXZpZGVCeU1hZ25pdHVkZShtYWduaXR1ZGUpO1xuICAgICAgICB0aGlzLnBvd2VyQnlNYWduaXR1ZGUgPSBwb3dlckJ5TWFnbml0dWRlKG1hZ25pdHVkZSk7XG4gICAgfVxuICAgIHN5bmMobmF2aWdhdG9yLCB2aWV3KSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIXZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICAgICAgdGhpcy52aWV3ID0gdmlldztcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBuYXZTY3JvbGxlZCwgbW9udGhTY3JvbGxlZDtcbiAgICAgICAgICAgIHRoaXMubmF2U3Vic2NyaXB0aW9uID0gbmF2aWdhdG9yLnNjcm9sbCQoKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobW9udGhTY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBtb250aFNjcm9sbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmF2U2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsU2libGluZ09mKGUudGFyZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3U3Vic2NyaXB0aW9uID0gdmlldy5zY3JvbGwkKClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hdlNjcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdlNjcm9sbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbW9udGhTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTaWJsaW5nT2YoZS50YXJnZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzY3JvbGxTaWJsaW5nT2Yoc2Nyb2xsZWRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2libGluZ0NvbXBvbmVudChzY3JvbGxlZEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNhbGN1bGF0ZVNjcm9sbChjb21wb25lbnQsIHNjcm9sbGVkRWxlbWVudC5zY3JvbGxUb3ApO1xuICAgICAgICBjb21wb25lbnQuc2Nyb2xsVG8oc2Nyb2xsVG9wKTtcbiAgICB9XG4gICAgc2libGluZ0NvbXBvbmVudChzY3JvbGxhYmxlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3IuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgPT09IHNjcm9sbGFibGVFbGVtZW50ID8gdGhpcy52aWV3IDogdGhpcy5uYXZpZ2F0b3I7XG4gICAgfVxuICAgIGNhbGN1bGF0ZVNjcm9sbChjb21wb25lbnQsIHNjcm9sbFRvcCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IGNvbXBvbmVudCA9PT0gdGhpcy5uYXZpZ2F0b3IgPyB0aGlzLmRpdmlkZUJ5TWFnbml0dWRlIDogdGhpcy5wb3dlckJ5TWFnbml0dWRlO1xuICAgICAgICByZXR1cm4gbW9kaWZpZXIoc2Nyb2xsVG9wKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuU2Nyb2xsU3luY1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNjcm9sbFN5bmNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ2FsZW5kYXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblxuLyoqXG4gKiBVc2VkIGZvciByZW5kZXJpbmcgdGhlIGNlbGwgY29udGVudCBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9DYWxlbmRhckNlbGxUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy4gVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZVxuICogY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRlLCB1c2UgdGhlIGBsZXQtZGF0ZWAgZGlyZWN0aXZlLiBUbyBwcm92aWRlIG1vcmUgZGV0YWlsc1xuICogYWJvdXQgdGhlIGN1cnJlbnQgY2VsbCwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGBjZWxsQ29udGV4dGAgYnkgdXNpbmcgdGhlIGBsZXQtY2VsbENvbnRleHRgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqID4gYGtlbmRvQ2FsZW5kYXJDZWxsVGVtcGxhdGVgIGlzIGVxdWl2YWxlbnQgdG9cbiAqID4gW2BrZW5kb0NhbGVuZGFyTW9udGhDZWxsVGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9kYXRlaW5wdXRzX21vbnRoY2VsbHRlbXBsYXRlZGlyZWN0aXZlICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHN0eWxlczogWycuY3VzdG9tIHsgY29sb3I6IHJlZDsgfSddLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhckNlbGxUZW1wbGF0ZSBsZXQtZGF0ZT5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b21cIj57e2RhdGUuZ2V0RGF0ZSgpfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBDZWxsVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5DZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyQ2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuLyoqXG4gKiBVc2VkIGZvciByZW5kZXJpbmcgdGhlIG1vbnRoIGNlbGwgY29udGVudCBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgbW9udGggY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9DYWxlbmRhck1vbnRoQ2VsbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnRcbiAqIGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHVzZSB0aGUgYGxldC1kYXRlYCBkaXJlY3RpdmUuIFRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50XG4gKiBtb250aCBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGNlbGxDb250ZXh0YCBieSB1c2luZyB0aGUgYGxldC1jZWxsQ29udGV4dGAgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiBzdHlsZXM6IFsnLmN1c3RvbSB7IGNvbG9yOiByZWQ7IH0nXSxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvQ2FsZW5kYXJNb250aENlbGxUZW1wbGF0ZSBsZXQtY29udGV4dD1cImNlbGxDb250ZXh0XCI+XG4gKiAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tXCI+e3tjb250ZXh0LmZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbk1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhck1vbnRoQ2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgeWVhciBjZWxsIGNvbnRlbnQgb2YgdGhlIENhbGVuZGFyLiBUbyBkZWZpbmUgdGhlIHllYXIgY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhblxuICogYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9DYWxlbmRhclllYXJDZWxsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSwgdXNlXG4gKiB0aGUgYGxldC1kYXRlYCBkaXJlY3RpdmUuIFRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjdXJyZW50IHllYXIgY2VsbCwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZVxuICogY3VycmVudCBgY2VsbENvbnRleHRgIGJ5IHVzaW5nIHRoZSBgbGV0LWNlbGxDb250ZXh0YCBkaXJlY3RpdmUuXG4gKlxuICogRm9yIG1vcmUgZXhhbXBsZXMsIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFt0ZW1wbGF0ZXNdKHslIHNsdWcgdGVtcGxhdGVzX2NhbGVuZGFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHN0eWxlczogWycuY3VzdG9tIHsgY29sb3I6IHJlZDsgfSddLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXIgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvQ2FsZW5kYXJZZWFyQ2VsbFRlbXBsYXRlIGxldC1jb250ZXh0PVwiY2VsbENvbnRleHRcIj5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b21cIj57e2NvbnRleHQuZm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICBwdWJsaWMgYWN0aXZlVmlldzogQ2FsZW5kYXJWaWV3ID0gJ3llYXInO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIFllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5ZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhclllYXJDZWxsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5ZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuLyoqXG4gKiBVc2VkIGZvciByZW5kZXJpbmcgdGhlIGRlY2FkZSBjZWxsIGNvbnRlbnQgb2YgdGhlIENhbGVuZGFyLiBUbyBkZWZpbmUgdGhlIGRlY2FkZSBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YFxuICogdGFnIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyRGVjYWRlQ2VsbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHVzZSB0aGUgYGxldC1kYXRlYCBkaXJlY3RpdmUuIFRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzIGFib3V0XG4gKiB0aGUgY3VycmVudCBkZWNhZGUgY2VsbCwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGBjZWxsQ29udGV4dGAgYnkgdXNpbmcgdGhlIGBsZXQtY2VsbENvbnRleHRgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhciBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhckRlY2FkZUNlbGxUZW1wbGF0ZSBsZXQtY29udGV4dD1cImNlbGxDb250ZXh0XCI+XG4gKiAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tXCI+e3tjb250ZXh0LmZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgcHVibGljIGFjdGl2ZVZpZXc6IENhbGVuZGFyVmlldyA9ICdkZWNhZGUnO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIERlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkRlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJEZWNhZGVDZWxsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgY2VudHVyeSBjZWxsIGNvbnRlbnQgb2YgdGhlIENhbGVuZGFyLiBUbyBkZWZpbmUgdGhlIGNlbnR1cnkgY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmBcbiAqIHRhZyB3aXRoIHRoZSBga2VuZG9DYWxlbmRhckNlbnR1cnlDZWxsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSwgdXNlIHRoZSBgbGV0LWRhdGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXRcbiAqIHRoZSBjdXJyZW50IGNlbnR1cnkgY2VsbCwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGBjZWxsQ29udGV4dGAgYnkgdXNpbmcgdGhlIGBsZXQtY2VsbENvbnRleHRgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhciBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhckNlbnR1cnlDZWxsVGVtcGxhdGUgbGV0LWNvbnRleHQ9XCJjZWxsQ29udGV4dFwiPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7Y29udGV4dC5mb3JtYXR0ZWRWYWx1ZX19PC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWNhbGVuZGFyPlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICogIHB1YmxpYyBhY3RpdmVWaWV3OiBDYWxlbmRhclZpZXcgPSAnY2VudHVyeSc7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkNlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyQ2VudHVyeUNlbGxUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgd2VlayBudW1iZXIgY2VsbCBjb250ZW50IGluIHRoZSBtb250aCB2aWV3IG9mIHRoZSBDYWxlbmRhci4gVG8gZGVmaW5lIHRoZSBtb250aCB3ZWVrIG51bWJlciBjZWxsIHRlbXBsYXRlLFxuICogbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyV2Vla051bWJlckNlbGxUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy4gVGhlIHRlbXBsYXRlXG4gKiBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRlLCB1c2UgdGhlIGBsZXQtZGF0ZWAgZGlyZWN0aXZlLiBUbyBwcm92aWRlIG1vcmVcbiAqIGRldGFpbHMgYWJvdXQgdGhlIGN1cnJlbnQgd2VlayBudW1iZXIgY2VsbCwgZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGBjZWxsQ29udGV4dGAgYnkgdXNpbmcgdGhlIGBsZXQtY2VsbENvbnRleHRgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhciBbd2Vla051bWJlcl09XCJ0cnVlXCI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhcldlZWtOdW1iZXJDZWxsVGVtcGxhdGUgbGV0LWNvbnRleHQ9XCJjZWxsQ29udGV4dFwiPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7Y29udGV4dC5mb3JtYXR0ZWRWYWx1ZX19PC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWNhbGVuZGFyPlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbldlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyV2Vla051bWJlckNlbGxUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbldlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgaGVhZGVyIHRpdGxlIG9mIHRoZSBDYWxlbmRhci4gVG8gZGVmaW5lIHRoZSBoZWFkZXIgdGl0bGUgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZ1xuICogd2l0aCB0aGUgYGtlbmRvQ2FsZW5kYXJIZWFkZXJUaXRsZVRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHRpdGxlLCB1c2UgdGhlIGBsZXQtdGl0bGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXRcbiAqIHRoZSBjdXJyZW50IHRpdGxlLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGRhdGVgIGJ5IHVzaW5nIHRoZSBgbGV0LWRhdGVgIGRpcmVjdGl2ZSBvciBnZXQgYSByZWZlcmVuY2UgdG8gdGhlXG4gKiBjdXJyZW50IGFjdGl2ZSB2aWV3ICBieSB1c2luZyB0aGUgYGxldC1hY3RpdmVWaWV3YCBkaXJlY3RpdmUuXG4gKlxuICogRm9yIG1vcmUgZXhhbXBsZXMsIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFt0ZW1wbGF0ZXNdKHslIHNsdWcgdGVtcGxhdGVzX2NhbGVuZGFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHN0eWxlczogWycuY3VzdG9tIHsgY29sb3I6IHJlZDsgfSddLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGUgbGV0LXRpdGxlPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7dGl0bGV9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIEhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5IZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5IZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuLyoqXG4gKiBVc2VkIGZvciByZW5kZXJpbmcgdGhlIG5hdmlnYXRpb24gaXRlbSBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgbmF2aWdhdGlvbiBpdGVtIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YFxuICogdGFnIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy4gVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZVxuICogY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBpdGVtIHZhbHVlLCB1c2UgdGhlIGBsZXQtdGl0bGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHNcbiAqIGFib3V0IHRoZSBjdXJyZW50IHRpdGxlLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGRhdGVgIGJ5IHVzaW5nIHRoZSBgbGV0LWRhdGU9J2RhdGUnYCBkaXJlY3RpdmUgb3IgZ2V0IGEgcmVmZXJlbmNlXG4gKiB0byB0aGUgY3VycmVudCBhY3RpdmUgdmlldyBieSB1c2luZyB0aGUgYGxldC1hY3RpdmVWaWV3PSdhY3RpdmVWaWV3J2AgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiBzdHlsZXM6IFsnLmN1c3RvbSB7IGNvbG9yOiByZWQ7IH0nXSxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvQ2FsZW5kYXJOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlIGxldC10aXRsZT5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b21cIj57e3RpdGxlfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQaWNrZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zYW1lRGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRhdGVDb21wbGV0ZW5lc3NDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbWluVmFsaWRhdG9yID0gKG1pblZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICAgIGNvbnN0IGVyciA9IHtcbiAgICAgICAgICAgIG1pbkVycm9yOiB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IG1pblZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghbWluVmFsdWUgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlIDwgbWluVmFsdWUgPyBlcnIgOiBudWxsO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbWF4VmFsaWRhdG9yID0gKG1heFZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICAgIGNvbnN0IGVyciA9IHtcbiAgICAgICAgICAgIG1heEVycm9yOiB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IG1heFZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghbWF4VmFsdWUgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlID4gbWF4VmFsdWUgPyBlcnIgOiBudWxsO1xuICAgIH07XG59O1xuXG5jb25zdCBub29wJDEgPSAoKSA9PiBmYWxzZTtcbmNvbnN0IERJU0FCTEVEX0RBVEVTX0RPQ19MSU5LID0gJ2h0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2NhbGVuZGFyL2Rpc2FibGVkLWRhdGVzLyc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGlzYWJsZWREYXRlc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogRW1pdHMgZXZlcnkgdGltZSB0aGUgYGlzRGF0ZURpc2FibGVkYCBtZXRob2QgY2hhbmdlcy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCYXNlZCBvbiB0aGUgdXNlci1kZWZpbmVkIGBkaXNhYmxlZERhdGVzYCBpbnB1dCBldmFsdWF0ZXMgaWYgdGhlIGRhdGUgaXMgZGlzYWJsZWQuXG4gICAgICAgICAqIElmIG5vdCBzZXQsIHJldHVybnMgYGZhbHNlYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNEYXRlRGlzYWJsZWQgPSBub29wJDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIGBpc0RhdGVEaXNhYmxlZGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHVzZXMgaXQgYXMtaXMgYW5kIHBhc3NlcyBlYWNoIGRhdGUgdG8gaXQgZm9yIGV2YWx1YXRpb24uXG4gICAgICogVGhlIHRpbWUgcGFydCBpcyBzZXQgdG8gYG1pZG5pZ2h0YC5cbiAgICAgKiAqIElmIGEgYERhdGVbXWAgaXMgcHJvdmlkZWQsIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGUgdGFyZ2V0ZWQgZGF0ZSBhZ2FpbnN0XG4gICAgICogdGhlIGxpc3RlZCBkYXRlcyBhbmQsIGlmIHRoZSB0YXJnZXRlZCBkYXRlIGlzIGxpc3RlZCwgbWFya3MgaXQgYXMgZGlzYWJsZWQuXG4gICAgICogKiBJZiBhIGBEYXlbXWAgaXMgcHJvdmlkZWQsIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGV2YWx1YXRlcyB0aGUgcHJvdmlkZWQgZGF5cyBvZiB0aGVcbiAgICAgKiB3ZWVrIGFzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIGluaXRpYWxpemUoZGlzYWJsZWREYXRlcykge1xuICAgICAgICBpZiAodHlwZW9mIGRpc2FibGVkRGF0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlRGlzYWJsZWQgPSAoZGF0ZSkgPT4gZGlzYWJsZWREYXRlcyhnZXREYXRlKGRhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bWJlckFycmF5KGRpc2FibGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZFdlZWtEYXlzID0gbmV3IFNldChkaXNhYmxlZERhdGVzKTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlRGlzYWJsZWQgPSAoZGF0ZSkgPT4gZGlzYWJsZWRXZWVrRGF5cy5oYXMoZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlQXJyYXkoZGlzYWJsZWREYXRlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREaXNhYmxlZERhdGVzID0gbmV3IFNldChkaXNhYmxlZERhdGVzLm1hcChkYXRlID0+IGdldERhdGUoZGF0ZSkuZ2V0VGltZSgpKSk7XG4gICAgICAgICAgICB0aGlzLmlzRGF0ZURpc2FibGVkID0gKGRhdGUpID0+IG5vcm1hbGl6ZWREaXNhYmxlZERhdGVzLmhhcyhnZXREYXRlKGRhdGUpLmdldFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzRGF0ZURpc2FibGVkID0gbm9vcCQxO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlJbnZhbGlkSW5wdXQoZGlzYWJsZWREYXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlQ2hhbmdlKCk7XG4gICAgfVxuICAgIG5vdGlmeUludmFsaWRJbnB1dChkaXNhYmxlZERhdGVzKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQoZGlzYWJsZWREYXRlcykgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdkaXNhYmxlZERhdGVzJyB2YWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbiwgYSBEYXkgYXJyYXkgb3IgYSBEYXRlIGFycmF5LiBDaGVjayAke0RJU0FCTEVEX0RBVEVTX0RPQ19MSU5LfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBub3RpZnlTZXJ2aWNlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dCgpO1xuICAgIH1cbn1cbkRpc2FibGVkRGF0ZXNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1mb3J3YXJkLXJlZiAqL1xuY29uc3QgQk9UVE9NX1ZJRVdfRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy1ib3R0b212aWV3JztcbmNvbnN0IFRPUF9WSUVXX0RPQ19MSU5LID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0NhbGVuZGFyQ29tcG9uZW50LyN0b2MtdG9wdmlldyc7XG5jb25zdCBNSU5fRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy1taW4nO1xuY29uc3QgTUFYX0RPQ19MSU5LID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0NhbGVuZGFyQ29tcG9uZW50LyN0b2MtbWF4JztcbmNvbnN0IFZBTFVFX0RPQ19MSU5LID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvY2FsZW5kYXIvI3RvYy11c2luZy13aXRoLWpzb24nO1xuY29uc3QgdmlydHVhbGl6YXRpb25Qcm9wID0geCA9PiB4ID8geC52aXJ0dWFsaXphdGlvbiA6IG51bGw7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgQ0FMRU5EQVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gICAgbXVsdGk6IHRydWUsXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpIC8vdHNsaW50OmRpc2FibGUtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgQ0FMRU5EQVJfUkFOR0VfVkFMSURBVE9SUyA9IHtcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENhbGVuZGFyQ29tcG9uZW50KSAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IEtFTkRPX0lOUFVUX1BST1ZJREVSID0ge1xuICAgIHByb3ZpZGU6IEtlbmRvSW5wdXQsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpIC8vdHNsaW50OmRpc2FibGUtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBDYWxlbmRhciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfY2FsZW5kYXIgJX0jdG9jLWJhc2ljLXVzYWdlKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyPjwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBDYWxlbmRhckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoYnVzLCBkb20sIGVsZW1lbnQsIG5hdmlnYXRvciwgcmVuZGVyZXIsIGNkciwgbmdab25lLCBpbmplY3Rvciwgc2Nyb2xsU3luY1NlcnZpY2UsIGRpc2FibGVkRGF0ZXNTZXJ2aWNlLCBwaWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IgPSBuYXZpZ2F0b3I7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UgPSBzY3JvbGxTeW5jU2VydmljZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZSA9IGRpc2FibGVkRGF0ZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UgPSBwaWNrZXJTZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pZCA9IGd1aWQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gbWluIG9yIG1heCB2YWxpZGF0b3JzIGFyZSBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYW5nZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGRpc2FibGVkYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICAgICAqIGRldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2NhbGVuZGFyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB0YWJpbmRleGAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyLiBCYXNlZCBvbiB0aGVcbiAgICAgICAgICogW0hUTUwgYHRhYmluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgYmVoYXZpb3IsXG4gICAgICAgICAqIGl0IGRldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGZvY3VzYWJsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiaW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgbmF2aWdhdGlvbmAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyXG4gICAgICAgICAqIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5hdmlnYXRpb24gc2lkZS1iYXIgd2lsbCBiZSBkaXNwbGF5ZWRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzaWRlYmFyX2NhbGVuZGFyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgYWN0aXZlIHZpZXcgdGhhdCB0aGUgQ2FsZW5kYXIgaW5pdGlhbGx5IHJlbmRlcnNcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhY3RpdmV2aWV3X2NhbGVuZGFyICV9KSkuXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBhY3RpdmUgdmlldyBpcyBgbW9udGhgLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFlvdSBoYXZlIHRvIHNldCBgYWN0aXZlVmlld2Agd2l0aGluIHRoZSBgdG9wVmlld2AtYGJvdHRvbVZpZXdgIHJhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLm1vbnRoXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGJvdHRvbW1vc3QgdmlldyB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19jYWxlbmRhciAlfSN0b2MtcGFydGlhbC1kYXRlcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3R0b21WaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLm1vbnRoXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHRvcG1vc3QgdmlldyB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzaWRlYmFyX2NhbGVuZGFyICV9I3RvYy1wYXJ0aWFsLWRhdGVzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRvcFZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0uY2VudHVyeV07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIHdlZWsgbnVtYmVyIGNvbHVtbiBpbiB0aGUgYG1vbnRoYCB2aWV3XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgd2Vla251bWNvbHVtbl9jYWxlbmRhciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19jYWxlbmRhciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgdmlldyBkYXRlIGlzIGNoYW5nZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19jYWxlbmRhciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2VsbFVJRCA9IGd1aWQoKTtcbiAgICAgICAgdGhpcy5fbWluID0gbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgICAgICB0aGlzLl9tYXggPSBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWREYXRlID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5zeW5jTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldENsYXNzZXMoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLmNhbGVuZGFyID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBmb2N1c2VkRGF0ZWAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZFxuICAgICAqIGRlZmluZXMgdGhlIGZvY3VzZWQgZGF0ZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19jYWxlbmRhciAlfSN0b2MtZm9jdXNlZC1kYXRlcykpLlxuICAgICAqXG4gICAgICogPiBJZiB0aGUgQ2FsZW5kYXIgaXMgb3V0IG9mIHRoZSBtaW4gb3IgbWF4IHJhbmdlLCBpdCBub3JtYWxpemVzIHRoZSBkZWZpbmVkIGBmb2N1c2VkRGF0ZWAuXG4gICAgICovXG4gICAgc2V0IGZvY3VzZWREYXRlKGZvY3VzZWREYXRlKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWREYXRlID0gZm9jdXNlZERhdGUgfHwgZ2V0VG9kYXkoKTtcbiAgICAgICAgdGhpcy5zZXRBcmlhQWN0aXZlZGVzY2VuZGFudCgpO1xuICAgIH1cbiAgICBnZXQgZm9jdXNlZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb2N1c2VkRGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBgbWluYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGUgdmFsdWVcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVyYW5nZXNfY2FsZW5kYXIgJX0pKS5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYG1pbmAgdmFsdWUgaXMgYDE5MDAtMS0xYC5cbiAgICAgKi9cbiAgICBzZXQgbWluKG1pbikge1xuICAgICAgICB0aGlzLl9taW4gPSBtaW4gfHwgbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgIH1cbiAgICBnZXQgbWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBtYXhgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgKiBkZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZSB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19jYWxlbmRhciAlfSkpLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgbWF4YCB2YWx1ZSBpcyBgMjA5OS0xMi0zMWAuXG4gICAgICovXG4gICAgc2V0IG1heChtYXgpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWF4IHx8IG5ldyBEYXRlKE1BWF9EQVRFKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBgdmFsdWVgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmQgZGVmaW5lcyB0aGUgc2VsZWN0ZWQgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqID4gVGhlIGB2YWx1ZWAgaGFzIHRvIGJlIGEgdmFsaWRcbiAgICAgKiBbSmF2YVNjcmlwdCBgRGF0ZWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUpIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBzZXQgdmFsdWUoY2FuZGlkYXRlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB0YWJJbmRleCh0YWJJbmRleCkge1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhdGVzIG9mIHRoZSBDYWxlbmRhciB0aGF0IHdpbGwgYmUgZGlzYWJsZWRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVzX2NhbGVuZGFyICV9KSkuXG4gICAgICovXG4gICAgc2V0IGRpc2FibGVkRGF0ZXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pbml0aWFsaXplKHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBjZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBtb250aENlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLm1vbnRoQ2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgeWVhckNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnllYXJDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBkZWNhZGVDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5kZWNhZGVDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBjZW50dXJ5Q2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuY2VudHVyeUNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHdlZWtOdW1iZXJUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLndlZWtOdW1iZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25JdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgZ2V0IGFjdGl2ZVZpZXdFbnVtKCkge1xuICAgICAgICBjb25zdCBhY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLmFjdGl2ZVZpZXddO1xuICAgICAgICByZXR1cm4gYWN0aXZlVmlldyA8IHRoaXMuYm90dG9tVmlld0VudW0gPyB0aGlzLmJvdHRvbVZpZXdFbnVtIDogYWN0aXZlVmlldztcbiAgICB9XG4gICAgZ2V0IGJvdHRvbVZpZXdFbnVtKCkge1xuICAgICAgICByZXR1cm4gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLmJvdHRvbVZpZXddO1xuICAgIH1cbiAgICBnZXQgdG9wVmlld0VudW0oKSB7XG4gICAgICAgIHJldHVybiBDYWxlbmRhclZpZXdFbnVtW3RoaXMudG9wVmlld107XG4gICAgfVxuICAgIGdldCB3aWRnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuICAgIGdldCB3aWRnZXRSb2xlKCkge1xuICAgICAgICByZXR1cm4gJ2dyaWQnO1xuICAgIH1cbiAgICBnZXQgY2FsZW5kYXJUYWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0aGlzLnRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgYXJpYURpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZG9tLmNhbGN1bGF0ZUhlaWdodHModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLmFjdGl2ZVZpZXdFbnVtKTtcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5idXMudmlld0NoYW5nZWQuc3Vic2NyaWJlKCh7IHZpZXcgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVt2aWV3XTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KHRoaXMuYWN0aXZlVmlld0NoYW5nZSwgdGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UuY29uZmlndXJlKHZpZXcpO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7IC8vIHJlcXVpcmVzIHpvbmUgaWYgdGVtcGxhdGVzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmJ1cy5jb25maWd1cmUodGhpcy5ib3R0b21WaWV3RW51bSwgdGhpcy50b3BWaWV3RW51bSk7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UuY29uZmlndXJlKHRoaXMuYWN0aXZlVmlld0VudW0pO1xuICAgICAgICBjb25zdCB1c2VWYWx1ZSA9IGhhc0V4aXN0aW5nVmFsdWUoY2hhbmdlcywgJ3ZhbHVlJykgJiYgIWhhc0V4aXN0aW5nVmFsdWUoY2hhbmdlcywgJ2ZvY3VzZWREYXRlJyk7XG4gICAgICAgIGNvbnN0IGZvY3VzZWREYXRlID0gZGF0ZUluUmFuZ2UoY2xvbmVEYXRlKHVzZVZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMuZm9jdXNlZERhdGUpLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gIWlzRXF1YWwodGhpcy5mb2N1c2VkRGF0ZSwgZm9jdXNlZERhdGUpID8gZm9jdXNlZERhdGUgOiB0aGlzLmZvY3VzZWREYXRlO1xuICAgICAgICBpZiAoY2hhbmdlcy5uYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWluVmFsaWRhdG9yKHRoaXMubWluKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1heFZhbGlkYXRvcih0aGlzLm1heCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRBcmlhQWN0aXZlZGVzY2VuZGFudCgpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zeW5jTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3luY05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZS5zeW5jKHZpcnR1YWxpemF0aW9uUHJvcCh0aGlzLm5hdmlnYXRpb25WaWV3KSwgdmlydHVhbGl6YXRpb25Qcm9wKHRoaXMubW9udGhWaWV3KSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5iaW5kQ2FsbGJhY2sgPT4gdW5iaW5kQ2FsbGJhY2soKSk7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5jYWxlbmRhciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFnZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25SZXNpemUoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmZvY3VzZWREYXRlKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBob3N0IGVsZW1lbnQgb2YgdGhlIENhbGVuZGFyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwiY2FsZW5kYXIuZm9jdXMoKVwiPkZvY3VzIGNhbGVuZGFyPC9idXR0b24+XG4gICAgICogIDxrZW5kby1jYWxlbmRhciAjY2FsZW5kYXI+PC9rZW5kby1jYWxlbmRhcj5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBDYWxlbmRhciBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb250YWluc0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihjbG9zZXN0KGVsZW1lbnQsIG5vZGUgPT4gbm9kZSA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU5hdmlnYXRpb24oY2FuZGlkYXRlKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNUYXJnZXQgPSBjYW5kaWRhdGUgPyBuZXcgRGF0ZShjbG9uZURhdGUoY2FuZGlkYXRlKS5zZXREYXRlKDEpKSA6IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBkYXRlSW5SYW5nZShmb2N1c1RhcmdldCwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblBhZ2VDaGFuZ2UoKSB7XG4gICAgICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24gPSBmcm9tKHRoaXMucmVzb2x2ZWRQcm9taXNlKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpOyAvLyByZXF1aXJlcyB6b25lIGlmIHRlbXBsYXRlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZURhdGVDaGFuZ2UoY2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNhbk5hdmlnYXRlRG93biA9IHRoaXMuYnVzLmNhbk1vdmVEb3duKHRoaXMuYWN0aXZlVmlld0VudW0pO1xuICAgICAgICBjb25zdCBpc1NhbWVEYXRlID0gIWNhbk5hdmlnYXRlRG93biAmJiBpc0VxdWFsKGNhbmRpZGF0ZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKSB8fCB0aGlzLmZvY3VzZWREYXRlO1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NhbWVEYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRTYW1lRGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5OYXZpZ2F0ZURvd24pIHtcbiAgICAgICAgICAgIHRoaXMuYnVzLm1vdmVEb3duKHRoaXMuYWN0aXZlVmlld0VudW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZChjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZShjbG9uZURhdGUoY2FuZGlkYXRlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZShjYW5kaWRhdGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKGNhbmRpZGF0ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKGNhbmRpZGF0ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBkYXRlSW5SYW5nZShjbG9uZURhdGUoY2FuZGlkYXRlKSB8fCB0aGlzLmZvY3VzZWREYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY2xvbmVEYXRlKGNhbmRpZGF0ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMubWF4VmFsaWRhdGVGbihjb250cm9sKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgYWN0aXZlQ2VsbFRlbXBsYXRlKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlld0VudW0pIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5tb250aDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aENlbGxUZW1wbGF0ZSB8fCB0aGlzLmNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS55ZWFyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlld0VudW0uZGVjYWRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2FkZUNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbnR1cnlDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBlbWl0RXZlbnQoZW1pdHRlciwgYXJncykge1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKGVtaXR0ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENsYXNzZXMoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXdpZGdldCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLWNhbGVuZGFyJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stY2FsZW5kYXItaW5maW5pdGUnKTtcbiAgICB9XG4gICAgdmVyaWZ5Q2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbiA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXggdmFsdWUgc2hvdWxkIGJlIGJpZ2dlciB0aGFuIHRoZSBtaW4uIFNlZSAke01JTl9ET0NfTElOS30gYW5kICR7TUFYX0RPQ19MSU5LfS5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ib3R0b21WaWV3RW51bSA+IHRoaXMudG9wVmlld0VudW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRvcFZpZXcgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBib3R0b21WaWV3LiBTZWUgJHtCT1RUT01fVklFV19ET0NfTElOS30gYW5kICR7VE9QX1ZJRVdfRE9DX0xJTkt9LmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeVZhbHVlKGNhbmRpZGF0ZSkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiAhKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndmFsdWUnIHNob3VsZCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZSBpbnN0YW5jZS4gQ2hlY2sgJHtWQUxVRV9ET0NfTElOS30gZm9yIHBvc3NpYmxlIHJlc29sdXRpb24uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdibHVyJywgdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnZm9jdXMnLCB0aGlzLmhhbmRsZUZvY3VzLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnbW91c2Vkb3duJywgcHJldmVudERlZmF1bHQpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIGVtaXRCbHVyKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uQmx1ci5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uRm9jdXMuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUJsdXIoYXJncykge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIC8vIHRoZSBpbmplY3RvciBjYW4gZ2V0IHRoZSBOZ0NvbnRyb2wgaW5zdGFuY2Ugb2YgdGhlIHBhcmVudCBjb21wb25lbnQgKGZvciBleGFtcGxlLCB0aGUgRGF0ZVRpbWVQaWNrZXIpXG4gICAgICAgIC8vIGFuZCBlbnRlcnMgdGhlIHpvbmUgZm9yIG5vIHJlYXNvbiBiZWNhdXNlIHRoZSBwYXJlbnQgY29tcG9uZW50IGlzIHN0aWxsIHVudG91Y2hlZFxuICAgICAgICBpZiAoIXRoaXMucGlja2VyU2VydmljZSAmJiByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRCbHVyKGFyZ3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRCbHVyKGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAoIU5nWm9uZS5pc0luQW5ndWxhclpvbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Rm9jdXMoKTtcbiAgICB9XG4gICAgaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9udGhWaWV3LmlzU2Nyb2xsZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBjbG9uZURhdGUodGhpcy5mb2N1c2VkRGF0ZSk7IC8vWFhYOiBmb3JjZXMgY2hhbmdlIGRldGVjdFxuICAgICAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUtleWRvd24oYXJncykge1xuICAgICAgICAvLyByZXNlcnZlIHRoZSBhbHQgKyBhcnJvdyBrZXkgY29tbWFuZHMgZm9yIHRoZSBwaWNrZXJcbiAgICAgICAgY29uc3QgYXJyb3dLZXlQcmVzc2VkID0gW0tleXMuQXJyb3dVcCwgS2V5cy5BcnJvd1JpZ2h0LCBLZXlzLkFycm93RG93biwgS2V5cy5BcnJvd0xlZnRdLmluZGV4T2YoYXJncy5rZXlDb2RlKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5waWNrZXJTZXJ2aWNlKSAmJiBhcnJvd0tleVByZXNzZWQgJiYgYXJncy5hbHRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBkYXRlSW5SYW5nZSh0aGlzLm5hdmlnYXRvci5tb3ZlKHRoaXMuZm9jdXNlZERhdGUsIHRoaXMubmF2aWdhdG9yLmFjdGlvbihhcmdzKSwgdGhpcy5hY3RpdmVWaWV3RW51bSksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIGlmICghaXNFcXVhbCh0aGlzLmZvY3VzZWREYXRlLCBjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gY2FuZGlkYXRlO1xuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlQ2hhbmdlKHRoaXMuZm9jdXNlZERhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0U2FtZURhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5zYW1lRGF0ZVNlbGVjdGVkLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRBcmlhQWN0aXZlZGVzY2VuZGFudCgpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvY3VzZWRDZWxsSWQgPSB0aGlzLmNlbGxVSUQgKyB0aGlzLmZvY3VzZWREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCBmb2N1c2VkQ2VsbElkKTtcbiAgICB9XG59XG5DYWxlbmRhckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG8tY2FsZW5kYXInLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBCdXNWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ0FMRU5EQVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICAgICAgICAgIENBTEVOREFSX1JBTkdFX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIEtFTkRPX0lOUFVUX1BST1ZJREVSLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZERhdGVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmNhbGVuZGFyJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgU2Nyb2xsU3luY1NlcnZpY2VcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2FsZW5kYXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciBrZW5kb0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgaTE4bi10b2RheT1cImtlbmRvLmNhbGVuZGFyLnRvZGF5fFRoZSBsYWJlbCBmb3IgdGhlIHRvZGF5IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyXCJcbiAgICAgICAgdG9kYXk9XCJUT0RBWVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxrZW5kby1jYWxlbmRhci1uYXZpZ2F0aW9uXG4gICAgICAgICpuZ0lmPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdFbnVtXCJcbiAgICAgICAgW2ZvY3VzZWREYXRlXT1cImZvY3VzZWREYXRlXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoKVwiXG4gICAgPlxuICAgIDwva2VuZG8tY2FsZW5kYXItbmF2aWdhdGlvbj5cbiAgICA8a2VuZG8tY2FsZW5kYXItdmlld2xpc3RcbiAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld0VudW1cIlxuICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVcIlxuICAgICAgICBbY2VsbFRlbXBsYXRlUmVmXT1cImFjdGl2ZUNlbGxUZW1wbGF0ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtoZWFkZXJUaXRsZVRlbXBsYXRlUmVmXT1cImhlYWRlclRpdGxlVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgW3dlZWtOdW1iZXJUZW1wbGF0ZVJlZl09XCJ3ZWVrTnVtYmVyVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NlbGxVSURdPVwiY2VsbFVJRFwiXG4gICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICBbZm9jdXNlZERhdGVdPVwiZm9jdXNlZERhdGVcIlxuICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlKT1cImVtaXRFdmVudChhY3RpdmVWaWV3RGF0ZUNoYW5nZSwgJGV2ZW50KVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgpXCJcbiAgICA+XG4gICAgPC9rZW5kby1jYWxlbmRhci12aWV3bGlzdD5cbiAgICA8a2VuZG8tcmVzaXplLXNlbnNvciAocmVzaXplKT1cIm9uUmVzaXplKClcIj48L2tlbmRvLXJlc2l6ZS1zZW5zb3I+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2FsZW5kYXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCdXNWaWV3U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2FsZW5kYXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogU2Nyb2xsU3luY1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERpc2FibGVkRGF0ZXNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQaWNrZXJTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuQ2FsZW5kYXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbmF2aWdhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYm90dG9tVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdlZWstbnVtYmVyJyxdIH1dLFxuICAgIGFjdGl2ZVZpZXdDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBhY3RpdmVWaWV3RGF0ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2NlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbW9udGhDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHllYXJDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3llYXJDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgZGVjYWRlQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2RlY2FkZUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgY2VudHVyeUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VudHVyeUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1dlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3dlZWtOdW1iZXJUZW1wbGF0ZScsXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnaGVhZGVyVGl0bGVUZW1wbGF0ZScsXSB9XSxcbiAgICBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZScsXSB9XSxcbiAgICBuYXZpZ2F0aW9uVmlldzogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbTmF2aWdhdGlvbkNvbXBvbmVudCxdIH1dLFxuICAgIG1vbnRoVmlldzogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbVmlld0xpc3RDb21wb25lbnQsXSB9XSxcbiAgICB3aWRnZXRJZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5pZCcsXSB9XSxcbiAgICB3aWRnZXRSb2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgY2FsZW5kYXJUYWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50YWJpbmRleCcsXSB9XSxcbiAgICBhcmlhRGlzYWJsZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1kaXNhYmxlZCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRvciA9ICgpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2wsIGluY29tcGxldGUpID0+IHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoY29udHJvbC52YWx1ZSkgJiYgaW5jb21wbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgaW5jb21wbGV0ZURhdGU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG52YXIgQXJyb3c7XG4oZnVuY3Rpb24gKEFycm93KSB7XG4gICAgQXJyb3dbQXJyb3dbXCJVcFwiXSA9IDBdID0gXCJVcFwiO1xuICAgIEFycm93W0Fycm93W1wiRG93blwiXSA9IDFdID0gXCJEb3duXCI7XG4gICAgQXJyb3dbQXJyb3dbXCJOb25lXCJdID0gMl0gPSBcIk5vbmVcIjtcbn0pKEFycm93IHx8IChBcnJvdyA9IHt9KSk7XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuY29uc3QgTUlOX0RPQ19MSU5LJDEgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvRGF0ZUlucHV0Q29tcG9uZW50LyN0b2MtbWluJztcbmNvbnN0IE1BWF9ET0NfTElOSyQxID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0RhdGVJbnB1dENvbXBvbmVudC8jdG9jLW1heCc7XG5jb25zdCBWQUxVRV9ET0NfTElOSyQxID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvZGF0ZWlucHV0LyN0b2MtdXNpbmctd2l0aC1qc29uJztcbmNvbnN0IERBVEVfUEFSVF9SRUdFWFAgPSAveWVhcnxtb250aHw8ZGF5Pi87XG5jb25zdCBUSU1FX1BBUlRfUkVHRVhQID0gL2hvdXJ8bWludXRlfHNlY29uZHxtaWxsaXNlY29uZC87XG5jb25zdCBTSE9SVF9QQVRURVJOX0xFTkdUSF9SRUdFWFAgPSAvZHxNfEh8aHxtfHMvO1xuY29uc3QgcGFkWmVybyA9IChsZW5ndGgpID0+IG5ldyBBcnJheShNYXRoLm1heChsZW5ndGgsIDApKS5maWxsKCcwJykuam9pbignJyk7XG5jb25zdCB1bnBhZFplcm8gPSAodmFsdWUpID0+IHZhbHVlLnJlcGxhY2UoL14wKi8sICcnKTtcbmNsYXNzIE1hc2sge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBcIlwiO1xuICAgIH1cbn1cbmNsYXNzIEtlbmRvRGF0ZSB7XG4gICAgY29uc3RydWN0b3IoaW50bCwgZm9ybWF0UGxhY2Vob2xkZXIsIGZvcm1hdCwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5mb3JtYXRQbGFjZWhvbGRlciA9IGZvcm1hdFBsYWNlaG9sZGVyO1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy55ZWFyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb250aCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaG91cnMgPSB0cnVlO1xuICAgICAgICB0aGlzLm1pbnV0ZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlY29uZHMgPSB0cnVlO1xuICAgICAgICB0aGlzLm1pbGxpc2Vjb25kcyA9IHRydWU7XG4gICAgICAgIHRoaXMubGVhZGluZ1plcm8gPSBudWxsO1xuICAgICAgICB0aGlzLm1vbnRoTmFtZXMgPSBudWxsO1xuICAgICAgICB0aGlzLnR5cGVkTW9udGhQYXJ0ID0gXCJcIjtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGdldERhdGUobmV3IERhdGUoKSk7XG4gICAgICAgIHRoaXMua25vd25QYXJ0cyA9IFwiYWRIaG1Nc0V5XCI7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHtcbiAgICAgICAgICAgIFwiRVwiOiBcIkVcIixcbiAgICAgICAgICAgIFwiSFwiOiBcIkhcIixcbiAgICAgICAgICAgIFwiTVwiOiBcIk1cIixcbiAgICAgICAgICAgIFwiYVwiOiBcImFcIixcbiAgICAgICAgICAgIFwiZFwiOiBcImRcIixcbiAgICAgICAgICAgIFwiaFwiOiBcImhcIixcbiAgICAgICAgICAgIFwibVwiOiBcIm1cIixcbiAgICAgICAgICAgIFwic1wiOiBcInNcIixcbiAgICAgICAgICAgIFwieVwiOiBcInlcIlxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmFsbEZvcm1hdGVkTW9udGhzKCk7XG4gICAgICAgIHRoaXMuZGF5UGVyaW9kcyA9IHRoaXMuYWxsRGF5UGVyaW9kcygpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZ2V0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHNhbXBsZUZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdFN0cmluZyh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCkuc3ltYm9scztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlRm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZyhzYW1wbGVGb3JtYXRbaV0sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhc1ZhbHVlKCkge1xuICAgICAgICBjb25zdCBwcmVkID0gKGEsIHApID0+IGEgfHwgcC50eXBlICE9PSAnbGl0ZXJhbCcgJiYgcC50eXBlICE9PSAnZGF5cGVyaW9kJyAmJiB0aGlzLmdldEV4aXN0aW5nKHAucGF0dGVyblswXSk7XG4gICAgICAgIHJldHVybiB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KS5yZWR1Y2UocHJlZCwgZmFsc2UpO1xuICAgIH1cbiAgICBnZXREYXRlT2JqZWN0KCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMua25vd25QYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdldEV4aXN0aW5nKHRoaXMua25vd25QYXJ0c1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVEYXRlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBnZXRUZXh0QW5kRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZSh0aGlzLmludGwuZm9ybWF0RGF0ZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCksIHRoaXMuZGF0ZUZvcm1hdFN0cmluZyh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCkpO1xuICAgIH1cbiAgICBnZXRFeGlzdGluZyhzeW1ib2wpIHtcbiAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ5XCI6IHJldHVybiB0aGlzLnllYXI7XG4gICAgICAgICAgICBjYXNlIFwiTVwiOlxuICAgICAgICAgICAgY2FzZSBcIkxcIjogcmV0dXJuIHRoaXMubW9udGg7XG4gICAgICAgICAgICBjYXNlIFwiZFwiOiByZXR1cm4gdGhpcy5kYXRlO1xuICAgICAgICAgICAgY2FzZSBcIkVcIjogcmV0dXJuIHRoaXMuZGF0ZSAmJiB0aGlzLm1vbnRoICYmIHRoaXMueWVhcjtcbiAgICAgICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgICBjYXNlIFwiSFwiOiByZXR1cm4gdGhpcy5ob3VycztcbiAgICAgICAgICAgIGNhc2UgXCJtXCI6IHJldHVybiB0aGlzLm1pbnV0ZXM7XG4gICAgICAgICAgICBjYXNlIFwic1wiOiByZXR1cm4gdGhpcy5zZWNvbmRzO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0RXhpc3Rpbmcoc3ltYm9sLCB2YWx1ZSkge1xuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICB0aGlzLnllYXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0RnVsbFllYXIoMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrOyAvL2FsbG93IDIvMjkgZGF0ZXNcbiAgICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5tb250aCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vbWFrZSBzdXJlIHlvdSBjYW4gdHlwZSAzMSBhdCBkYXkgcGFydFxuICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1vZGlmeVBhcnQoc3ltYm9sLCBvZmZzZXQpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gY2xvbmVEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5zZXRGdWxsWWVhcihuZXdWYWx1ZS5nZXRGdWxsWWVhcigpICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBhZGRNb250aHModGhpcy52YWx1ZSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNldERhdGUobmV3VmFsdWUuZ2V0RGF0ZSgpICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoXCI6XG4gICAgICAgICAgICBjYXNlIFwiSFwiOlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNldEhvdXJzKG5ld1ZhbHVlLmdldEhvdXJzKCkgKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5zZXRNaW51dGVzKG5ld1ZhbHVlLmdldE1pbnV0ZXMoKSArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic1wiOlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNldFNlY29uZHMobmV3VmFsdWUuZ2V0U2Vjb25kcygpICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuc2V0SG91cnMobmV3VmFsdWUuZ2V0SG91cnMoKSArICgxMiAqIG9mZnNldCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbHVlLmdldEZ1bGxZZWFyKCkgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4aXN0aW5nKHN5bWJvbCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQYXJ0KHN5bWJvbCwgY3VycmVudENoYXIsIHJlc2V0U2VnbWVudFZhbHVlKSB7XG4gICAgICAgIGlmICghY3VycmVudENoYXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRMZWFkaW5nWmVybygpO1xuICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZyhzeW1ib2wsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsLCBzd2l0Y2hUb05leHQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJhc2VEYXRlID0gdGhpcy5pbnRsLmZvcm1hdERhdGUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICBsZXQgZGF0ZVBhcnRzID0gdGhpcy5kYXRlRm9ybWF0U3RyaW5nKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgbGV0IGJhc2VGb3JtYXQgPSBkYXRlUGFydHMuc3ltYm9scztcbiAgICAgICAgbGV0IHJlcGxhY2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBwcmVmaXggPSBcIlwiO1xuICAgICAgICBsZXQgY3VycmVudCA9IFwiXCI7XG4gICAgICAgIGxldCBzdWZmaXggPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VEYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYmFzZUZvcm1hdFtpXSA9PT0gc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCArPSB0aGlzLmdldEV4aXN0aW5nKHN5bWJvbCkgPyBiYXNlRGF0ZVtpXSA6IFwiMFwiO1xuICAgICAgICAgICAgICAgIHJlcGxhY2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFyZXBsYWNlZCkge1xuICAgICAgICAgICAgICAgIHByZWZpeCArPSBiYXNlRGF0ZVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1ZmZpeCArPSBiYXNlRGF0ZVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY3VycmVudE1heExlbmd0aCA9IGN1cnJlbnQubGVuZ3RoIC0gMztcbiAgICAgICAgbGV0IHBhcnNlZERhdGUgPSBudWxsO1xuICAgICAgICBjb25zdCBtb250aCA9IHRoaXMubWF0Y2hNb250aChjdXJyZW50Q2hhcik7XG4gICAgICAgIGNvbnN0IGRheVBlcmlvZCA9IHRoaXMubWF0Y2hEYXlQZXJpb2QoY3VycmVudENoYXIsIHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IGlzWmVyb0N1cnJlbnRDaGFyID0gY3VycmVudENoYXIgPT09ICcwJztcbiAgICAgICAgY29uc3QgbGVhZGluZ1plcm8gPSAodGhpcy5sZWFkaW5nWmVybyB8fCB7fSlbc3ltYm9sXSB8fCAwO1xuICAgICAgICBpZiAoaXNaZXJvQ3VycmVudENoYXIpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZU51bWJlciA9IHBhcnNlSW50KHJlc2V0U2VnbWVudFZhbHVlID8gY3VycmVudENoYXIgOiBjdXJyZW50ICsgY3VycmVudENoYXIsIDEwKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZU51bWJlciA9PT0gMCAmJiAhdGhpcy5pc0FiYnJNb250aChkYXRlUGFydHMucGFydE1hcCwgc3ltYm9sKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50TGVhZGluZ1plcm8oc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRMZWFkaW5nWmVybygpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1heCgwLCBjdXJyZW50TWF4TGVuZ3RoKTsgaSA8PSBjdXJyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbWlkZGxlID0gcmVzZXRTZWdtZW50VmFsdWUgPyBjdXJyZW50Q2hhciA6IChjdXJyZW50LnN1YnN0cmluZyhpKSArIGN1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIGxldCBtaWRkbGVOdW1iZXIgPSBwYXJzZUludChtaWRkbGUsIDEwKTtcbiAgICAgICAgICAgIHBhcnNlZERhdGUgPSB0aGlzLmludGwucGFyc2VEYXRlKHByZWZpeCArIG1pZGRsZSArIHN1ZmZpeCwgdGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWREYXRlICYmICFpc05hTihtaWRkbGVOdW1iZXIpICYmICFpc05hTihwYXJzZUludChjdXJyZW50Q2hhciwgMTApKSkge1xuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICdNJyAmJiAhbW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGhOdW1iZXIgPSBtaWRkbGVOdW1iZXIgLSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGhOdW1iZXIgPiAtMSAmJiBtb250aE51bWJlciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gY2xvbmVEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXRNb250aChtb250aE51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkRGF0ZS5nZXRNb250aCgpICE9PSBtb250aE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBsYXN0RGF5T2ZNb250aChhZGRNb250aHMocGFyc2VkRGF0ZSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAneScpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IGNyZWF0ZURhdGUocGFyc2VJbnQobWlkZGxlLCAxMCksIHRoaXMubW9udGggPyB0aGlzLnZhbHVlLmdldE1vbnRoKCkgOiAwLCB0aGlzLmRhdGUgPyB0aGlzLnZhbHVlLmdldERhdGUoKSA6IDEsIHRoaXMuaG91cnMgPyB0aGlzLnZhbHVlLmdldEhvdXJzKCkgOiAwLCB0aGlzLm1pbnV0ZXMgPyB0aGlzLnZhbHVlLmdldE1pbnV0ZXMoKSA6IDAsIHRoaXMuc2Vjb25kcyA/IHRoaXMudmFsdWUuZ2V0U2Vjb25kcygpIDogMCwgdGhpcy5taWxsaXNlY29uZHMgPyB0aGlzLnZhbHVlLmdldE1pbGxpc2Vjb25kcygpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGUgJiYgcGFyc2VkRGF0ZS5nZXREYXRlKCkgIT09IHRoaXMudmFsdWUuZ2V0RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbGFzdERheU9mTW9udGgoYWRkTW9udGhzKHBhcnNlZERhdGUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyc2VkRGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vbW92ZSB0byBuZXh0IHNlZ21lbnQgaWYgdGhlIHBhcnQgd2lsbCBvdmVyZmxvdyB3aXRoIG5leHQgY2hhclxuICAgICAgICAgICAgICAgIC8vd2hlbiBzdGFydCBmcm9tIGVtcHR5IGRhdGUgKDAxLCB0aGVuIDAxMCksIHBhZGRlZCB6ZXJvcyBzaG91bGQgYmUgdHJpbW1lZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WYWx1ZSA9IHRoaXMucGFydFBhdHRlcm4oZGF0ZVBhcnRzLnBhcnRNYXAsIHN5bWJvbCkucGF0dGVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBwZWVrRGF0ZSA9IHRoaXMuaW50bC5wYXJzZURhdGUoYCR7cHJlZml4fSR7dGhpcy5wZWVrKG1pZGRsZSwgcGF0dGVyblZhbHVlKX0ke3N1ZmZpeH1gLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybkxlbmd0aCA9IHRoaXMucGF0dGVybkxlbmd0aChwYXR0ZXJuVmFsdWUpIHx8IHBhdHRlcm5WYWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVyblNhdGlzZmllZCA9IChsZWFkaW5nWmVybyArICh1bnBhZFplcm8obWlkZGxlKSB8fCBjdXJyZW50Q2hhcikubGVuZ3RoKSA+PSBwYXR0ZXJuTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN3aXRjaFRvTmV4dCA9IHBlZWtEYXRlID09PSBudWxsIHx8IHBhdHRlcm5TYXRpc2ZpZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZyhzeW1ib2wsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLnZhbHVlLCBzd2l0Y2hUb05leHQ6IHN3aXRjaFRvTmV4dCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb250aCkge1xuICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IHRoaXMuaW50bC5wYXJzZURhdGUocHJlZml4ICsgbW9udGggKyBzdWZmaXgsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZyhzeW1ib2wsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLnZhbHVlLCBzd2l0Y2hUb05leHQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheVBlcmlvZCkge1xuICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IHRoaXMuaW50bC5wYXJzZURhdGUocHJlZml4ICsgZGF5UGVyaW9kICsgc3VmZml4LCB0aGlzLmZvcm1hdCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLnZhbHVlLCBzd2l0Y2hUb05leHQ6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNaZXJvQ3VycmVudENoYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhpc3Rpbmcoc3ltYm9sLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bGwsIHN3aXRjaFRvTmV4dDogZmFsc2UgfTtcbiAgICB9XG4gICAgcmVzZXRMZWFkaW5nWmVybygpIHtcbiAgICAgICAgY29uc3QgaGFzTGVhZGluZ1plcm8gPSB0aGlzLmxlYWRpbmdaZXJvICE9PSBudWxsO1xuICAgICAgICB0aGlzLnNldExlYWRpbmdaZXJvKG51bGwpO1xuICAgICAgICByZXR1cm4gaGFzTGVhZGluZ1plcm87XG4gICAgfVxuICAgIHNldExlYWRpbmdaZXJvKGxlYWRpbmdaZXJvKSB7XG4gICAgICAgIHRoaXMubGVhZGluZ1plcm8gPSBsZWFkaW5nWmVybztcbiAgICB9XG4gICAgaW5jcmVtZW50TGVhZGluZ1plcm8oc3ltYm9sKSB7XG4gICAgICAgIGNvbnN0IGxlYWRpbmdaZXJvID0gdGhpcy5sZWFkaW5nWmVybyB8fCB7fTtcbiAgICAgICAgbGVhZGluZ1plcm9bc3ltYm9sXSA9IChsZWFkaW5nWmVyb1tzeW1ib2xdIHx8IDApICsgMTtcbiAgICAgICAgdGhpcy5sZWFkaW5nWmVybyA9IGxlYWRpbmdaZXJvO1xuICAgIH1cbiAgICBpc0FiYnJNb250aChwYXJ0cywgc3ltYm9sKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnBhcnRQYXR0ZXJuKHBhcnRzLCBzeW1ib2wpO1xuICAgICAgICByZXR1cm4gcGF0dGVybi50eXBlID09PSAnbW9udGgnICYmIHBhdHRlcm4ubmFtZXM7XG4gICAgfVxuICAgIHBhcnRQYXR0ZXJuKHBhcnRzLCBzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcigocGFydCkgPT4gcGFydC5wYXR0ZXJuLmluZGV4T2Yoc3ltYm9sKSAhPT0gLTEpWzBdO1xuICAgIH1cbiAgICBwZWVrKHZhbHVlLCBwYXR0ZXJuKSB7XG4gICAgICAgIGNvbnN0IHBlZWtWYWx1ZSA9IHVucGFkWmVybyh2YWx1ZSkgKyAnMCc7XG4gICAgICAgIHJldHVybiBwYWRaZXJvKHBhdHRlcm4ubGVuZ3RoIC0gcGVla1ZhbHVlLmxlbmd0aCkgKyBwZWVrVmFsdWU7XG4gICAgfVxuICAgIG1hdGNoTW9udGgodHlwZWRDaGFyKSB7XG4gICAgICAgIHRoaXMudHlwZWRNb250aFBhcnQgKz0gdHlwZWRDaGFyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5tb250aE5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy50eXBlZE1vbnRoUGFydC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubW9udGhOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vbnRoTmFtZXNbaV0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMudHlwZWRNb250aFBhcnQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoTmFtZXNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9udGhBc051bSA9IHBhcnNlSW50KHRoaXMudHlwZWRNb250aFBhcnQsIDEwKTtcbiAgICAgICAgICAgIGlmIChtb250aEFzTnVtID49IDEgJiYgbW9udGhBc051bSA8PSAxMiAmJiBtb250aEFzTnVtLnRvU3RyaW5nKCkgPT09IHRoaXMudHlwZWRNb250aFBhcnQgLyplbnN1cmUgdGhleSBleGFjdCBtYXRjaCovKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9udGhOYW1lc1ttb250aEFzTnVtIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnR5cGVkTW9udGhQYXJ0ID0gdGhpcy50eXBlZE1vbnRoUGFydC5zdWJzdHJpbmcoMSwgdGhpcy50eXBlZE1vbnRoUGFydC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBtYXRjaERheVBlcmlvZCh0eXBlZENoYXIsIHN5bWJvbCkge1xuICAgICAgICBjb25zdCBsb3dlckNoYXJ0ID0gU3RyaW5nKHR5cGVkQ2hhcikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ2EnICYmIHRoaXMuZGF5UGVyaW9kcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF5UGVyaW9kcy5hbS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobG93ZXJDaGFydCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXlQZXJpb2RzLmFtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXlQZXJpb2RzLnBtLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlckNoYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheVBlcmlvZHMucG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBhbGxGb3JtYXRlZE1vbnRocygpIHtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdFBhcnRzID0gdGhpcy5pbnRsLnNwbGl0RGF0ZUZvcm1hdCh0aGlzLmZvcm1hdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZUZvcm1hdFBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdFBhcnRzW2ldLnR5cGUgPT09IFwibW9udGhcIiAmJiBkYXRlRm9ybWF0UGFydHNbaV0ubmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRsLmRhdGVGb3JtYXROYW1lcyhkYXRlRm9ybWF0UGFydHNbaV0ubmFtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhbGxEYXlQZXJpb2RzKCkge1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0UGFydHMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlRm9ybWF0UGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0UGFydHNbaV0udHlwZSA9PT0gXCJkYXlwZXJpb2RcIiAmJiBkYXRlRm9ybWF0UGFydHNbaV0ubmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRsLmRhdGVGb3JtYXROYW1lcyhkYXRlRm9ybWF0UGFydHNbaV0ubmFtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVuZ3RoKHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm5bMF0gPT09ICd5Jykge1xuICAgICAgICAgICAgcmV0dXJuIDQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFNIT1JUX1BBVFRFUk5fTEVOR1RIX1JFR0VYUC50ZXN0KHBhdHRlcm4pKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy9UT0RPOiBSRU1PVkUhXG4gICAgZGF0ZUZvcm1hdFN0cmluZyhkYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdFBhcnRzID0gdGhpcy5pbnRsLnNwbGl0RGF0ZUZvcm1hdChmb3JtYXQpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgICAgICBjb25zdCBwYXJ0TWFwID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZUZvcm1hdFBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcGFydExlbmd0aCA9IHRoaXMuaW50bC5mb3JtYXREYXRlKGRhdGUsIHsgcGF0dGVybjogZGF0ZUZvcm1hdFBhcnRzW2ldLnBhdHRlcm4gfSkubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHBhcnRMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFydHMucHVzaCh0aGlzLnN5bWJvbHNbZGF0ZUZvcm1hdFBhcnRzW2ldLnBhdHRlcm5bMF1dIHx8IFwiX1wiKTtcbiAgICAgICAgICAgICAgICBwYXJ0TWFwLnB1c2goZGF0ZUZvcm1hdFBhcnRzW2ldKTtcbiAgICAgICAgICAgICAgICBwYXJ0TGVuZ3RoLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBuZXcgTWFzaygpO1xuICAgICAgICByZXR1cm5WYWx1ZS5zeW1ib2xzID0gcGFydHMuam9pbihcIlwiKTtcbiAgICAgICAgcmV0dXJuVmFsdWUucGFydE1hcCA9IHBhcnRNYXA7XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9XG4gICAgbWVyZ2UodGV4dCwgbWFzaykge1xuICAgICAgICAvLyBJbXBvcnRhbnQ6IHJpZ2h0IHRvIGxlZnQuXG4gICAgICAgIGxldCByZXN1bHRUZXh0ID0gXCJcIjtcbiAgICAgICAgbGV0IHJlc3VsdEZvcm1hdCA9IFwiXCI7XG4gICAgICAgIGxldCBmb3JtYXQgPSBtYXNrLnN5bWJvbHM7XG4gICAgICAgIGZvciAobGV0IHIgPSBmb3JtYXQubGVuZ3RoIC0gMTsgciA+PSAwOyByLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmtub3duUGFydHMuaW5kZXhPZihmb3JtYXRbcl0pID09PSAtMSB8fCB0aGlzLmdldEV4aXN0aW5nKGZvcm1hdFtyXSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRUZXh0ID0gdGV4dFtyXSArIHJlc3VsdFRleHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0Rm9ybWF0ID0gZm9ybWF0W3JdICsgcmVzdWx0Rm9ybWF0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN5bWJvbCA9IGZvcm1hdFtyXTtcbiAgICAgICAgICAgICAgICB3aGlsZSAociA+PSAwICYmIGN1cnJlbnRTeW1ib2wgPT09IGZvcm1hdFtyXSkge1xuICAgICAgICAgICAgICAgICAgICByLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHIrKztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sZWFkaW5nWmVybyAmJiB0aGlzLmxlYWRpbmdaZXJvW2N1cnJlbnRTeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRleHQgPSAnMCcgKyByZXN1bHRUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGV4dCA9IHRoaXMuZGF0ZUZpZWxkTmFtZShtYXNrLnBhcnRNYXBbcl0pICsgcmVzdWx0VGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlc3VsdEZvcm1hdC5sZW5ndGggPCByZXN1bHRUZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRGb3JtYXQgPSBmb3JtYXRbcl0gKyByZXN1bHRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcmVzdWx0VGV4dCwgcmVzdWx0Rm9ybWF0XTtcbiAgICB9XG4gICAgZGF0ZUZpZWxkTmFtZShwYXJ0KSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdFBsYWNlaG9sZGVyID0gdGhpcy5mb3JtYXRQbGFjZWhvbGRlciB8fCAnd2lkZSc7XG4gICAgICAgIGlmIChmb3JtYXRQbGFjZWhvbGRlcltwYXJ0LnR5cGVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0UGxhY2Vob2xkZXJbcGFydC50eXBlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0UGxhY2Vob2xkZXIgPT09ICdmb3JtYXRQYXR0ZXJuJykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnQucGF0dGVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbnRsLmRhdGVGaWVsZE5hbWUoT2JqZWN0LmFzc2lnbihwYXJ0LCB7IG5hbWVUeXBlOiBmb3JtYXRQbGFjZWhvbGRlciB9KSk7XG4gICAgfVxufVxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgRGF0ZUlucHV0IGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19kYXRlaW5wdXQgJX0jdG9jLWJhc2ljLXVzYWdlKS5cbiAqL1xuY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihjZHIsIGludGwsIHJlbmRlcmVyLCBlbGVtZW50LCBuZ1pvbmUsIGluamVjdG9yLCBsb2NhbGl6YXRpb24sIHBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMucGlja2VyU2VydmljZSA9IHBpY2tlclNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGRpc2FibGVkYCBwcm9wZXJ0eSBvZiB0aGUgRGF0ZUlucHV0IGFuZFxuICAgICAgICAgKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRlaW5wdXQgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBEYXRlSW5wdXRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZWFkb25seV9kYXRlaW5wdXQgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBEYXRlSW5wdXQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHRhYkluZGV4YCBwcm9wZXJ0eSBvZiB0aGUgRGF0ZUlucHV0LlxuICAgICAgICAgKiAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucm9sZSA9ICdzcGluYnV0dG9uJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXJpYVJlYWRPbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBpbnB1dCB2YWx1ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZvcm1hdHNfZGF0ZWlucHV0ICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcm1hdCA9IFwiZFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBoaW50IHRoZSBEYXRlSW5wdXQgZGlzcGxheXMgd2hlbiBpdHMgdmFsdWUgaXMgYG51bGxgLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIGFydGljbGUgb25cbiAgICAgICAgICogW3BsYWNlaG9sZGVyc10oeyUgc2x1ZyBwbGFjZWhvbGRlcnNfZGF0ZWlucHV0ICV9KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tZGF0ZWlucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgYmlydGggZGF0ZS4uLlwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIG1pbiBvciBtYXggdmFsaWRhdG9ycyBhcmUgdG8gYmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYW5nZVZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKiBCYXNlZCBvbiB0aGUgbWluIGFuZCBtYXggdmFsdWVzLCBzcGVjaWZpZXMgd2hldGhlciB0aGUgdmFsdWUgd2lsbCBiZSBhdXRvLWNvcnJlY3RlZCB3aGlsZSB0eXBpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmF1dG9Db3JyZWN0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIHZhbGlkYXRpb24gZm9yIGluY29tcGxldGUgZGF0ZXMgaXMgdG8gYmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSAqKlVwKiogYW5kICoqRG93bioqIHNwaW4gYnV0dG9ucyB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIGFydGljbGUgb25cbiAgICAgICAgICogW3NwaW5uZXIgYnV0dG9uc10oeyUgc2x1ZyBzcGluYnV0dG9uc19kYXRlaW5wdXQgJX0pLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zcGlubmVycyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1BvcHVwT3BlbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oYXNQb3B1cCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWUuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgc2VjdGlvbiBvblxuICAgICAgICAgKiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVpbnB1dCAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZWlucHV0ICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZVVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBmb2N1c2VzIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19kYXRlaW5wdXQgJX0jdG9jLWV2ZW50cykuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVG8gd2lyZSB0aGUgZXZlbnQgcHJvZ3JhbW1hdGljYWxseSwgdXNlIHRoZSBgb25Gb2N1c2AgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLWRhdGVpbnB1dCAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudCBpcyBmb2N1c2VkXCIpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgaW5wdXQgZWxlbWVudCBnZXRzIGJsdXJyZWQuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgc2VjdGlvbiBvblxuICAgICAgICAgKiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVpbnB1dCAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkJsdXJgIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1kYXRlaW5wdXQgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCI+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAqIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgcHVibGljIGhhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgICAgICAqICAgICAgY29uc29sZS5sb2coXCJDb21wb25lbnQgaXMgYmx1cnJlZFwiKTtcbiAgICAgICAgICogICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgdGhpcy5hcnJvdyA9IEFycm93O1xuICAgICAgICB0aGlzLmFycm93RGlyZWN0aW9uID0gQXJyb3cuTm9uZTtcbiAgICAgICAgdGhpcy5mb3JtYXRTZWN0aW9ucyA9IHsgZGF0ZTogZmFsc2UsIHRpbWU6IGZhbHNlIH07XG4gICAgICAgIHRoaXMuaGFzTW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9jdXNlZFByaW9yVG9Nb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNEYXRlSW5jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1hdCA9IFwiXCI7XG4gICAgICAgIHRoaXMuYmFja3NwYWNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXRTZWdtZW50VmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1pblZhbGlkYXRvciA9IG5vb3A7XG4gICAgICAgIHRoaXMubWF4VmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5rZW5kb0RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLnBhc3RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gbm9vcDtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMuc3ltYm9sc01hcCA9IHRoaXMuZGF0ZVN5bWJvbE1hcCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdFNlY3Rpb25zKCk7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5pbnB1dCA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB0YWJJbmRleCh0YWJJbmRleCkge1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIERhdGVJbnB1dCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiA+IFRoZSBgdmFsdWVgIGhhcyB0byBiZSBhIHZhbGlkIFtKYXZhU2NyaXB0IGBEYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZSkgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5hdXRvQ29ycmVjdCAmJiAhaXNJblJhbmdlKHZhbHVlLCB0aGlzLm1pbiwgdGhpcy5tYXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlVXBkYXRlLmVtaXQoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBnZXQgd3JhcHBlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgaW5wdXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlSW5wdXQgPyB0aGlzLmRhdGVJbnB1dC5uYXRpdmVFbGVtZW50IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGlucHV0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5pbnB1dEVsZW1lbnQgfHwge30pLnZhbHVlIHx8ICcnO1xuICAgIH1cbiAgICBnZXQgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxuICAgIHNldCBpc0FjdGl2ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLndyYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLnBpY2tlclNlcnZpY2UpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRWYWx1ZSB8fCAhU3RyaW5nKHRoaXMuY3VycmVudFZhbHVlKS50cmltKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb250YWluc0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihjbG9zZXN0KGVsZW1lbnQsIG5vZGUgPT4gbm9kZSA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlSYW5nZSgpO1xuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24gfHwgY2hhbmdlcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdG9yID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtaW5WYWxpZGF0b3IodGhpcy5taW4pIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdG9yID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtYXhWYWxpZGF0b3IodGhpcy5tYXgpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID8gaW5jb21wbGV0ZURhdGVWYWxpZGF0b3IoKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLnN5bWJvbHNNYXAgPSB0aGlzLmRhdGVTeW1ib2xNYXAoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0U2VjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0VxdWFsVG9LZW5kb0RhdGUgPSB0aGlzLmtlbmRvRGF0ZSAmJiBpc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMua2VuZG9EYXRlLmdldERhdGVPYmplY3QoKSk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdCB8fCAhaXNFcXVhbFRvS2VuZG9EYXRlIHx8IGNoYW5nZXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMua2VuZG9EYXRlID0gdGhpcy5nZXRLZW5kb0RhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSh0aGlzLmlzQWN0aXZlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50bFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbnRsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLmlucHV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb3JFYWNoKHVuYmluZENhbGxiYWNrID0+IHVuYmluZENhbGxiYWNrKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWxpZGF0b3IoY29udHJvbCkgfHwgdGhpcy5tYXhWYWxpZGF0b3IoY29udHJvbCkgfHwgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yKGNvbnRyb2wsIHRoaXMuaXNEYXRlSW5jb21wbGV0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmtlbmRvRGF0ZSA9IHRoaXMuZ2V0S2VuZG9EYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24gPSB0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvL25nTW9kZWwgYmluZGluZ1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmtlbmRvRGF0ZSA9IHRoaXMuZ2V0S2VuZG9EYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKHRoaXMuaXNBY3RpdmUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdHJpZ2dlckNoYW5nZSgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmtlbmRvRGF0ZS5nZXREYXRlT2JqZWN0KCk7XG4gICAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5vdGlmeSgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZSh0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgRGF0ZUlucHV0IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cImRhdGVpbnB1dC5mb2N1cygpXCI+Rm9jdXMgZGF0ZSBpbnB1dDwvYnV0dG9uPlxuICAgICAqICA8a2VuZG8tZGF0ZWlucHV0ICNkYXRlaW5wdXQ+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlU2VnbWVudCh0aGlzLmN1cnJlbnRGb3JtYXRbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBEYXRlSW5wdXQgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQuYmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVCdXR0b25DbGljayhvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5hcnJvd0RpcmVjdGlvbiA9IEFycm93Lk5vbmU7XG4gICAgICAgIHRoaXMubW9kaWZ5RGF0ZVNlZ21lbnRWYWx1ZShvZmZzZXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbW9kaWZ5RGF0ZVNlZ21lbnRWYWx1ZShvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgY2FyZXQgPSB0aGlzLmNhcmV0KCk7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuY3VycmVudEZvcm1hdFtjYXJldFswXV07XG4gICAgICAgIGNvbnN0IHN0ZXAgPSAodGhpcy5zdGVwcyB8fCB7fSlbdGhpcy5zeW1ib2xzTWFwW3N5bWJvbF1dIHx8IDE7XG4gICAgICAgIHRoaXMua2VuZG9EYXRlLm1vZGlmeVBhcnQoc3ltYm9sLCBvZmZzZXQgKiBzdGVwKTtcbiAgICAgICAgdGhpcy5wdXREYXRlSW5SYW5nZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSh0aGlzLmlzQWN0aXZlKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZVNlZ21lbnQoc3ltYm9sKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbmNvbXBsZXRlVmFsaWRhdGlvblN0YXR1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc3dpdGNoRGF0ZVNlZ21lbnQob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IGNhcmV0ID0gdGhpcy5jYXJldCgpO1xuICAgICAgICBpZiAodGhpcy5rZW5kb0RhdGUucmVzZXRMZWFkaW5nWmVybygpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSh0aGlzLmlzQWN0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FyZXRbMF0gPCBjYXJldFsxXSAmJiB0aGlzLmN1cnJlbnRGb3JtYXRbY2FyZXRbMF1dICE9PSB0aGlzLmN1cnJlbnRGb3JtYXRbY2FyZXRbMV0gLSAxXSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROZWFyZXN0U2VnbWVudChvZmZzZXQgPiAwID8gY2FyZXRbMF0gOiBjYXJldFsxXSAtIDEpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlZ21lbnRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2aW91c0Zvcm1hdFN5bWJvbCA9IHRoaXMuY3VycmVudEZvcm1hdFtjYXJldFswXV07XG4gICAgICAgIGxldCBhID0gY2FyZXRbMF0gKyBvZmZzZXQ7XG4gICAgICAgIHdoaWxlIChhID4gMCAmJiBhIDwgdGhpcy5jdXJyZW50Rm9ybWF0Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1hdFthXSAhPT0gcHJldmlvdXNGb3JtYXRTeW1ib2wgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtYXRbYV0gIT09IFwiX1wiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhICs9IG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9ybWF0W2FdID09PSBcIl9cIikge1xuICAgICAgICAgICAgLy90aGVyZSBpcyBub3Qga25vd24gc3ltYm9sIGZvdW5kXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGIgPSBhO1xuICAgICAgICB3aGlsZSAoYiA+PSAwICYmIGIgPCB0aGlzLmN1cnJlbnRGb3JtYXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9ybWF0W2JdICE9PSB0aGlzLmN1cnJlbnRGb3JtYXRbYV0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChhID4gYiAmJiAoYiArIDEgIT09IGNhcmV0WzBdIHx8IGEgKyAxICE9PSBjYXJldFsxXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZXQoYiArIDEsIGEgKyAxKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWdtZW50VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYSA8IGIgJiYgKGEgIT09IGNhcmV0WzBdIHx8IGIgIT09IGNhcmV0WzFdKSkge1xuICAgICAgICAgICAgdGhpcy5jYXJldChhLCBiKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWdtZW50VmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2VsZWN0RGF0ZVNlZ21lbnQoc3ltYm9sKSB7XG4gICAgICAgIGxldCBiZWdpbiA9IC0xO1xuICAgICAgICBsZXQgZW5kID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRGb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb3JtYXRbaV0gPT09IHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIGlmIChiZWdpbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICAgICAgICBiZWdpbiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYXJldCgwLCAwKTtcbiAgICAgICAgdGhpcy5jYXJldChiZWdpbiwgZW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUNsaWNrKCkge1xuICAgICAgICB0aGlzLmhhc01vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uUHJlc2VudCA9IHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9PSB0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ7XG4gICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlclRvZ2dsZWQgPSBpc1ByZXNlbnQodGhpcy5wbGFjZWhvbGRlcikgJiYgIXRoaXMua2VuZG9EYXRlLmhhc1ZhbHVlKCkgJiYgIXRoaXMuZm9jdXNlZFByaW9yVG9Nb3VzZWRvd247XG4gICAgICAgICAgICAvLyBmb2N1cyBmaXJzdCBzZWdtZW50IGlmIHRoZSB1c2VyIGhhc24ndCBzZWxlY3RlZCBzb21ldGhpbmcgZHVyaW5nIG1vdXNlZG93biBhbmQgaWYgdGhlIHBsYWNlaG9sZGVyIHdhcyBqdXN0IHRvZ2dsZWRcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEZpcnN0U2VnbWVudCA9ICFzZWxlY3Rpb25QcmVzZW50ICYmIHBsYWNlaG9sZGVyVG9nZ2xlZDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0Rmlyc3RTZWdtZW50ID8gMCA6IHRoaXMuY2FyZXQoKVswXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TmVhcmVzdFNlZ21lbnQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVEcmFnQW5kRHJvcChhcmdzKSB7XG4gICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU1vdXNlZG93bigpIHtcbiAgICAgICAgdGhpcy5oYXNNb3VzZWRvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzZWRQcmlvclRvTW91c2Vkb3duID0gdGhpcy5pc0FjdGl2ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUZvY3VzKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKCk7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3VzZWRvd24pIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZXQoMCwgdGhpcy5pbnB1dFZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNNb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uRm9jdXMpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEZvY3VzKGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRGb2N1cyhhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQmx1cihhcmdzKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldFNlZ21lbnRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMua2VuZG9EYXRlLnJlc2V0TGVhZGluZ1plcm8oKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50VmFsdWUoKTtcbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uQmx1cikgfHwgcmVxdWlyZXNab25lT25CbHVyKHRoaXMubmdDb250cm9sKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRCbHVyKGFyZ3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRCbHVyKGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEtlbmRvRGF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IGxlYWRpbmdaZXJvIH0gPSAodGhpcy5rZW5kb0RhdGUgfHwge30pIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGtlbmRvRGF0ZSA9IG5ldyBLZW5kb0RhdGUodGhpcy5pbnRsLCB0aGlzLmZvcm1hdFBsYWNlaG9sZGVyLCB0aGlzLmZvcm1hdCwgdmFsdWUpO1xuICAgICAgICBrZW5kb0RhdGUuc2V0TGVhZGluZ1plcm8odGhpcy5pc0FjdGl2ZSA/IGxlYWRpbmdaZXJvIDogbnVsbCk7XG4gICAgICAgIHJldHVybiBrZW5kb0RhdGU7XG4gICAgfVxuICAgIGRhdGVTeW1ib2xNYXAoKSB7XG4gICAgICAgIGNvbnN0IHJlZHVjZXIgPSAobWFwJCQxLCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICBtYXAkJDFbcGFydC5wYXR0ZXJuWzBdXSA9IHBhcnQudHlwZTtcbiAgICAgICAgICAgIHJldHVybiBtYXAkJDE7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KS5yZWR1Y2UocmVkdWNlciwge30pO1xuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50VmFsdWUoaXNBY3RpdmUpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhcmV0KClbMF07IC8vWFhYOiBnZXQgY2FyZXQgcG9zaXRpb24gYmVmb3JlIGlucHV0IGlzIHVwZGF0ZWRcbiAgICAgICAgY29uc3QgdGV4dHMgPSB0aGlzLmtlbmRvRGF0ZS5nZXRUZXh0QW5kRm9ybWF0KCk7XG4gICAgICAgIGNvbnN0IHNob3dQbGFjZWhvbGRlciA9ICF0aGlzLmlzQWN0aXZlICYmIGlzUHJlc2VudCh0aGlzLnBsYWNlaG9sZGVyKSAmJiAhdGhpcy5rZW5kb0RhdGUuaGFzVmFsdWUoKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWxlbWVudDtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybWF0ID0gdGV4dHNbMV07XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gIXNob3dQbGFjZWhvbGRlciA/IHRleHRzWzBdIDogJyc7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoaW5wdXQsIFwidmFsdWVcIiwgdGhpcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICBpZiAoaW5wdXQucGxhY2Vob2xkZXIgIT09IHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoaW5wdXQsIFwicGxhY2Vob2xkZXJcIiwgdGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5lYXJlc3RTZWdtZW50KHN0YXJ0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXJldChzdGFydCwgZW5kID0gc3RhcnQpIHtcbiAgICAgICAgY29uc3QgaXNQb3NpdGlvbiA9IHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IFtzdGFydCwgc3RhcnRdO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5pbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChpc1Bvc2l0aW9uICYmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zZWxlY3Rpb25TdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBbZWxlbWVudC5zZWxlY3Rpb25TdGFydCwgZWxlbWVudC5zZWxlY3Rpb25FbmRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9XG4gICAgc2VsZWN0TmVhcmVzdFNlZ21lbnQoaW5kZXgpIHtcbiAgICAgICAgLy8gRmluZHMgdGhlIG5lYXJlc3QgKGluIGJvdGggZGlyZWN0aW9ucykga25vd24gcGFydC5cbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4LCBqID0gaW5kZXggLSAxOyBpIDwgdGhpcy5jdXJyZW50Rm9ybWF0Lmxlbmd0aCB8fCBqID49IDA7IGkrKywgai0tKSB7XG4gICAgICAgICAgICBpZiAoaSA8IHRoaXMuY3VycmVudEZvcm1hdC5sZW5ndGggJiYgdGhpcy5jdXJyZW50Rm9ybWF0W2ldICE9PSBcIl9cIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZVNlZ21lbnQodGhpcy5jdXJyZW50Rm9ybWF0W2ldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA+PSAwICYmIHRoaXMuY3VycmVudEZvcm1hdFtqXSAhPT0gXCJfXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGVTZWdtZW50KHRoaXMuY3VycmVudEZvcm1hdFtqXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeVJhbmdlKCkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1ZhbGlkUmFuZ2UodGhpcy5taW4sIHRoaXMubWF4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWF4IHZhbHVlIHNob3VsZCBiZSBiaWdnZXIgdGhhbiB0aGUgbWluLiBTZWUgJHtNSU5fRE9DX0xJTkskMX0gYW5kICR7TUFYX0RPQ19MSU5LJDF9LmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndmFsdWUnIHNob3VsZCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZSBpbnN0YW5jZS4gQ2hlY2sgJHtWQUxVRV9ET0NfTElOSyQxfSBmb3IgcG9zc2libGUgcmVzb2x1dGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdXREYXRlSW5SYW5nZSgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmtlbmRvRGF0ZS5nZXREYXRlT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGRhdGVJblJhbmdlKGN1cnJlbnREYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBpZiAodGhpcy5hdXRvQ29ycmVjdCAmJiAhaXNFcXVhbChjdXJyZW50RGF0ZSwgY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5rZW5kb0RhdGUgPSB0aGlzLmdldEtlbmRvRGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUZvcm1hdFNlY3Rpb25zKCkge1xuICAgICAgICB0aGlzLmZvcm1hdFNlY3Rpb25zID0gdGhpcy5pbnRsLnNwbGl0RGF0ZUZvcm1hdCh0aGlzLmZvcm1hdClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHsgZGF0ZSwgdGltZSB9LCBwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGU6IGRhdGUgfHwgREFURV9QQVJUX1JFR0VYUC50ZXN0KHAudHlwZSksXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSB8fCBUSU1FX1BBUlRfUkVHRVhQLnRlc3QocC50eXBlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgeyBkYXRlOiBmYWxzZSwgdGltZTogZmFsc2UgfSk7XG4gICAgfVxuICAgIGludGxDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0U2VjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5rZW5kb0RhdGUgPSB0aGlzLmdldEtlbmRvRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50VmFsdWUodGhpcy5pc0FjdGl2ZSk7XG4gICAgfVxuICAgIHVwZGF0ZU9uUGFzdGUoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5pbnRsLnBhcnNlRGF0ZSh0aGlzLmlucHV0VmFsdWUsIHRoaXMuZm9ybWF0KSB8fCB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBub3RpZnkgPSArdmFsdWUgIT09ICt0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJpbmRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbW91c2V3aGVlbEhhbmRsZXIgPSB0aGlzLmhhbmRsZU1vdXNlV2hlZWwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnRE9NTW91c2VTY3JvbGwnLCBtb3VzZXdoZWVsSGFuZGxlciksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdtb3VzZXdoZWVsJywgbW91c2V3aGVlbEhhbmRsZXIpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ3Bhc3RlJywgdGhpcy5oYW5kbGVQYXN0ZS5iaW5kKHRoaXMpKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2lucHV0JywgdGhpcy5oYW5kbGVJbnB1dC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIGhhbmRsZU1vdXNlV2hlZWwoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCAhdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50ID0gd2luZG93LmV2ZW50IHx8IGV2ZW50O1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRGF0ZVNlZ21lbnQoKGV2ZW50LndoZWVsRGVsdGEgfHwgLWV2ZW50LmRldGFpbCkgPiAwID8gLTEgOiAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5RGF0ZVNlZ21lbnRWYWx1ZSgoZXZlbnQud2hlZWxEZWx0YSB8fCAtZXZlbnQuZGV0YWlsKSA+IDAgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVQYXN0ZSgpIHtcbiAgICAgICAgdGhpcy5wYXN0ZSA9IHRydWU7XG4gICAgfVxuICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMuVGFiKSB7XG4gICAgICAgICAgICBjb25zdCBtb3ZlZCA9IHRoaXMuc3dpdGNoRGF0ZVNlZ21lbnQoZXZlbnQuc2hpZnRLZXkgPyAtMSA6IDEpO1xuICAgICAgICAgICAgaWYgKG1vdmVkKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5CYWNrc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuYmFja3NwYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd0Rvd246XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlEYXRlU2VnbWVudFZhbHVlKC0xKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd1VwOlxuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5RGF0ZVNlZ21lbnRWYWx1ZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd1JpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoRGF0ZVNlZ21lbnQoMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuQXJyb3dMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuc3dpdGNoRGF0ZVNlZ21lbnQoLTEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkhvbWU6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZWFyZXN0U2VnbWVudCgwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5FbmQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZWFyZXN0U2VnbWVudCh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvL3NraXAgdGhlIHByZXZlbnREZWZhdWx0IGlmIHdlIGRpZG4ndCBoYW5kbGVkIHRoZSBrZXlDb2RlXG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaGFuZGxlSW5wdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXN0ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPblBhc3RlKCk7XG4gICAgICAgICAgICB0aGlzLnBhc3RlID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlmZiA9IGFwcHJveGltYXRlU3RyaW5nTWF0Y2hpbmcodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuY3VycmVudEZvcm1hdCwgdGhpcy5pbnB1dFZhbHVlLCB0aGlzLmNhcmV0KClbMF0pO1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uT25seSA9IChkaWZmLmxlbmd0aCA9PT0gMSAmJiBkaWZmWzBdWzFdID09PSBcIl9cIik7XG4gICAgICAgIGxldCBzd2l0Y2hQYXJ0ID0gZmFsc2U7XG4gICAgICAgIGlmICghbmF2aWdhdGlvbk9ubHkpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWRQYXJ0O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUGFydCA9IHRoaXMua2VuZG9EYXRlLnBhcnNlUGFydChkaWZmW2ldWzBdLCBkaWZmW2ldWzFdLCB0aGlzLnJlc2V0U2VnbWVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2hQYXJ0ID0gcGFyc2VkUGFydC5zd2l0Y2hUb05leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLmtlbmRvRGF0ZS5nZXREYXRlT2JqZWN0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiBjYW5kaWRhdGUgJiYgIXRoaXMuZm9ybWF0U2VjdGlvbnMuZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMua2VuZG9EYXRlID0gdGhpcy5nZXRLZW5kb0RhdGUoc2V0VGltZSh0aGlzLnZhbHVlLCBjYW5kaWRhdGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0U2VnbWVudFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHV0RGF0ZUluUmFuZ2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50VmFsdWUodGhpcy5pc0FjdGl2ZSk7XG4gICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUluY29tcGxldGVWYWxpZGF0aW9uU3RhdHVzKCk7XG4gICAgICAgIGlmIChkaWZmLmxlbmd0aCAmJiBkaWZmWzBdWzBdICE9PSBcIl9cIikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlU2VnbWVudChkaWZmWzBdWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dpdGNoUGFydCB8fCBuYXZpZ2F0aW9uT25seSkge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hEYXRlU2VnbWVudCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5iYWNrc3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRGF0ZVNlZ21lbnQoLTEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFja3NwYWNlID0gZmFsc2U7XG4gICAgfVxuICAgIGVtaXRGb2N1cyhhcmdzKSB7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5vbkZvY3VzLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEJsdXIoYXJncykge1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5vbkJsdXIuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVJbmNvbXBsZXRlVmFsaWRhdGlvblN0YXR1cygpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuaXNEYXRlSW5jb21wbGV0ZTtcbiAgICAgICAgdGhpcy5pc0RhdGVJbmNvbXBsZXRlID0gdGhpcy5rZW5kb0RhdGUuaGFzVmFsdWUoKSAmJiB0aGlzLnZhbHVlID09PSBudWxsO1xuICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSA9PT0gdGhpcy5pc0RhdGVJbmNvbXBsZXRlIHx8ICF0aGlzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5uZ0NvbnRyb2wpICYmICFpc1ByZXNlbnQodGhpcy5waWNrZXJTZXJ2aWNlKSkge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByZXNlbnQodGhpcy5waWNrZXJTZXJ2aWNlKSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLmRhdGVDb21wbGV0ZW5lc3NDaGFuZ2UuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRGF0ZUlucHV0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kby1kYXRlaW5wdXQnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlSW5wdXRDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVJbnB1dENvbXBvbmVudCksIG11bHRpOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTDEwTl9QUkVGSVgsIHVzZVZhbHVlOiAna2VuZG8uZGF0ZWlucHV0JyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtlbmRvSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVJbnB1dENvbXBvbmVudCkgfSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRlaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciBrZW5kb0RhdGVJbnB1dExvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgIGkxOG4taW5jcmVtZW50PVwia2VuZG8uZGF0ZWlucHV0LmluY3JlbWVudHxUaGUgbGFiZWwgZm9yIHRoZSAqKkluY3JlbWVudCoqIGJ1dHRvbiBpbiB0aGUgRGF0ZUlucHV0XCJcbiAgICAgICAgaW5jcmVtZW50PVwiSW5jcmVhc2UgdmFsdWVcIlxuXG4gICAgICAgIGkxOG4tZGVjcmVtZW50PVwia2VuZG8uZGF0ZWlucHV0LmRlY3JlbWVudHxUaGUgbGFiZWwgZm9yIHRoZSAqKkRlY3JlbWVudCoqIGJ1dHRvbiBpbiB0aGUgRGF0ZUlucHV0XCJcbiAgICAgICAgZGVjcmVtZW50PVwiRGVjcmVhc2UgdmFsdWVcIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8c3BhbiBjbGFzcz1cImstZGF0ZWlucHV0LXdyYXBcIiAjd3JhcD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjZGF0ZUlucHV0XG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1pbnB1dFwiXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJhcmlhUmVhZE9ubHlcIlxuICAgICAgICAgICAgW2lkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1BvcHVwT3BlblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImhhc1BvcHVwXCJcbiAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlQ2xpY2ssXG4gICAgICAgICAgICAgICAgZm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgIG1vdXNlZG93bjogaGFuZGxlTW91c2Vkb3duLFxuICAgICAgICAgICAgICAgIHRvdWNoc3RhcnQ6IGhhbmRsZU1vdXNlZG93bixcbiAgICAgICAgICAgICAgICBkcmFnc3RhcnQ6IGhhbmRsZURyYWdBbmREcm9wLFxuICAgICAgICAgICAgICAgIGRyb3A6IGhhbmRsZURyYWdBbmREcm9wLFxuICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzcGlubmVyc1wiIGNsYXNzPVwiay1zZWxlY3RcIiAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1saW5rIGstbGluay1pbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFycm93RGlyZWN0aW9uID09PSBhcnJvdy5VcFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJhcnJvd0RpcmVjdGlvbiA9IGFycm93LlVwXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJhcnJvd0RpcmVjdGlvbiA9IGFycm93Lk5vbmVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCdXR0b25DbGljaygxKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2luY3JlbWVudCcpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2luY3JlbWVudCcpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWFycm93LW5cIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1saW5rIGstbGluay1kZWNyZWFzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJ1dHRvbkNsaWNrKC0xKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFycm93RGlyZWN0aW9uID09PSBhcnJvdy5Eb3duXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImFycm93RGlyZWN0aW9uID0gYXJyb3cuRG93blwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiYXJyb3dEaXJlY3Rpb24gPSBhcnJvdy5Ob25lXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgnZGVjcmVtZW50JylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnZGVjcmVtZW50JylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktYXJyb3ctc1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlSW5wdXRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUGlja2VyU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcbkRhdGVJbnB1dENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvbGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFyaWFSZWFkT25seTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0UGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJhbmdlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXV0b0NvcnJlY3Q6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluY29tcGxldGVEYXRlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNwaW5uZXJzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpc1BvcHVwT3BlbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGFzUG9wdXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVVcGRhdGU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICBkYXRlSW5wdXQ6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydkYXRlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgd3JhcDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3dyYXAnLF0gfV0sXG4gICAgd3JhcHBlckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZGF0ZWlucHV0JyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV1cbn07XG5cbi8qKlxuICogQSBwcmV2ZW50YWJsZSBldmVudCBpbnN0YW5jZSB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgdGhlIGBvcGVuYCBhbmQgYGNsb3NlYCBldmVudHMuXG4gKi9cbmNsYXNzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGEgc3BlY2lmaWVkIGV2ZW50LlxuICAgICAqIEluIHRoaXMgd2F5LCB0aGUgc291cmNlIGNvbXBvbmVudCBzdXBwcmVzc2VzIHRoZSBidWlsdC1pbiBiZWhhdmlvciB0aGF0IGZvbGxvd3MgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBldmVudCBpcyBwcmV2ZW50ZWQgYnkgYW55IG9mIGl0cyBzdWJzY3JpYmVycywgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlZmF1bHQgYWN0aW9uIHdhcyBwcmV2ZW50ZWQuIE90aGVyd2lzZSwgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqL1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmVudGVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFRPVUNIX0VOQUJMRUQgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2RhdGVpbnB1dHMtdG91Y2gtZW5hYmxlZCcpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZGlzYWJsZWREYXRlc1ZhbGlkYXRvciA9IChpc0RhdGVEaXNhYmxlZCkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xuICAgICAgICBpZiAoIWlzRGF0ZURpc2FibGVkIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IHtcbiAgICAgICAgICAgIGRpc2FibGVkRGF0ZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNEYXRlRGlzYWJsZWQoY29udHJvbC52YWx1ZSkgPyBlcnJvciA6IG51bGw7XG4gICAgfTtcbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuY29uc3QgTUlOX0RPQ19MSU5LJDIgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvRGF0ZVBpY2tlckNvbXBvbmVudC8jdG9jLW1pbic7XG5jb25zdCBNQVhfRE9DX0xJTkskMiA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9EYXRlUGlja2VyQ29tcG9uZW50LyN0b2MtbWF4JztcbmNvbnN0IFZBTFVFX0RPQ19MSU5LJDIgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9kYXRlcGlja2VyLyN0b2MtdXNpbmctd2l0aC1qc29uJztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIERhdGVQaWNrZXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVwaWNrZXIgJX0jdG9jLWJhc2ljLXVzYWdlKS5cbiAqL1xuY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioem9uZSwgbG9jYWxpemF0aW9uLCBjZHIsIHBvcHVwU2VydmljZSwgZWxlbWVudCwgcmVuZGVyZXIsIGluamVjdG9yLCBwaWNrZXJTZXJ2aWNlLCBkaXNhYmxlZERhdGVzU2VydmljZSwgdG91Y2hFbmFibGVkJCQxKSB7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UgPSBwaWNrZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlID0gZGlzYWJsZWREYXRlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMudG91Y2hFbmFibGVkID0gdG91Y2hFbmFibGVkJCQxO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2FibGVJZCA9IGBrLSR7Z3VpZCgpfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBhY3RpdmUgdmlldyB0aGF0IHRoZSBDYWxlbmRhciBpbml0aWFsbHkgcmVuZGVyc1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFjdGl2ZXZpZXdfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYWN0aXZlIHZpZXcgaXMgYG1vbnRoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBZb3UgaGF2ZSB0byBzZXQgYGFjdGl2ZVZpZXdgIHdpdGhpbiB0aGUgYHRvcFZpZXdgLWBib3R0b21WaWV3YCByYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bS5tb250aF07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBib3R0b21tb3N0IENhbGVuZGFyIHZpZXcgdG8gd2hpY2ggdGhlIHVzZXIgY2FuIG5hdmlnYXRlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXNfZGF0ZXBpY2tlciAlfSN0b2MtcGFydGlhbC1kYXRlcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3R0b21WaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLm1vbnRoXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHRvcG1vc3QgQ2FsZW5kYXIgdmlldyB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19kYXRlcGlja2VyICV9I3RvYy1wYXJ0aWFsLWRhdGVzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRvcFZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0uY2VudHVyeV07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIERhdGVQaWNrZXIgYW5kIGRldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRGF0ZVBpY2tlclxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X2RhdGVwaWNrZXIgJX0jdG9jLXJlYWQtb25seS1kYXRlcGlja2VyKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIERhdGVQaWNrZXIgaW5wdXQgZmllbGRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZWFkb25seV9kYXRlcGlja2VyICV9I3RvYy1yZWFkLW9ubHktaW5wdXQpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBOb3RlIHRoYXQgaWYgeW91IHNldCB0aGUgW2ByZWFkb25seWBdKHslIHNsdWcgYXBpX2RhdGVpbnB1dHNfZGF0ZXBpY2tlcmNvbXBvbmVudCAlfSN0b2MtcmVhZG9ubHkpIHByb3BlcnR5IHZhbHVlIHRvIGB0cnVlYCxcbiAgICAgICAgICogdGhlIGlucHV0IHdpbGwgYmUgcmVuZGVyZWQgaW4gYSByZWFkLW9ubHkgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgYHJlYWRPbmx5SW5wdXRgIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkT25seUlucHV0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBuYXZpZ2F0aW9uYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXJcbiAgICAgICAgICogYW5kIGRldGVybWluZXMgd2hldGhlciB0aGUgbmF2aWdhdGlvbiBzaWRlLWJhciBpcyBkaXNwbGF5ZWQuXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc2lkZWJhcl9kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBzbWFsbGVzdCB2YWxpZCBkYXRlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1pbiA9IGNsb25lRGF0ZShNSU5fREFURSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGJpZ2dlc3QgdmFsaWQgZGF0ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVyYW5nZXNfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXggPSBjbG9uZURhdGUoTUFYX0RBVEUpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiB2YWxpZGF0aW9uIGZvciBpbmNvbXBsZXRlIGRhdGVzIGlzIHRvIGJlIGVuZm9yY2VkIHdoZW4gYSBmb3JtIGlzIGJlaW5nIHZhbGlkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGZvY3VzZWQgZGF0ZSBvZiB0aGUgQ2FsZW5kYXIgY29tcG9uZW50XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXNfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBpbnB1dCB2YWx1ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZvcm1hdHNfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb3JtYXQgPSBcImRcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgaGludCB0aGUgRGF0ZVBpY2tlciBkaXNwbGF5cyB3aGVuIGl0cyB2YWx1ZSBpcyBgbnVsbGAuXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhcGxlc10oeyUgc2x1ZyBwbGFjZWhvbGRlcnNfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1kYXRlcGlja2VyIHBsYWNlaG9sZGVyPVwiRW50ZXIgYmlydGggZGF0ZS4uLlwiPjwva2VuZG8tZGF0ZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgdGFiaW5kZXhgIHByb3BlcnR5IG9mIHRoZSBEYXRlUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSB0aXRsZSBvZiB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgRGF0ZVBpY2tlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiBtaW4gb3IgbWF4IHZhbGlkYXRvcnMgYXJlIGVuZm9yY2VkIHdoZW4gdmFsaWRhdGluZyBhIGZvcm0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIHZhbGlkYXRvciBmb3IgZGlzYWJsZWRcbiAgICAgICAgICogZGF0ZSByYW5nZXMgaXMgZW5mb3JjZWQgd2hlbiB2YWxpZGF0aW5nIGEgZm9ybVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVzX2RhdGVwaWNrZXIgJX0jdG9jLXZhbGlkYXRpb24pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1ZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSB3ZWVrIG51bWJlciBjb2x1bW4gaW4gdGhlIGBtb250aGAgdmlldyBvZiB0aGUgQ2FsZW5kYXJcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB3ZWVrbnVtY29sdW1uX2RhdGVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud2Vla051bWJlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWVcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVwaWNrZXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBmb2N1c2VzIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRlcGlja2VyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkZvY3VzYCBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tZGF0ZXBpY2tlciAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiPjwva2VuZG8tZGF0ZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgICAgICAqICAgICAgY29uc29sZS5sb2coXCJDb21wb25lbnQgaXMgZm9jdXNlZFwiKTtcbiAgICAgICAgICogICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIGlucHV0IGVsZW1lbnQgZ2V0cyBibHVycmVkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRlcGlja2VyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkJsdXJgIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1kYXRlcGlja2VyIChibHVyKT1cImhhbmRsZUJsdXIoKVwiPjwva2VuZG8tZGF0ZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudCBpcyBibHVycmVkXCIpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIGNsb3NlZFxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIGNsb3NlLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIG9wZW5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVwaWNrZXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud3JhcHBlckNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvcHVwVUlEID0gZ3VpZCgpO1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0geyBhbmltYXRlOiB0cnVlIH07XG4gICAgICAgIHRoaXMuX3Nob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IG5vb3A7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMgPSB0aGlzLnBpY2tlclNlcnZpY2Uub25Gb2N1cy5zdWJzY3JpYmUodGhpcy5oYW5kbGVGb2N1cy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5waWNrZXJTdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBpY2tlclNlcnZpY2Uub25CbHVyLnN1YnNjcmliZSh0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5zYW1lRGF0ZVNlbGVjdGVkLnN1YnNjcmliZSh0aGlzLmhhbmRsZVNhbWVTZWxlY3Rpb24uYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5kYXRlQ29tcGxldGVuZXNzQ2hhbmdlLnN1YnNjcmliZSh0aGlzLmhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IG1vbnRoQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubW9udGhDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB5ZWFyQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMueWVhckNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGRlY2FkZUNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmRlY2FkZUNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbnR1cnlDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5jZW50dXJ5Q2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgd2Vla051bWJlclRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMud2Vla051bWJlclRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBwb3B1cCBvcHRpb25zIG9mIHRoZSBEYXRlUGlja2VyLlxuICAgICAqXG4gICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgKiAtIGBhbmltYXRlOiBCb29sZWFuYCZtZGFzaDtDb250cm9scyB0aGUgcG9wdXAgYW5pbWF0aW9uLiBCeSBkZWZhdWx0LCB0aGUgb3BlbiBhbmQgY2xvc2UgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZC5cbiAgICAgKiAtIGBhcHBlbmRUbzogJ3Jvb3QnIHwgJ2NvbXBvbmVudCcgfCBWaWV3Q29udGFpbmVyUmVmYCZtZGFzaDtDb250cm9scyB0aGUgcG9wdXAgY29udGFpbmVyLiBCeSBkZWZhdWx0LCB0aGUgcG9wdXAgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcm9vdCBjb21wb25lbnQuXG4gICAgICogLSBgcG9wdXBDbGFzczogU3RyaW5nYCZtZGFzaDtTcGVjaWZpZXMgYSBsaXN0IG9mIENTUyBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgdG8gc3R5bGUgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHNldCBwb3B1cFNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB7IGFuaW1hdGU6IHRydWUgfSwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBnZXQgcG9wdXBTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwU2V0dGluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIERhdGVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogPiBUaGUgYHZhbHVlYCBoYXMgdG8gYmUgYSB2YWxpZFxuICAgICAqIFtKYXZhU2NyaXB0IGBEYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZSkgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGF0ZXMgb2YgdGhlIERhdGVQaWNrZXIgdGhhdCB3aWxsIGJlIGRpc2FibGVkXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRlc19kYXRlcGlja2VyICV9KSkuXG4gICAgICovXG4gICAgc2V0IGRpc2FibGVkRGF0ZXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWREYXRlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmluaXRpYWxpemUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWREYXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaW5wdXRSb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkT25seUlucHV0ID8gJ2xpc3Rib3gnIDogJ3NwaW5idXR0b24nO1xuICAgIH1cbiAgICBnZXQgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxuICAgIHNldCBpc0FjdGl2ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3c7XG4gICAgfVxuICAgIHNldCBzaG93KHNob3cpIHtcbiAgICAgICAgaWYgKHNob3cgJiYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBza2lwWm9uZSA9ICFzaG93ICYmICghdGhpcy5fc2hvdyB8fCAhaGFzT2JzZXJ2ZXJzKHRoaXMuY2xvc2UpKTtcbiAgICAgICAgaWYgKCFza2lwWm9uZSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cChzaG93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cChzaG93KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBieSB0aGUgVGV4dEJveENvbnRhaW5lciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbXBvbmVudCBpcyBlbXB0eS5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUgJiYgdGhpcy5pbnB1dC5pc0VtcHR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlTZXR0aW5ncygpO1xuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24gfHwgY2hhbmdlcy5kaXNhYmxlZERhdGVzVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmRpc2FibGVkRGF0ZXMgfHwgY2hhbmdlcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWluVmFsaWRhdG9yKHRoaXMubWluKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1heFZhbGlkYXRvcih0aGlzLm1heCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbiA9IHRoaXMuZGlzYWJsZWREYXRlc1ZhbGlkYXRpb24gPyBkaXNhYmxlZERhdGVzVmFsaWRhdG9yKHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaXNEYXRlRGlzYWJsZWQpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID8gaW5jb21wbGV0ZURhdGVWYWxpZGF0b3IoKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb21FdmVudHMuZm9yRWFjaCh1bmJpbmRDYWxsYmFjayA9PiB1bmJpbmRDYWxsYmFjaygpKTtcbiAgICAgICAgdGhpcy5waWNrZXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3BlbiBzdGF0ZSBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHZhbGlkYXRlKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLm1heFZhbGlkYXRlRm4oY29udHJvbCkgfHwgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IoY29udHJvbCwgdGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmlzRGF0ZUluY29tcGxldGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIERhdGVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwiZGF0ZXBpY2tlci5mb2N1cygpXCI+Rm9jdXMgZGF0ZSBwaWNrZXI8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLWRhdGVwaWNrZXIgI2RhdGVwaWNrZXI+PC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIERhdGVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgICh0aGlzLmNhbGVuZGFyIHx8IHRoaXMuaW5wdXQpWydibHVyJ10oKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBvcHVwLiBJZiB5b3UgdXNlIHRoZSBgdG9nZ2xlYCBtZXRob2QgdG8gc2hvdyBvciBoaWRlIHRoZSBwb3B1cCxcbiAgICAgKiB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyBkbyBub3QgZmlyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaG93IC0gVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUoc2hvdykge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGUoKHNob3cgPT09IHVuZGVmaW5lZCkgPyAhdGhpcy5zaG93IDogc2hvdyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlSWNvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgICAgLy9YWFg6IGV4cGxpY2l0bHkgY2FsbCB0aGUgaGFuZGxlRm9jdXMgaGFuZGxlciBoZXJlXG4gICAgICAgIC8vZHVlIHRvIGFzeW5jIElFIGZvY3VzIGV2ZW50XG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgdGhpcy5zaG93ID0gIXRoaXMuc2hvdztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVNb3VzZWRvd24oYXJncykge1xuICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZShjbG9uZURhdGUodmFsdWUpKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5pbnB1dC5mb3JtYXRTZWN0aW9ucy50aW1lID8gdmFsdWUgOiB0aGlzLm1lcmdlVGltZSh2YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHBvcHVwQ2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdrLWNhbGVuZGFyLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAnay1ncm91cCcsXG4gICAgICAgICAgICAnay1yZXNldCdcbiAgICAgICAgXS5jb25jYXQodGhpcy5wb3B1cFNldHRpbmdzLnBvcHVwQ2xhc3MgfHwgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFwcGVuZFRvKCkge1xuICAgICAgICBjb25zdCB7IGFwcGVuZFRvIH0gPSB0aGlzLnBvcHVwU2V0dGluZ3M7XG4gICAgICAgIGlmICghYXBwZW5kVG8gfHwgYXBwZW5kVG8gPT09ICdyb290Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwZW5kVG8gPT09ICdjb21wb25lbnQnID8gdGhpcy5jb250YWluZXIgOiBhcHBlbmRUbztcbiAgICB9XG4gICAgZ2V0IGlucHV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJTZXJ2aWNlLmlucHV0O1xuICAgIH1cbiAgICBnZXQgY2FsZW5kYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlclNlcnZpY2UuY2FsZW5kYXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtZXJnZVRpbWUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgJiYgdmFsdWUgPyBzZXRUaW1lKHZhbHVlLCB0aGlzLnZhbHVlKSA6IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlS2V5ZG93bihlKSB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBrZXlDb2RlIH0gPSBlO1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHRLZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93RG93biAmJiAhdGhpcy5zaG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93VXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5UYWIgJiYgdGhpcy5zaG93ICYmIHRoaXMuY2FsZW5kYXIuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvZ2dsZVBvcHVwKHNob3cpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBpZiAoIXRoaXMuX3Nob3cgJiYgc2hvdykge1xuICAgICAgICAgICAgdGhpcy5vcGVuLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3Nob3cgJiYgIXNob3cpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9nZ2xlKHNob3cpO1xuICAgICAgICB0aGlzLnRvZ2dsZUZvY3VzKCk7XG4gICAgfVxuICAgIF90b2dnbGUoc2hvdykge1xuICAgICAgICBpZiAoc2hvdyA9PT0gdGhpcy5fc2hvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3cgPSBzaG93O1xuICAgICAgICBpZiAoc2hvdykge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLnBvcHVwU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRoaXMud3JhcHBlcixcbiAgICAgICAgICAgICAgICBhbmNob3JBbGlnbjogeyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9LFxuICAgICAgICAgICAgICAgIGFuaW1hdGU6IHRoaXMucG9wdXBTZXR0aW5ncy5hbmltYXRlLFxuICAgICAgICAgICAgICAgIGFwcGVuZFRvOiB0aGlzLmFwcGVuZFRvLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMucG9wdXBUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBwb3B1cEFsaWduOiB7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgcG9wdXBDbGFzczogdGhpcy5wb3B1cENsYXNzZXMsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25Nb2RlOiAnYWJzb2x1dGUnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLnBvcHVwVUlEKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5wb3B1cFJlZi5wb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvdyA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb2N1c0lucHV0KCkge1xuICAgICAgICBpZiAodGhpcy50b3VjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRvZ2dsZUZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy50b3VjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5pbnB1dC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5U2V0dGluZ3MoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXggdmFsdWUgc2hvdWxkIGJlIGJpZ2dlciB0aGFuIHRoZSBtaW4uIFNlZSAke01JTl9ET0NfTElOSyQyfSBhbmQgJHtNQVhfRE9DX0xJTkskMn0uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICd2YWx1ZScgc2hvdWxkIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBEYXRlIGluc3RhbmNlLiBDaGVjayAke1ZBTFVFX0RPQ19MSU5LJDJ9IGZvciBwb3NzaWJsZSByZXNvbHV0aW9uLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJpbmRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5kb21FdmVudHMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpKSk7XG4gICAgICAgIGlmIChpc1dpbmRvd0F2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvd0JsdXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAnYmx1cicpLnN1YnNjcmliZSh0aGlzLmhhbmRsZVdpbmRvd0JsdXIuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkZvY3VzKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVdpbmRvd0JsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQmx1cihhcmdzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBhcmdzICYmIGN1cnJlbnRGb2N1c1RhcmdldChhcmdzKTtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgJiYgKHRoaXMuaW5wdXQuY29udGFpbnNFbGVtZW50KGN1cnJlbnRUYXJnZXQpIHx8XG4gICAgICAgICAgICAodGhpcy5jYWxlbmRhciAmJiB0aGlzLmNhbGVuZGFyLmNvbnRhaW5zRWxlbWVudChjdXJyZW50VGFyZ2V0KSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uQmx1cikgfHwgKHRoaXMuc2hvdyAmJiBoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpIHx8IHJlcXVpcmVzWm9uZU9uQmx1cih0aGlzLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJsdXJDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibHVyQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmx1ckNvbXBvbmVudCgpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOyAvLyBvcmRlciBpcyBpbXBvcnRhbnQgwq9cXF8o44OEKV8vwq9cbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICB9XG4gICAgaGFuZGxlU2FtZVNlbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVEYXRlQ29tcGxldGVuZXNzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCkpO1xuICAgIH1cbn1cbkRhdGVQaWNrZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLWRhdGVwaWNrZXInLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLZW5kb0lucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBQaWNrZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZERhdGVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmRhdGVwaWNrZXInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGF0ZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb0RhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc1xuICAgICAgICAgICAgaTE4bi10b2RheT1cImtlbmRvLmRhdGVwaWNrZXIudG9kYXl8VGhlIGxhYmVsIGZvciB0aGUgdG9kYXkgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXJcIlxuICAgICAgICAgICAgdG9kYXk9XCJUT0RBWVwiXG5cbiAgICAgICAgICAgIGkxOG4tdG9nZ2xlPVwia2VuZG8uZGF0ZXBpY2tlci50b2dnbGV8VGhlIGxhYmVsIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBpbiB0aGUgZGF0ZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgdG9nZ2xlPVwiVG9nZ2xlIGNhbGVuZGFyXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHNwYW4gI3dyYXBwZXJcbiAgICAgICAgICAgIGNsYXNzPVwiay1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1kYXRlaW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgICBbcm9sZV09XCJpbnB1dFJvbGVcIlxuICAgICAgICAgICAgICAgIFtmb2N1c2FibGVJZF09XCJmb2N1c2FibGVJZFwiXG4gICAgICAgICAgICAgICAgW2hhc1BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpc1BvcHVwT3Blbl09XCJzaG93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCByZWFkT25seUlucHV0XCJcbiAgICAgICAgICAgICAgICBbYXJpYVJlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFtpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb25dPVwiaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVJY29uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogaGFuZGxlTW91c2Vkb3duXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1jYWxlbmRhclwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wdXBUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1jYWxlbmRhclxuICAgICAgICAgICAgICAgICNjYWxlbmRhclxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgW25hdmlnYXRpb25dPVwibmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICAgW2JvdHRvbVZpZXddPVwiYm90dG9tVmlld1wiXG4gICAgICAgICAgICAgICAgW3RvcFZpZXddPVwidG9wVmlld1wiXG4gICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFttb250aENlbGxUZW1wbGF0ZV09XCJtb250aENlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3llYXJDZWxsVGVtcGxhdGVdPVwieWVhckNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2RlY2FkZUNlbGxUZW1wbGF0ZV09XCJkZWNhZGVDZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtjZW50dXJ5Q2VsbFRlbXBsYXRlXT1cImNlbnR1cnlDZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyVGVtcGxhdGVdPVwid2Vla051bWJlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaGVhZGVyVGl0bGVUZW1wbGF0ZV09XCJoZWFkZXJUaXRsZVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZV09XCJuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbZm9jdXNlZERhdGVdPVwiZm9jdXNlZERhdGVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUNoYW5nZShtZXJnZVRpbWUoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogaGFuZGxlS2V5ZG93blxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8a2VuZG8tY2FsZW5kYXItbWVzc2FnZXMgW3RvZGF5XT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZGF5JylcIj5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLWNhbGVuZGFyLW1lc3NhZ2VzPlxuICAgICAgICAgICAgPC9rZW5kby1jYWxlbmRhcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVBpY2tlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogUGlja2VyU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGlzYWJsZWREYXRlc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbVE9VQ0hfRU5BQkxFRCxdIH1dIH1cbl07XG5EYXRlUGlja2VyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9LF0gfV0sXG4gICAgcG9wdXBUZW1wbGF0ZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3BvcHVwVGVtcGxhdGUnLF0gfV0sXG4gICAgd3JhcHBlcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3dyYXBwZXInLF0gfV0sXG4gICAgY2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBjZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2NlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbW9udGhDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIHllYXJDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3llYXJDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgZGVjYWRlQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2RlY2FkZUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgY2VudHVyeUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VudHVyeUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1dlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3dlZWtOdW1iZXJUZW1wbGF0ZScsXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnaGVhZGVyVGl0bGVUZW1wbGF0ZScsXSB9XSxcbiAgICBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZScsXSB9XSxcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYm90dG9tVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZWFkT25seUlucHV0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3B1cFNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBuYXZpZ2F0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0UGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkRGF0ZXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkRGF0ZXNWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIG9wZW46IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHdyYXBwZXJDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZGF0ZXBpY2tlcicsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgVElNRV9QQVJUID0ge1xuICAgIGRheXBlcmlvZDogJ2RheXBlcmlvZCcsXG4gICAgaG91cjogJ2hvdXInLFxuICAgIG1pbGxpc2Vjb25kOiAnbWlsbGlzZWNvbmQnLFxuICAgIG1pbnV0ZTogJ21pbnV0ZScsXG4gICAgc2Vjb25kOiAnc2Vjb25kJ1xufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRpbWVSYW5nZVZhbGlkYXRvciA9IChtaW4sIG1heCkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xuICAgICAgICBpZiAoIW1pbiB8fCAhbWF4IHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnIgPSB7XG4gICAgICAgICAgICB0aW1lUmFuZ2VFcnJvcjoge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBtYXgsXG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IG1pbixcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNJblRpbWVSYW5nZShjb250cm9sLnZhbHVlLCBtaW4sIG1heCkgPyBudWxsIDogZXJyO1xuICAgIH07XG59O1xuXG5jb25zdCBWQUxVRV9ET0NfTElOSyQzID0gJ2h0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL3RpbWVwaWNrZXIvI3RvYy1pbnRlZ3JhdGlvbi13aXRoLWpzb24nO1xuY29uc3QgSU5UTF9EQVRFX0ZPUk1BVCA9ICdodHRwczovL2dpdGh1Yi5jb20vdGVsZXJpay9rZW5kby1pbnRsL2Jsb2IvbWFzdGVyL2RvY3MvZGF0ZS1mb3JtYXR0aW5nL2luZGV4Lm1kJztcbmNvbnN0IGZvcm1hdFJlZ0V4cCA9IG5ldyBSZWdFeHAoYCR7VElNRV9QQVJULmhvdXJ9fCR7VElNRV9QQVJULm1pbnV0ZX18JHtUSU1FX1BBUlQuc2Vjb25kfXwke1RJTUVfUEFSVC5kYXlwZXJpb2R9fGxpdGVyYWxgKTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFRpbWVQaWNrZXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X3RpbWVwaWNrZXIgJX0jdG9jLWJhc2ljLXVzYWdlKS5cbiAqL1xuY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioem9uZSwgbG9jYWxpemF0aW9uLCBjZHIsIHBvcHVwU2VydmljZSwgZWxlbWVudCwgcmVuZGVyZXIsIGluamVjdG9yLCBwaWNrZXJTZXJ2aWNlLCBpbnRsLCB0b3VjaEVuYWJsZWQkJDEpIHtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMucGlja2VyU2VydmljZSA9IHBpY2tlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMudG91Y2hFbmFibGVkID0gdG91Y2hFbmFibGVkJCQxO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2FibGVJZCA9IGBrLSR7Z3VpZCgpfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIFRpbWVQaWNrZXIgYW5kXG4gICAgICAgICAqIGRldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX3RpbWVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgVGltZVBpY2tlclxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X3RpbWVwaWNrZXIgJX0jdG9jLXJlYWQtb25seS10aW1lcGlja2VyKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIFRpbWVQaWNrZXIgaW5wdXQgZmllbGRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZWFkb25seV90aW1lcGlja2VyICV9I3RvYy1yZWFkLW9ubHktaW5wdXQpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBOb3RlIHRoYXQgaWYgeW91IHNldCB0aGUgW2ByZWFkb25seWBdKHslIHNsdWcgYXBpX2RhdGVpbnB1dHNfdGltZXBpY2tlcmNvbXBvbmVudCAlfSN0b2MtcmVhZG9ubHkpIHByb3BlcnR5IHZhbHVlIHRvIGB0cnVlYCxcbiAgICAgICAgICogdGhlIGlucHV0IHdpbGwgYmUgcmVuZGVyZWQgaW4gYSByZWFkLW9ubHkgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgYHJlYWRPbmx5SW5wdXRgIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkT25seUlucHV0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHRpbWUgZm9ybWF0IHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBpbnB1dCB2YWx1ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZvcm1hdHNfdGltZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb3JtYXQgPSAndCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGhpbnQgdGhlIFRpbWVQaWNrZXIgZGlzcGxheXMgd2hlbiBpdHMgdmFsdWUgaXMgYG51bGxgLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIGFydGljbGUgb25cbiAgICAgICAgICogW3BsYWNlaG9sZGVyc10oeyUgc2x1ZyBwbGFjZWhvbGRlcnNfdGltZXBpY2tlciAlfSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLXRpbWVwaWNrZXIgcGxhY2Vob2xkZXI9XCJFbnRlciBzdGFydC4uLlwiPjwva2VuZG8tdGltZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiB2YWxpZGF0aW9uIGZvciBpbmNvbXBsZXRlIGRhdGVzIGlzIHRvIGJlIGVuZm9yY2VkIHdoZW4gYSBmb3JtIGlzIGJlaW5nIHZhbGlkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgKipDYW5jZWwqKiBidXR0b24gaW4gdGhlIHBvcHVwLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlICoqTm93KiogYnV0dG9uIGluIHRoZSBwb3B1cC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBJZiB0aGUgY3VycmVudCB0aW1lIGlzIG91dCBvZiByYW5nZSBvciB0aGUgaW5jcmVtZW50YWwgc3RlcCBpcyBncmVhdGVyIHRoYW4gYDFgLCB0aGUgKipOb3cqKiBidXR0b24gd2lsbCBiZSBoaWRkZW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB0YWJpbmRleGAgcHJvcGVydHkgb2YgdGhlIFRpbWVQaWNrZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBUaW1lUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIG1pbiBvciBtYXggdmFsaWRhdG9ycyBhcmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYW5nZVZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWUuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgc2VjdGlvbiBvblxuICAgICAgICAgKiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X3RpbWVwaWNrZXIgJX0jdG9jLWV2ZW50cykuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGZvY3VzZXMgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgc2VjdGlvbiBvblxuICAgICAgICAgKiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X3RpbWVwaWNrZXIgJX0jdG9jLWV2ZW50cykuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gVG8gd2lyZSB0aGUgZXZlbnQgcHJvZ3JhbW1hdGljYWxseSwgdXNlIHRoZSBgb25Gb2N1c2AgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLXRpbWVwaWNrZXIgKGZvY3VzKT1cImhhbmRsZUZvY3VzKClcIj48L2tlbmRvLXRpbWVwaWNrZXI+XG4gICAgICAgICAqIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGZvY3VzZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBpbnB1dCBlbGVtZW50IGdldHMgYmx1cnJlZC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkJsdXJgIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby10aW1lcGlja2VyIChibHVyKT1cImhhbmRsZUJsdXIoKVwiPjwva2VuZG8tdGltZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudCBpcyBibHVycmVkXCIpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIGNsb3NlZC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gY2xvc2UuXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gb3Blbi5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndyYXBwZXJDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb3B1cFVJRCA9IGd1aWQoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIHRoaXMudGltZVJhbmdlVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IG5vb3A7XG4gICAgICAgIHRoaXMuX21pbiA9IGNsb25lRGF0ZShNSU5fVElNRSk7XG4gICAgICAgIHRoaXMuX21heCA9IGNsb25lRGF0ZShNQVhfVElNRSk7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSB7IGFuaW1hdGU6IHRydWUgfTtcbiAgICAgICAgdGhpcy5fc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHt9O1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMgPSB0aGlzLnBpY2tlclNlcnZpY2Uub25Gb2N1cy5zdWJzY3JpYmUodGhpcy5oYW5kbGVGb2N1cy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5waWNrZXJTdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBpY2tlclNlcnZpY2Uub25CbHVyLnN1YnNjcmliZSh0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5kYXRlQ29tcGxldGVuZXNzQ2hhbmdlLnN1YnNjcmliZSh0aGlzLmhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IHZhbGlkIHRpbWUgdmFsdWVcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHRpbWVyYW5nZXNfdGltZXBpY2tlciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBtaW4obWluKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IGNsb25lRGF0ZShtaW4gfHwgTUlOX1RJTUUpO1xuICAgIH1cbiAgICBnZXQgbWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGJpZ2dlc3QgdmFsaWQgdGltZSB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgdGltZXJhbmdlc190aW1lcGlja2VyICV9KSkuXG4gICAgICovXG4gICAgc2V0IG1heChtYXgpIHtcbiAgICAgICAgdGhpcy5fbWF4ID0gY2xvbmVEYXRlKG1heCB8fCBNQVhfVElNRSk7XG4gICAgfVxuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIGluY3JlbWVudGFsIHN0ZXBzIG9mIHRoZSBUaW1lUGlja2VyLlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICAgICAqIFtpbmNyZW1lbnRhbCBzdGVwc10oeyUgc2x1ZyBpbmNyZW1lbnRhbHN0ZXBzX3RpbWVwaWNrZXIgJX0pLlxuICAgICAqXG4gICAgICogPiBJZiB0aGUgaW5jcmVtZW50YWwgc3RlcCBpcyBncmVhdGVyIHRoYW4gYDFgLCB0aGUgKipOb3cqKiBidXR0b24gd2lsbCBiZSBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8a2VuZG8tdGltZXBpY2tlciBmb3JtYXQ9XCJISDptbTpzc1wiIFtzdGVwc109XCJzdGVwc1wiPjwva2VuZG8tdGltZXBpY2tlcj5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgIHB1YmxpYyBzdGVwcyA9IHsgaG91cjogMiwgbWludXRlOiAxNSwgc2Vjb25kOiAxNSB9O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIHNldCBzdGVwcyhzdGVwcykge1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHN0ZXBzIHx8IHt9O1xuICAgIH1cbiAgICBnZXQgc3RlcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgcG9wdXAgb2YgdGhlIFRpbWVQaWNrZXIuXG4gICAgICpcbiAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICAgICAqIC0gYGFuaW1hdGU6IEJvb2xlYW5gJm1kYXNoO0NvbnRyb2xzIHRoZSBwb3B1cCBhbmltYXRpb24uIEJ5IGRlZmF1bHQsIHRoZSBvcGVuIGFuZCBjbG9zZSBhbmltYXRpb25zIGFyZSBlbmFibGVkLlxuICAgICAqIC0gYGFwcGVuZFRvOiAncm9vdCcgfCAnY29tcG9uZW50JyB8IFZpZXdDb250YWluZXJSZWZgJm1kYXNoO0NvbnRyb2xzIHRoZSBwb3B1cCBjb250YWluZXIuIEJ5IGRlZmF1bHQsIHRoZSBwb3B1cCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSByb290IGNvbXBvbmVudC5cbiAgICAgKiAtIGBwb3B1cENsYXNzOiBTdHJpbmdgJm1kYXNoO1NwZWNpZmllcyBhIGxpc3Qgb2YgQ1NTIGNsYXNzZXMgdGhhdCBhcmUgdXNlZCB0byBzdHlsZSB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgc2V0IHBvcHVwU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHsgYW5pbWF0ZTogdHJ1ZSB9LCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIGdldCBwb3B1cFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBTZXR0aW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB0YWJJbmRleCh0YWJJbmRleCkge1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiaW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIFRpbWVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpbnB1dFJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5SW5wdXQgPyAnbGlzdGJveCcgOiAnc3BpbmJ1dHRvbic7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gICAgc2V0IGlzQWN0aXZlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdztcbiAgICB9XG4gICAgc2V0IHNob3coc2hvdykge1xuICAgICAgICBpZiAoc2hvdyAmJiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNraXBab25lID0gIXNob3cgJiYgKCF0aGlzLl9zaG93IHx8ICFoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpO1xuICAgICAgICBpZiAoIXNraXBab25lKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKHNob3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKHNob3cpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS5pbnB1dDtcbiAgICB9XG4gICAgZ2V0IHRpbWVTZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS50aW1lU2VsZWN0b3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5XG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnZhbHVlICYmIHRoaXMuaW5wdXQuaXNFbXB0eSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb25cbiAgICAgICAgICAgIC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24gfHwgY2hhbmdlcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGltZVJhbmdlVmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gdGltZVJhbmdlVmFsaWRhdG9yKHRoaXMubWluLCB0aGlzLm1heCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPyBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRvcigpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5Rm9ybWF0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb21FdmVudHMuZm9yRWFjaCh1bmJpbmRDYWxsYmFjayA9PiB1bmJpbmRDYWxsYmFjaygpKTtcbiAgICAgICAgdGhpcy5waWNrZXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBrZXlDb2RlIH0gPSBldmVudDtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0S2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5BcnJvd0Rvd24gJiYgIXRoaXMuc2hvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHZhbGlkYXRlKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZVJhbmdlVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IoY29udHJvbCwgdGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmlzRGF0ZUluY29tcGxldGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIFRpbWVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwidGltZXBpY2tlci5mb2N1cygpXCI+Rm9jdXMgdGltZSBwaWNrZXI8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLXRpbWVwaWNrZXIgI3RpbWVwaWNrZXI+PC9rZW5kby10aW1lcGlja2VyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFRpbWVQaWNrZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgICh0aGlzLnRpbWVTZWxlY3RvciB8fCB0aGlzLmlucHV0KVsnYmx1ciddKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwb3B1cC4gSWYgeW91IHVzZSB0aGUgYHRvZ2dsZWAgbWV0aG9kIHRvIHNob3cgb3IgaGlkZSB0aGUgcG9wdXAsXG4gICAgICogdGhlIGBvcGVuYCBhbmQgYGNsb3NlYCBldmVudHMgZG8gbm90IGZpcmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hvdyAtIFRoZSBzdGF0ZSBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgdG9nZ2xlKHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlKChzaG93ID09PSB1bmRlZmluZWQpID8gIXRoaXMuc2hvdyA6IHNob3cpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBvcGVuIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFwcGVuZFRvKCkge1xuICAgICAgICBjb25zdCB7IGFwcGVuZFRvIH0gPSB0aGlzLnBvcHVwU2V0dGluZ3M7XG4gICAgICAgIGlmICghYXBwZW5kVG8gfHwgYXBwZW5kVG8gPT09ICdyb290Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwZW5kVG8gPT09ICdjb21wb25lbnQnID8gdGhpcy5jb250YWluZXIgOiBhcHBlbmRUbztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVJlamVjdCgpIHtcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmlucHV0LmZvcm1hdFNlY3Rpb25zLmRhdGUgPyB2YWx1ZSA6IHRoaXMubWVyZ2VUaW1lKHZhbHVlKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU1vdXNlZG93bihhcmdzKSB7XG4gICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUljb25DbGljayhldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgIC8vWFhYOiBleHBsaWNpdCBjYWxsIGhhbmRsZUZvY3VzIGhhbmRsZXIgaGVyZVxuICAgICAgICAvL2R1ZSB0byBhc3luYyBJRSBmb2N1cyBldmVudFxuICAgICAgICB0aGlzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2hvdyA9ICF0aGlzLnNob3c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcG9wdXBDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2stZ3JvdXAnLFxuICAgICAgICAgICAgJ2stcmVzZXQnXG4gICAgICAgIF0uY29uY2F0KHRoaXMucG9wdXBTZXR0aW5ncy5wb3B1cENsYXNzIHx8IFtdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5vcm1hbGl6ZVRpbWUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gc2V0VGltZShNSUROSUdIVF9EQVRFLCBkYXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG1lcmdlVGltZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiB2YWx1ZSA/IHNldFRpbWUodGhpcy52YWx1ZSwgdmFsdWUpIDogdmFsdWU7XG4gICAgfVxuICAgIHRvZ2dsZVBvcHVwKHNob3cpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBpZiAoIXRoaXMuX3Nob3cgJiYgc2hvdykge1xuICAgICAgICAgICAgdGhpcy5vcGVuLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3Nob3cgJiYgIXNob3cpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9nZ2xlKHNob3cpO1xuICAgICAgICB0aGlzLnRvZ2dsZUZvY3VzKCk7XG4gICAgfVxuICAgIF90b2dnbGUoc2hvdykge1xuICAgICAgICBpZiAoc2hvdyA9PT0gdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93ID0gc2hvdztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmIChzaG93KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgICAgIGFuY2hvcjogdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAgIGFuY2hvckFsaWduOiB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgYW5pbWF0ZTogdGhpcy5wb3B1cFNldHRpbmdzLmFuaW1hdGUsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG86IHRoaXMuYXBwZW5kVG8sXG4gICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5wb3B1cFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHBvcHVwQWxpZ246IHsgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBwb3B1cENsYXNzOiB0aGlzLnBvcHVwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk1vZGU6ICdhYnNvbHV0ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMucG9wdXBVSUQpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvdyA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvY3VzSW5wdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy50aW1lU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZVNlbGVjdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMudG91Y2hFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuaW5wdXQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndmFsdWUnIHNob3VsZCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZSBpbnN0YW5jZS4gQ2hlY2sgJHtWQUxVRV9ET0NfTElOSyQzfSBmb3IgcG9zc2libGUgcmVzb2x1dGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2ZXJpZnlGb3JtYXQoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtYXRDb250YWluc0RhdGVQYXJ0cyA9IHRoaXMuaW50bC5zcGxpdERhdGVGb3JtYXQodGhpcy5mb3JtYXQpLnNvbWUocGFydCA9PiAhZm9ybWF0UmVnRXhwLnRlc3QocGFydC50eXBlKSk7XG4gICAgICAgIGlmIChmb3JtYXRDb250YWluc0RhdGVQYXJ0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlZCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gU3VwcG9ydGVkIHNwZWNpZmllcnMgYXJlIFR8dHxIfGh8bXxzfGEuIFNlZSAke0lOVExfREFURV9GT1JNQVR9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpKTtcbiAgICAgICAgaWYgKGlzV2luZG93QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdibHVyJykuc3Vic2NyaWJlKHRoaXMuaGFuZGxlV2luZG93Qmx1ci5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVXaW5kb3dCbHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25Gb2N1cykpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVCbHVyKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGFyZ3MgJiYgY3VycmVudEZvY3VzVGFyZ2V0KGFyZ3MpO1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldCAmJiAodGhpcy5pbnB1dC5jb250YWluc0VsZW1lbnQoY3VycmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgICh0aGlzLnRpbWVTZWxlY3RvciAmJiB0aGlzLnRpbWVTZWxlY3Rvci5jb250YWluc0VsZW1lbnQoY3VycmVudFRhcmdldCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkJsdXIpIHx8ICh0aGlzLnNob3cgJiYgaGFzT2JzZXJ2ZXJzKHRoaXMuY2xvc2UpKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5jb250cm9sKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ibHVyQ29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYmx1ckNvbXBvbmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJsdXJDb21wb25lbnQoKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTsgLy8gb3JkZXIgaXMgaW1wb3J0YW50IMKvXFxfKOODhClfL8KvXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgIH1cbiAgICBoYW5kbGVEYXRlQ29tcGxldGVuZXNzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCkpO1xuICAgIH1cbn1cblRpbWVQaWNrZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLXRpbWVwaWNrZXInLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLZW5kb0lucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyQ29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8udGltZXBpY2tlcidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgUGlja2VyU2VydmljZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby10aW1lcGlja2VyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLWFjY2VwdD1cImtlbmRvLnRpbWVwaWNrZXIuYWNjZXB0fFRoZSBBY2NlcHQgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGFjY2VwdD1cIlNldFwiXG5cbiAgICAgICAgICAgIGkxOG4tYWNjZXB0TGFiZWw9XCJrZW5kby50aW1lcGlja2VyLmFjY2VwdExhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIEFjY2VwdCBidXR0b24gaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGFjY2VwdExhYmVsPVwiU2V0IHRpbWVcIlxuXG4gICAgICAgICAgICBpMThuLWNhbmNlbD1cImtlbmRvLnRpbWVwaWNrZXIuY2FuY2VsfFRoZSBDYW5jZWwgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGNhbmNlbD1cIkNhbmNlbFwiXG5cbiAgICAgICAgICAgIGkxOG4tY2FuY2VsTGFiZWw9XCJrZW5kby50aW1lcGlja2VyLmNhbmNlbExhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIENhbmNlbCBidXR0b24gaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsPVwiQ2FuY2VsIGNoYW5nZXNcIlxuXG4gICAgICAgICAgICBpMThuLW5vdz1cImtlbmRvLnRpbWVwaWNrZXIubm93fFRoZSBOb3cgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG5vdz1cIk5vd1wiXG5cbiAgICAgICAgICAgIGkxOG4tbm93TGFiZWw9XCJrZW5kby50aW1lcGlja2VyLm5vd0xhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIE5vdyBidXR0b24gaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG5vd0xhYmVsPVwiU2VsZWN0IG5vd1wiXG5cbiAgICAgICAgICAgIGkxOG4tdG9nZ2xlPVwia2VuZG8udGltZXBpY2tlci50b2dnbGV8VGhlIGxhYmVsIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgdG9nZ2xlPVwiVG9nZ2xlIHRpbWUgbGlzdFwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuICN3cmFwcGVyXG4gICAgICAgICAgICBjbGFzcz1cImstcGlja2VyLXdyYXBcIlxuICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8a2VuZG8tZGF0ZWlucHV0XG4gICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZUlkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgICAgICBbaGFzUG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lzUG9wdXBPcGVuXT1cInNob3dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IHJlYWRPbmx5SW5wdXRcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cImlucHV0Um9sZVwiXG4gICAgICAgICAgICAgICAgW2FyaWFSZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm5vcm1hbGl6ZVRpbWUobWluKVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJub3JtYWxpemVUaW1lKG1heClcIlxuICAgICAgICAgICAgICAgIFtpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb25dPVwiaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uXCJcbiAgICAgICAgICAgICAgICBbc3RlcHNdPVwic3RlcHNcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIhc2hvdyA/IHRhYmluZGV4IDogLTFcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstc2VsZWN0XCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCd0b2dnbGUnKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCd0b2dnbGUnKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlSWNvbkNsaWNrLFxuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGhhbmRsZU1vdXNlZG93blxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktY2xvY2tcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BvcHVwVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGtlbmRvLXRpbWVzZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAjdGltZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIFtjYW5jZWxCdXR0b25dPVwiY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW25vd0J1dHRvbl09XCJub3dCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICBbc3RlcHNdPVwic3RlcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlkb3duLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBoYW5kbGVNb3VzZWRvd25cbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlUmVqZWN0KT1cImhhbmRsZVJlamVjdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10aW1lc2VsZWN0b3ItbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRMYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHRMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwibG9jYWxpemF0aW9uLmdldCgnYWNjZXB0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbmNlbExhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbExhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbmNlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdjYW5jZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbm93TGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnbm93TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbm93XT1cImxvY2FsaXphdGlvbi5nZXQoJ25vdycpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLXRpbWVzZWxlY3Rvci1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLXRpbWVzZWxlY3Rvcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGltZVBpY2tlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogUGlja2VyU2VydmljZSB9LFxuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbVE9VQ0hfRU5BQkxFRCxdIH1dIH1cbl07XG5UaW1lUGlja2VyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9LF0gfV0sXG4gICAgcG9wdXBUZW1wbGF0ZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3BvcHVwVGVtcGxhdGUnLF0gfV0sXG4gICAgd3JhcHBlcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3dyYXBwZXInLF0gfV0sXG4gICAgZm9jdXNhYmxlSWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZWFkb25seTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZE9ubHlJbnB1dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXRQbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbmNlbEJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm93QnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBTZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICBvcGVuOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB3cmFwcGVyQ2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRpbWVwaWNrZXInLF0gfV0sXG4gICAgZGlzYWJsZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XVxufTtcblxuY29uc3QgdGltZUZvcm1hdFJlZ0V4cCA9IG5ldyBSZWdFeHAoYCR7VElNRV9QQVJULmhvdXJ9fCR7VElNRV9QQVJULm1pbnV0ZX18JHtUSU1FX1BBUlQuc2Vjb25kfXwke1RJTUVfUEFSVC5kYXlwZXJpb2R9fGxpdGVyYWxgKTtcbmNvbnN0IFZBTFVFX0RPQ19MSU5LJDQgPSAnaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvZGF0ZXRpbWVwaWNrZXIvaW50ZWdyYXRpb24td2l0aC1qc29uLyc7XG5jb25zdCBNSU5fTUFYX0RPQ19MSU5LID0gJ2h0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2RhdGV0aW1lcGlja2VyL2RhdGUtdGltZS1saW1pdHMvJztcbmNvbnN0IERFRkFVTFRfQUNUSVZFX1RBQiA9ICdkYXRlJztcbmNvbnN0IERFRkFVTFRfREFURUlOUFVUX0ZPUk1BVCA9ICdnJztcbmNvbnN0IERFRkFVTFRfVElNRVNFTEVDVE9SX0ZPUk1BVCA9ICd0Jztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIERhdGVUaW1lUGlja2VyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19kYXRldGltZXBpY2tlciAlfSkuXG4gKi9cbmNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwb3B1cFNlcnZpY2UsIGludGwsIGNkciwgcGlja2VyU2VydmljZSwgbmdab25lLCBob3N0LCB0b3VjaEVuYWJsZWQkJDEsIGxvY2FsaXphdGlvbiwgZGlzYWJsZWREYXRlc1NlcnZpY2UsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlID0gcGlja2VyU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgICAgIHRoaXMudG91Y2hFbmFibGVkID0gdG91Y2hFbmFibGVkJCQxO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZSA9IGRpc2FibGVkRGF0ZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhvc3RDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlSWQgPSBgay0ke2d1aWQoKX1gO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIERhdGVUaW1lUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aXRsZSA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgZGlzYWJsZWRgIHByb3BlcnR5IG9mIHRoZSBEYXRlVGltZVBpY2tlciBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXRpbWVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRGF0ZVRpbWVQaWNrZXJcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZWFkb25seV9kYXRldGltZXBpY2tlciAlfSN0b2MtcmVhZC1vbmx5LWRhdGV0aW1lcGlja2VyKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIERhdGVUaW1lUGlja2VyIGlucHV0IGZpZWxkXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLXJlYWQtb25seS1pbnB1dCkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IE5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoZSBbYHJlYWRvbmx5YF0oeyUgc2x1ZyBhcGlfZGF0ZWlucHV0c19kYXRldGltZXBpY2tlcmNvbXBvbmVudCAlfSN0b2MtcmVhZG9ubHkpIHByb3BlcnR5IHZhbHVlIHRvIGB0cnVlYCxcbiAgICAgICAgICogdGhlIGlucHV0IHdpbGwgYmUgcmVuZGVyZWQgaW4gYSByZWFkLW9ubHkgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgYHJlYWRPbmx5SW5wdXRgIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkT25seUlucHV0ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgKipDYW5jZWwqKiBidXR0b24gaW4gdGhlIHBvcHVwXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXRpbWVwaWNrZXJfcG9wdXBfb3B0aW9ucyAlfSN0b2MtdG9nZ2xpbmctdGhlLWNhbmNlbC1idXR0b24pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IGEgd2VlayBudW1iZXIgY29sdW1uIGluIHRoZSBgbW9udGhgIHZpZXcgb2YgdGhlIHBvcHVwIENhbGVuZGFyXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXRpbWVwaWNrZXJfY2FsZW5kYXJfb3B0aW9ucyAlfSN0b2Mtd2Vlay1udW1iZXItY29sdW1uKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndlZWtOdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gbWluIG9yIG1heCB2YWxpZGF0b3JzIGFyZSBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19kYXRldGltZXBpY2tlciAlfSN0b2MtcHJldmVudC1pbnZhbGlkLWlucHV0KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIHZhbGlkYXRvciBmb3IgZGlzYWJsZWRcbiAgICAgICAgICogZGF0ZSByYW5nZXMgaXMgZW5mb3JjZWQgd2hlbiB2YWxpZGF0aW5nIGEgZm9ybVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVzX2RhdGV0aW1lcGlja2VyICV9I3RvYy12YWxpZGF0aW9uKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmFsaWRhdGlvbiBmb3IgaW5jb21wbGV0ZSBkYXRlcyBpcyB0byBiZSBlbmZvcmNlZCB3aGVuIGEgZm9ybSBpcyBiZWluZyB2YWxpZGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWUuXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRldGltZXBpY2tlciAlfSN0b2MtbWV0aG9kcy1hbmQtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCBieSBzZXR0aW5nIGBldmVudC5wcmV2ZW50RGVmYXVsdCgpYCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIGNsb3NlZC5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9I3RvYy1tZXRob2RzLWFuZC1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gY2xvc2UuXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50IGJ5IHNldHRpbmcgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgLCB0aGUgcG9wdXAgd2lsbCByZW1haW4gb3Blbi5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9I3RvYy1tZXRob2RzLWFuZC1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgZm9jdXNlcyB0aGUgY29tcG9uZW50LlxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLW1ldGhvZHMtYW5kLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGJsdXJzIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRldGltZXBpY2tlciAlfSN0b2MtbWV0aG9kcy1hbmQtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICpcbiAgICAgICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgQ2FsZW5kYXIgb3IgdGhlIFRpbWVTZWxlY3RvciB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gREVGQVVMVF9BQ1RJVkVfVEFCO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHN0cmlwcGVkIHRpbWUtcmVsYXRlZCBmb3JtYXQgdGhhdCBpcyB1c2VkIGluIHRoZSBUaW1lU2VsZWN0b3IuXG4gICAgICAgICAqIFVwZGF0ZXMgZWFjaCB0aW1lIHRoZSBgZm9ybWF0YCBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aW1lU2VsZWN0b3JGb3JtYXQgPSBERUZBVUxUX1RJTUVTRUxFQ1RPUl9GT1JNQVQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpbWVTZWxlY3Rvck1pbiA9IGNsb25lRGF0ZShNSU5fVElNRSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpbWVTZWxlY3Rvck1heCA9IGNsb25lRGF0ZShNQVhfVElNRSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbGVuZGFyVmFsdWUgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYWxlbmRhck1pbiA9IGNsb25lRGF0ZShNSU5fREFURSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWF4ID0gbGFzdE1pbGxpc2Vjb25kT2ZEYXRlKE1BWF9EQVRFKTtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IHsgYW5pbWF0ZTogdHJ1ZSB9O1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IERFRkFVTFRfREFURUlOUFVUX0ZPUk1BVDtcbiAgICAgICAgdGhpcy5fdGFiaW5kZXggPSAwO1xuICAgICAgICB0aGlzLl9kZWZhdWx0VGFiID0gREVGQVVMVF9BQ1RJVkVfVEFCO1xuICAgICAgICB0aGlzLl9taW4gPSBtZXJnZURhdGVBbmRUaW1lKE1JTl9EQVRFLCBNSU5fVElNRSk7XG4gICAgICAgIHRoaXMuX21heCA9IG1lcmdlRGF0ZUFuZFRpbWUoTUFYX0RBVEUsIE1BWF9USU1FKTtcbiAgICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gbm9vcDtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IG5vb3A7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS5pbnB1dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjYWxlbmRhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS5jYWxlbmRhcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB0aW1lU2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlclNlcnZpY2UudGltZVNlbGVjdG9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiA+IFRoZSBgdmFsdWVgIGhhcyB0byBiZSBhIHZhbGlkIFtKYXZhU2NyaXB0IGBEYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZSkgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCBmb3IgZGlzcGxheWluZyB0aGUgaW5wdXQgdmFsdWVcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZvcm1hdHNfZGF0ZXRpbWVwaWNrZXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZm9ybWF0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRpbWVTZWxlY3RvckZvcm1hdCA9IHRoaXMuZ2V0VGltZVNlbGVjdG9yRm9ybWF0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBbYHRhYmluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgb2YgdGhlIERhdGVUaW1lUGlja2VyLlxuICAgICAqL1xuICAgIHNldCB0YWJpbmRleCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0YWJpbmRleCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMuX3RhYmluZGV4ID0gIWlzTmFOKHRhYmluZGV4KSA/IHRhYmluZGV4IDogZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBnZXQgdGFiaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gLTEgOiB0aGlzLl90YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGF0ZXMgb2YgdGhlIERhdGVUaW1lUGlja2VyIHRoYXQgd2lsbCBiZSBkaXNhYmxlZFxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfZGF0ZXRpbWVwaWNrZXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZERhdGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZERhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWREYXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgcG9wdXAgc2V0dGluZ3Mgb2YgdGhlIERhdGVUaW1lUGlja2VyXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRldGltZXBpY2tlcl9wb3B1cF9vcHRpb25zICV9I3RvYy1jdXN0b21pemluZy10aGUtcG9wdXApKS5cbiAgICAgKlxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICogLSBgYW5pbWF0ZTogQm9vbGVhbmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGFuaW1hdGlvbi4gQnkgZGVmYXVsdCwgdGhlIG9wZW4gYW5kIGNsb3NlIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAgICogLSBgYXBwZW5kVG86ICdyb290JyB8ICdjb21wb25lbnQnIHwgVmlld0NvbnRhaW5lclJlZmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGNvbnRhaW5lci4gQnkgZGVmYXVsdCwgdGhlIHBvcHVwIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHJvb3QgY29tcG9uZW50LlxuICAgICAqIC0gYHBvcHVwQ2xhc3M6IFN0cmluZ2AmbWRhc2g7U3BlY2lmaWVzIGEgbGlzdCBvZiBDU1MgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIHRvIHN0eWxlIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBzZXQgcG9wdXBTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgeyBhbmltYXRlOiB0cnVlIH0sIHNldHRpbmdzKTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFNldHRpbmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IHZhbGlkIGRhdGUuXG4gICAgICogVGhlIENhbGVuZGFyIHdpbGwgbm90IGRpc3BsYXkgZGF0ZXMgYmVmb3JlIHRoaXMgdmFsdWUuXG4gICAgICogSWYgdGhlIGBtaW5gIHZhbHVlIG9mIHRoZSBDYWxlbmRhciBpcyBzZWxlY3RlZCwgdGhlIFRpbWVQaWNrZXIgd2lsbCBub3QgZGlzcGxheVxuICAgICAqIHRpbWUgZW50cmllcyBiZWZvcmUgdGhlIHNwZWNpZmllZCB0aW1lIHBvcnRpb24gb2YgdGhpcyB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19kYXRldGltZXBpY2tlciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBtaW4odmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWluID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhck1pbiA9IGdldERhdGUodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgbWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGJpZ2dlc3QgdmFsaWQgZGF0ZS5cbiAgICAgKiBUaGUgQ2FsZW5kYXIgd2lsbCBub3QgZGlzcGxheSBkYXRlcyBhZnRlciB0aGlzIHZhbHVlLlxuICAgICAqIElmIHRoZSBgbWF4YCB2YWx1ZSBvZiB0aGUgQ2FsZW5kYXIgaXMgc2VsZWN0ZWQsIHRoZSBUaW1lUGlja2VyIHdpbGwgbm90IGRpc3BsYXlcbiAgICAgKiB0aW1lIGVudHJpZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lIHBvcnRpb24gb2YgdGhpcyB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19kYXRldGltZXBpY2tlciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBtYXgodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWF4ID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhck1heCA9IGxhc3RNaWxsaXNlY29uZE9mRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgY3VycmVudGx5IG9wZW4uXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLnBvcHVwUmVmKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBvciBpdHMgcG9wdXAgY29udGVudCBpcyBmb2N1c2VkLlxuICAgICAqL1xuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xuICAgIH1cbiAgICBzZXQgaXNBY3RpdmUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYWN0aXZlIHRhYiBvbiBvcGVuaW5nIHRoZSBwb3B1cFxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXRpbWVwaWNrZXJfcG9wdXBfb3B0aW9ucyAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC10YWIpKS5cbiAgICAgKi9cbiAgICBzZXQgZGVmYXVsdFRhYih0YWIpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFRhYiA9IHRhYiB8fCBERUZBVUxUX0FDVElWRV9UQUI7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy5kZWZhdWx0VGFiO1xuICAgIH1cbiAgICBnZXQgZGVmYXVsdFRhYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRUYWI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdGFiU3dpdGNoVHJhbnNpdGlvbigpIHtcbiAgICAgICAgLypcbiAgICAgICAgIFdoZW4gdGhlIHBvcHVwIGlzIG9wZW5pbmcsIGRpc2FibGVzIHRoZSBzZXQgdHJhbnNpdGlvbiBpbiB0aGUgdGhlbWVzLiBXaGVuIGBkZWZhdWx0VGFiYCBpcyBzZXQgdG8gYHRpbWVgLFxuICAgICAgICAgdGhlIHBvcHVwIG9wZW5zIHdpdGggYW4gYWN0aXZlICoqVGltZSoqIHRhYiBhbmQgdGhlIGFuaW1hdGlvbiBvZiB0aGUgaW5pdGlhbCB0cmFuc2l0aW9uIGlzIHVuZGVzaXJlZC5cbiAgICAgICAgIFNldHRpbmcgdGhlIGlubGluZSB0cmFuc2l0aW9uIHN0eWxlIHRvIGBub25lYCBvdmVycmlkZXMgdGhlIHNldCBhbmltYXRpb24gaW4gdGhlIHRoZW1lcy5cbiAgICAgICAgIFNldHRpbmcgdGhlIGlubGluZSB0cmFuc2l0aW9uIHN0eWxlIHRvIGBudWxsYCBkb2VzIG5vdCBhcHBseSBhbnkgaW5saW5lIHN0eWxlcyBvciBvdmVycmlkZSB0aGUgdGhlbWVzIENTUy5cbiAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuID8gbnVsbCA6ICdub25lJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIENhbGVuZGFyIHdpbGwgYmUgZGlzYWJsZWQuXG4gICAgICogVGhlIGluYWN0aXZlIHRhYiBjb21wb25lbnQgZ2V0cyBkaXNhYmxlZCBhbmQgYmVjb21lcyBpbmFjY2Vzc2libGUgb24gdGFiIGNsaWNrLlxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlQ2FsZW5kYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVRhYiAhPT0gJ2RhdGUnICYmICF0aGlzLmNhbGVuZGFyLmlzQWN0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlucHV0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHlJbnB1dCA/ICdsaXN0Ym94JyA6ICdzcGluYnV0dG9uJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFRpbWVTZWxlY3RvciB3aWxsIGJlIGRpc2FibGVkLlxuICAgICAqIFRoZSBpbmFjdGl2ZSB0YWIgY29tcG9uZW50IGdldHMgZGlzYWJsZWQgYW5kIGJlY29tZXMgaW5hY2Nlc3NpYmxlIG9uIHRhYiBjbGljay5cbiAgICAgKi9cbiAgICBnZXQgZGlzYWJsZVRpbWVTZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiICE9PSAndGltZScgJiYgIXRoaXMudGltZVNlbGVjdG9yLmlzQWN0aXZlO1xuICAgIH1cbiAgICBnZXQgYWN0aXZlVGFiQ29tcG9uZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoaXNQcmVzZW50KHRoaXMuY2FsZW5kYXIpIHx8IGlzUHJlc2VudCh0aGlzLnRpbWVTZWxlY3RvcikpKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiID09PSAnZGF0ZScgPyB0aGlzLmNhbGVuZGFyIDogdGhpcy50aW1lU2VsZWN0b3I7XG4gICAgfVxuICAgIGdldCBhcHBlbmRUbygpIHtcbiAgICAgICAgY29uc3QgeyBhcHBlbmRUbyB9ID0gdGhpcy5wb3B1cFNldHRpbmdzO1xuICAgICAgICBpZiAoIWlzUHJlc2VudChhcHBlbmRUbykgfHwgYXBwZW5kVG8gPT09ICdyb290Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwZW5kVG8gPT09ICdjb21wb25lbnQnID8gdGhpcy5jb250YWluZXIgOiBhcHBlbmRUbztcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLm9uRm9jdXNcbiAgICAgICAgICAgIC8vIGRldGVjdCBwb3B1cCBjaGFuZ2VzIHRvIGRpc2FibGUgdGhlIGluYWN0aXZlIHZpZXcgbWFyay11cCB3aGVuIHRoZSBwb3B1cCBpcyBvcGVuXG4gICAgICAgICAgICAucGlwZSh0YXAodGhpcy5kZXRlY3RQb3B1cENoYW5nZXMuYmluZCh0aGlzKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuaGFuZGxlRm9jdXMuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5vbkJsdXIuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLnNhbWVEYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQ2FsZW5kYXJWYWx1ZUNoYW5nZS5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBpY2tlclNlcnZpY2UuZGF0ZUNvbXBsZXRlbmVzc0NoYW5nZS5zdWJzY3JpYmUodGhpcy5oYW5kbGVEYXRlQ29tcGxldGVuZXNzQ2hhbmdlLmJpbmQodGhpcykpKTtcbiAgICAgICAgaWYgKGlzV2luZG93QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZnJvbUV2ZW50KHdpbmRvdywgJ2JsdXInKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVDYW5jZWwuYmluZCh0aGlzKSkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQoY2hhbmdlcy5taW4pIHx8IGlzUHJlc2VudChjaGFuZ2VzLm1heCkpIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5TWluTWF4UmFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24gfHwgY2hhbmdlcy5kaXNhYmxlZERhdGVzVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmRpc2FibGVkRGF0ZXMgfHwgY2hhbmdlcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWluVmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWluVmFsaWRhdG9yKHRoaXMubWluKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1heFZhbGlkYXRvcih0aGlzLm1heCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbiA9IHRoaXMuZGlzYWJsZWREYXRlc1ZhbGlkYXRpb24gPyBkaXNhYmxlZERhdGVzVmFsaWRhdG9yKHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaXNEYXRlRGlzYWJsZWQpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvciA9IHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID8gaW5jb21wbGV0ZURhdGVWYWxpZGF0b3IoKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqICogSWYgdGhlIHBvcHVwIGlzIGNsb3NlZCwgZm9jdXNlcyB0aGUgRGF0ZVRpbWVQaWNrZXIgaW5wdXQuXG4gICAgICogKiBJZiB0aGUgcG9wdXAgaXMgb3BlbiwgdGhlIGZvY3VzIGlzIG1vdmVkIHRvIGl0cyBjb250ZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJDb21wb25lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgRGF0ZVRpbWVQaWNrZXIuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMuYWN0aXZlVGFiQ29tcG9uZW50LmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYkNvbXBvbmVudC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwb3B1cC4gSWYgeW91IHVzZSB0aGUgYHRvZ2dsZWAgbWV0aG9kIHRvIHNob3cgb3IgaGlkZSB0aGUgcG9wdXAsXG4gICAgICogdGhlIGBvcGVuYCBhbmQgYGNsb3NlYCBldmVudHMgZG8gbm90IGZpcmUuXG4gICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9I3RvYy1tZXRob2RzLWFuZC1ldmVudHMpKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaG93IC0gVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUoc2hvdykge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8IHNob3cgPT09IHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvdWxkT3BlbiA9IGlzUHJlc2VudChzaG93KSA/IHNob3cgOiAhdGhpcy5pc09wZW47XG4gICAgICAgIGlmIChzaG91bGRPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XG4gICAgICAgICAgICAvLyBDaGFuZ2VzIHRoZSB0YWIgYW5kIHRoZSBjYWxlbmRhciBvciBjbG9jayBpY29uIHRvIHRoZSBkZXNpZ25hdGVkIGRlZmF1bHQuXG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUYWIgIT09IHRoaXMuZGVmYXVsdFRhYikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy5kZWZhdWx0VGFiO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHZhbGlkYXRlKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLm1heFZhbGlkYXRlRm4oY29udHJvbCkgfHwgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IoY29udHJvbCwgdGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmlzRGF0ZUluY29tcGxldGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIFVzZWQgYnkgdGhlIFRleHRCb3hDb250YWluZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmbG9hdGluZyBsYWJlbCB3aWxsIHJlbmRlciBpbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICFpc1ByZXNlbnQodGhpcy52YWx1ZSkgJiYgdGhpcy5pbnB1dC5pc0VtcHR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJY29uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnRzIHRoZSBldmVudCBkZWZhdWx0IHRvIGV2YWRlIGZvY3VzaW5nIHRoZSBEYXRlSW5wdXQgaW5wdXQgd2hlbiBwbGFjZWQgaW5zaWRlIGEgbGFiZWwgKEZGL0lFL0VkZ2UpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHJ1bkluWm9uZSA9ICF0aGlzLmlzT3BlbiB8fCBoYXNPYnNlcnZlcnModGhpcy5jbG9zZSk7XG4gICAgICAgIHRoaXMucnVuKHJ1bkluWm9uZSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkT3BlbiA9ICF0aGlzLmlzT3BlbjtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb2N1cyBmaXJzdCB0byBtYWludGFpbiBjb3JyZWN0IGV2ZW50IG9yZGVyIGBmb2N1c2AgPT4gYG9wZW5gXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKHNob3VsZE9wZW4pO1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hGb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25Gb2N1cykpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uRm9jdXMuZW1pdCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUgfHwgdGhpcy5mb2N1c1RhcmdldEluQ29tcG9uZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXNOZ0NvbnRyb2xVbnRvdWNoZWQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLXVudG91Y2hlZCcpO1xuICAgICAgICBjb25zdCBydW5JblpvbmUgPSBpc05nQ29udHJvbFVudG91Y2hlZCB8fCBoYXNPYnNlcnZlcnModGhpcy5vbkJsdXIpIHx8ICh0aGlzLmlzT3BlbiAmJiBoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpO1xuICAgICAgICB0aGlzLnJ1bihydW5JblpvbmUsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICAgICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjaGFuZ2VBY3RpdmVUYWIodGFiKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4gfHwgdGhpcy5hY3RpdmVUYWIgPT09IHRhYikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHBlcnNpc3RzIHRoZSBUY3VycmVudCB2YWx1ZSBvZiB0aGUgVGltZVNlbGVjdG9yIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdGFic1xuICAgICAgICBpZiAoIWlzRXF1YWwodGhpcy50aW1lU2VsZWN0b3IudmFsdWUsIHRoaXMudGltZVNlbGVjdG9yLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVTZWxlY3Rvci5oYW5kbGVBY2NlcHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRldGVjdFBvcHVwQ2hhbmdlcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlVGFiQ2hhbmdlVHJhbnNpdGlvbkVuZChkYXRlVGltZVNlbGVjdG9yLCBldmVudCkge1xuICAgICAgICAvLyBoYW5kbGUgb25seSB0aGUgLmstZGF0ZXRpbWUtc2VsZWN0b3IgZWxlbWVudCB0cmFuc2l0aW9uLCBpZ25vcmUgYW55IGNoaWxkIGVsZW1lbnQgdHJhbnNpdGlvbnNcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gZGF0ZVRpbWVTZWxlY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiQ29tcG9uZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVBY2NlcHQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtZXJnZURhdGVBbmRUaW1lKHRoaXMuY2FsZW5kYXIudmFsdWUsIHRoaXMudGltZVNlbGVjdG9yLmN1cnJlbnQpO1xuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZVByZXNlbnQgPSAhaXNFcXVhbCh0aGlzLnZhbHVlLCBjYW5kaWRhdGUpO1xuICAgICAgICBjb25zdCBydW5JblpvbmUgPSB2YWx1ZUNoYW5nZVByZXNlbnQgfHwgaGFzT2JzZXJ2ZXJzKHRoaXMuY2xvc2UpO1xuICAgICAgICB0aGlzLnJ1bihydW5JblpvbmUsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UoY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUNhbmNlbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bkluWm9uZSA9IGhhc09ic2VydmVycyh0aGlzLmNsb3NlKTtcbiAgICAgICAgdGhpcy5ydW4ocnVuSW5ab25lLCAoKSA9PiB0aGlzLnRvZ2dsZVBvcHVwKGZhbHNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dFZhbHVlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVDYWxlbmRhclZhbHVlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnNldFRpbWVTZWxlY3Rvck1pbk1heCh0aGlzLmNhbGVuZGFyLnZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VBY3RpdmVUYWIoJ3RpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsga2V5Q29kZSwgYWx0S2V5IH0gPSBldmVudDtcbiAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIGFsdEtleSAmJiBLZXlzLkFycm93VXA6XG4gICAgICAgICAgICBjYXNlIEtleXMuRXNjYXBlOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICF0aGlzLmlzT3BlbiAmJiBhbHRLZXkgJiYgS2V5cy5BcnJvd0Rvd246XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudG9nZ2xlUG9wdXAodHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBhbHRLZXkgJiYgS2V5cy5BcnJvd1JpZ2h0OlxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlVGFiKCd0aW1lJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGFsdEtleSAmJiBLZXlzLkFycm93TGVmdDpcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUFjdGl2ZVRhYignZGF0ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmlzT3BlbiAmJiB0aGlzLnRpbWVTZWxlY3Rvci5pc0FjdGl2ZSAmJiBpc1ByZXNlbnQodGhpcy5jYWxlbmRhclZhbHVlKSAmJiBLZXlzLkVudGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWNjZXB0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVRhYk91dChldmVudCkge1xuICAgICAgICBjb25zdCB7IGtleUNvZGUsIHNoaWZ0S2V5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICAgICAgICAvLyBpZiBubyBmb2N1c2FibGUgbmV4dCBzaWJsaW5nIGVsZW1lbnRzIGV4aXN0IGluIHRoZSBjb250cm9scyBzZWN0aW9ucywgdGhlIHVzZXIgaXMgdGFiYmluZyBvdXQgb2YgdGhlIHBvcHVwXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZVNpYmxpbmdBdmFpbGFibGUgPSBpc1ByZXNlbnQodGFyZ2V0Lm5leHRFbGVtZW50U2libGluZykgJiYgIXRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmcuZGlzYWJsZWQ7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLlRhYiAmJiAhc2hpZnRLZXkgJiYgIWZvY3VzYWJsZVNpYmxpbmdBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUJhY2tUYWJPdXQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBrZXlDb2RlLCBzaGlmdEtleSB9ID0gZXZlbnQ7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLlRhYiAmJiBzaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIFByZXZlbnRzIHRoZSBkaXZlcnNpb24gb2YgdGhlIGZvY3VzIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCBpbiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByZXZlbnRNb3VzZURvd24oZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ3ZhbHVlJyBzaG91bGQgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGUgaW5zdGFuY2UuIENoZWNrICR7VkFMVUVfRE9DX0xJTkskNH0gZm9yIHBvc3NpYmxlIHJlc29sdXRpb24uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5TWluTWF4UmFuZ2UoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXggdmFsdWUgc2hvdWxkIGJlIGJpZ2dlciB0aGFuIHRoZSBtaW4uIFNlZSAke01JTl9NQVhfRE9DX0xJTkt9LmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB0aW1lIHNsb3RzIGFuZCB0aGUgbGl0ZXJhbHMgdGhhdCBhcmUgbm90IHByZWNlZGVkIGJ5IGRhdGUgcGFydHNcbiAgICAgKiBhbmQgY29uY2F0ZW5hdGVzIHRoZSByZXN1bHRpbmcgcGFydHMgaW50byBhIHN0cmluZy5cbiAgICAgKiBJZiB0aGUgcHJvdmlkZWQgZm9ybWF0IHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gYW55IHRpbWUgcGFydHMsXG4gICAgICogcmV0dXJucyB0aGUgZGVzaWduYXRlZCBmb3JtYXQgb2YgdGhlIGRlZmF1bHQgcG9wdXAgY29tcG9uZW50IG9mIHRoZSBUaW1lUGlja2VyLlxuICAgICAqL1xuICAgIGdldFRpbWVTZWxlY3RvckZvcm1hdChmb3JtYXQpIHtcbiAgICAgICAgY29uc3QgdGltZVNlbGVjdG9yRm9ybWF0ID0gdGhpcy5pbnRsXG4gICAgICAgICAgICAuc3BsaXREYXRlRm9ybWF0KGZvcm1hdClcbiAgICAgICAgICAgIC5maWx0ZXIodGhpcy50aW1lRm9ybWF0UGFydEZpbHRlcilcbiAgICAgICAgICAgIC5yZWR1Y2UoKGZvcm1hdCwgcGFydCkgPT4gZm9ybWF0ICs9IHBhcnQucGF0dGVybiwgJycpO1xuICAgICAgICByZXR1cm4gdGltZVNlbGVjdG9yRm9ybWF0IHx8IERFRkFVTFRfVElNRVNFTEVDVE9SX0ZPUk1BVDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGZpbHRlciBleHByZXNzaW9uIHRoYXQgZmlsdGVycyBvdXQgYWxsIGZvcm1hdCBwYXJ0c1xuICAgICAqIGV4Y2VwdCBmb3IgYGhvdXJgLCBgbWludXRlYCwgYHNlY29uZGAsIGBkYXlwZXJpb2RgLCBhbmQgc3BlY2lmaWMgbGl0ZXJhbHMuXG4gICAgICogTGl0ZXJhbHMgd2lsbCBiZSBsZWZ0IG9ubHkgaWYgdGhleSBhcmUgbm90IHByZWNlZGVkIGJ5IGRhdGUgcGFydHMuXG4gICAgICovXG4gICAgdGltZUZvcm1hdFBhcnRGaWx0ZXIocGFydCwgaW5kZXgsIHBhcnRzKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFydCA9IGluZGV4ID49IDEgJiYgcGFydHNbaW5kZXggLSAxXTtcbiAgICAgICAgaWYgKHByZXZpb3VzUGFydCAmJiBwYXJ0LnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVGb3JtYXRSZWdFeHAudGVzdChwcmV2aW91c1BhcnQudHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVGb3JtYXRSZWdFeHAudGVzdChwYXJ0LnR5cGUpO1xuICAgIH1cbiAgICB0b2dnbGVQb3B1cChvcGVuKSB7XG4gICAgICAgIGlmIChvcGVuID09PSB0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFByZXZlbnRhYmxlRXZlbnQoKTtcbiAgICAgICAgb3BlbiA/IHRoaXMub3Blbi5lbWl0KGV2ZW50KSA6IHRoaXMuY2xvc2UuZW1pdChldmVudCk7XG4gICAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlKG9wZW4pO1xuICAgICAgICB0aGlzLnN3aXRjaEZvY3VzKCk7XG4gICAgfVxuICAgIHN3aXRjaEZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiQ29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMudG91Y2hFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuaW5wdXQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wZW5Qb3B1cCgpIHtcbiAgICAgICAgdGhpcy5zZXRDYWxlbmRhclZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnNldFRpbWVTZWxlY3Rvck1pbk1heCh0aGlzLnZhbHVlKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLndyYXBwZXIsXG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnBvcHVwVGVtcGxhdGUsXG4gICAgICAgICAgICBwb3NpdGlvbk1vZGU6ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBhbmltYXRlOiB0aGlzLnBvcHVwU2V0dGluZ3MuYW5pbWF0ZSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiB0aGlzLmFwcGVuZFRvLFxuICAgICAgICAgICAgcG9wdXBDbGFzczogYGstZGF0ZXRpbWUtY29udGFpbmVyICR7dGhpcy5wb3B1cFNldHRpbmdzLnBvcHVwQ2xhc3MgfHwgJyd9YCxcbiAgICAgICAgICAgIGFuY2hvckFsaWduOiB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICBwb3B1cEFsaWduOiB7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBBbmNob3JWaWV3cG9ydExlYXZlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZUNhbmNlbCgpKTtcbiAgICB9XG4gICAgY2xvc2VQb3B1cCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgfVxuICAgIGhhbmRsZVZhbHVlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZShjbG9uZURhdGUodmFsdWUpKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9jdXMgdGFyZ2V0IGlzIHBhcnQgb2YgdGhpcyBjb21wb25lbnQsXG4gICAgICogdGhhdCBpcywgd2hldGhlciB0aGUgZm9jdXMgdGFyZ2V0IGlzIGluc2lkZSB0aGUgY29tcG9uZW50IHdyYXBwZXIgb3IgaW4gdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIGZvY3VzVGFyZ2V0SW5Db21wb25lbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9jdXNJblBvcHVwID0gaXNQcmVzZW50KHRoaXMucG9wdXBSZWYpICYmIHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICBjb25zdCBmb2N1c0luV3JhcHBlciA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICByZXR1cm4gZm9jdXNJblBvcHVwIHx8IGZvY3VzSW5XcmFwcGVyO1xuICAgIH1cbiAgICBzZXRUaW1lU2VsZWN0b3JNaW5NYXgoc2VsZWN0ZWREYXRlKSB7XG4gICAgICAgIGNvbnN0IG1pbkRhdGVTZWxlY3RlZCA9IGlzUHJlc2VudChzZWxlY3RlZERhdGUpICYmIGlzRXF1YWwoZ2V0RGF0ZShzZWxlY3RlZERhdGUpLCBnZXREYXRlKHRoaXMubWluKSk7XG4gICAgICAgIHRoaXMudGltZVNlbGVjdG9yTWluID0gY2xvbmVEYXRlKG1pbkRhdGVTZWxlY3RlZCA/IHRoaXMubWluIDogTUlOX1RJTUUpO1xuICAgICAgICBjb25zdCBtYXhEYXRlU2VsZWN0ZWQgPSBpc1ByZXNlbnQoc2VsZWN0ZWREYXRlKSAmJiBpc0VxdWFsKGdldERhdGUoc2VsZWN0ZWREYXRlKSwgZ2V0RGF0ZSh0aGlzLm1heCkpO1xuICAgICAgICB0aGlzLnRpbWVTZWxlY3Rvck1heCA9IGNsb25lRGF0ZShtYXhEYXRlU2VsZWN0ZWQgPyB0aGlzLm1heCA6IE1BWF9USU1FKTtcbiAgICB9XG4gICAgc2V0Q2FsZW5kYXJWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBpc0luQ2FsZW5kYXJSYW5nZSA9IGlzUHJlc2VudCh2YWx1ZSkgJiYgaXNJblJhbmdlKHZhbHVlLCB0aGlzLmNhbGVuZGFyTWluLCB0aGlzLmNhbGVuZGFyTWF4KTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclZhbHVlID0gaXNJbkNhbGVuZGFyUmFuZ2UgPyBnZXREYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBwb3B1cCBpcyBhdmFpbGFibGUsIHJ1bnMgYSBwb3B1cCBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAqL1xuICAgIGRldGVjdFBvcHVwQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXAuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHByZWRpY2F0ZSBgcnVuSW5ab25lYCB2YWx1ZSB0aGF0IGlzIHBhc3NlZCxcbiAgICAgKiBydW5zIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBlaXRoZXIgaW4gdGhlIEFuZ3VsYXIgb3IgaW4gdGhlIGN1cnJlbnQgem9uZS5cbiAgICAgKi9cbiAgICBydW4ocnVuSW5ab25lLCBmbikge1xuICAgICAgICBpZiAocnVuSW5ab25lKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gZm4oKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpKTtcbiAgICB9XG59XG5EYXRlVGltZVBpY2tlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGF0ZXRpbWVwaWNrZXInLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG8tZGF0ZXRpbWVwaWNrZXInLFxuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBQaWNrZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZERhdGVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5kYXRldGltZXBpY2tlcicgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBLZW5kb0lucHV0LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCkgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAga2VuZG9EYXRlVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzXG5cbiAgICAgICAgICAgIGkxOG4tZGF0ZVRhYj1cImtlbmRvLmRhdGV0aW1lcGlja2VyLmRhdGVUYWJ8VGhlIERhdGUgdGFiIHRleHQgaW4gdGhlIGRhdGV0aW1lcGlja2VyIHBvcHVwIGhlYWRlclwiXG4gICAgICAgICAgICBkYXRlVGFiPVwiRGF0ZVwiXG5cbiAgICAgICAgICAgIGkxOG4tZGF0ZVRhYkxhYmVsPVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIuZGF0ZVRhYkxhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIERhdGUgdGFiIGluIHRoZSBkYXRldGltZXBpY2tlciBwb3B1cCBoZWFkZXJcIlxuICAgICAgICAgICAgZGF0ZVRhYkxhYmVsPVwiRGF0ZSB0YWJcIlxuXG4gICAgICAgICAgICBpMThuLXRpbWVUYWI9XCJrZW5kby5kYXRldGltZXBpY2tlci50aW1lVGFifFRoZSBUaW1lIHRhYiB0ZXh0IGluIHRoZSBkYXRldGltZXBpY2tlciBwb3B1cCBoZWFkZXJcIlxuICAgICAgICAgICAgdGltZVRhYj1cIlRpbWVcIlxuXG4gICAgICAgICAgICBpMThuLXRpbWVUYWJMYWJlbD1cImtlbmRvLmRhdGV0aW1lcGlja2VyLnRpbWVUYWJMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBUaW1lIHRhYiBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgcG9wdXAgaGVhZGVyXCJcbiAgICAgICAgICAgIHRpbWVUYWJMYWJlbD1cIlRpbWUgdGFiXCJcblxuICAgICAgICAgICAgaTE4bi10b2dnbGU9XCJrZW5kby5kYXRldGltZXBpY2tlci50b2dnbGV8VGhlIGxhYmVsIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIHRvZ2dsZT1cIlRvZ2dsZSBwb3B1cFwiXG5cbiAgICAgICAgICAgIGkxOG4tYWNjZXB0PVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIuYWNjZXB0fFRoZSBBY2NlcHQgYnV0dG9uIHRleHQgaW4gdGhlIGRhdGV0aW1lcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBhY2NlcHQ9XCJTZXRcIlxuXG4gICAgICAgICAgICBpMThuLWFjY2VwdExhYmVsPVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIuYWNjZXB0TGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgQWNjZXB0IGJ1dHRvbiBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGFjY2VwdExhYmVsPVwiU2V0XCJcblxuICAgICAgICAgICAgaTE4bi1jYW5jZWw9XCJrZW5kby5kYXRldGltZXBpY2tlci5jYW5jZWx8VGhlIENhbmNlbCBidXR0b24gdGV4dCBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGNhbmNlbD1cIkNhbmNlbFwiXG5cbiAgICAgICAgICAgIGkxOG4tY2FuY2VsTGFiZWw9XCJrZW5kby5kYXRldGltZXBpY2tlci5jYW5jZWxMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBDYW5jZWwgYnV0dG9uIGluIHRoZSBkYXRldGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgY2FuY2VsTGFiZWw9XCJDYW5jZWxcIlxuXG4gICAgICAgICAgICBpMThuLW5vdz1cImtlbmRvLmRhdGV0aW1lcGlja2VyLm5vd3xUaGUgTm93IGJ1dHRvbiB0ZXh0IGluIHRoZSB0aW1lcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBub3c9XCJOT1dcIlxuXG4gICAgICAgICAgICBpMThuLW5vd0xhYmVsPVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIubm93TGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgTm93IGJ1dHRvbiBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgbm93TGFiZWw9XCJTZWxlY3Qgbm93XCJcblxuICAgICAgICAgICAgaTE4bi10b2RheT1cImtlbmRvLmRhdGV0aW1lcGlja2VyLnRvZGF5fFRoZSBsYWJlbCBmb3IgdGhlIHRvZGF5IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyXCJcbiAgICAgICAgICAgIHRvZGF5PVwiVE9EQVlcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjd3JhcHBlclxuICAgICAgICAgICAgY2xhc3M9XCJrLXBpY2tlci13cmFwXCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLWRhdGVpbnB1dFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgW2luY29tcGxldGVEYXRlVmFsaWRhdGlvbl09XCJpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb25cIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSB8fCByZWFkT25seUlucHV0XCJcbiAgICAgICAgICAgICAgICBbcm9sZV09XCJpbnB1dFJvbGVcIlxuICAgICAgICAgICAgICAgIFthcmlhUmVhZE9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFtzdGVwc109XCJzdGVwc1wiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgIFtmb2N1c2FibGVJZF09XCJmb2N1c2FibGVJZFwiXG4gICAgICAgICAgICAgICAgW2hhc1BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpc1BvcHVwT3Blbl09XCJpc09wZW5cIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVJbnB1dFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogaGFuZGxlS2V5RG93blxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgndG9nZ2xlJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgndG9nZ2xlJylcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBwcmV2ZW50TW91c2VEb3duLFxuICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlSWNvbkNsaWNrXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1saW5rIGstbGluay1kYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1pLWNhbGVuZGFyXT1cImFjdGl2ZVRhYiA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWktY2xvY2tdPVwiYWN0aXZlVGFiID09PSAndGltZSdcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwb3B1cFRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1kYXRldGltZS13cmFwIGste3thY3RpdmVUYWJ9fS10YWJcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBwcmV2ZW50TW91c2VEb3duLFxuICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlEb3duXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWRhdGV0aW1lLWJ1dHRvbmdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNpbjogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c291dDogaGFuZGxlQmx1clxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstYnV0dG9uLWdyb3VwIGstYnV0dG9uLWdyb3VwLXN0cmV0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay1kYXRlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdkYXRlVGFiTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdkYXRlVGFiTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogY2hhbmdlQWN0aXZlVGFiLmJpbmQodGhpcywgJ2RhdGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogaGFuZGxlQmFja1RhYk91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xvY2FsaXphdGlvbi5nZXQoJ2RhdGVUYWInKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstdGltZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWFjdGl2ZV09XCJhY3RpdmVUYWIgPT09ICd0aW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgndGltZVRhYkxhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgndGltZVRhYkxhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGNoYW5nZUFjdGl2ZVRhYi5iaW5kKHRoaXMsICd0aW1lJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xvY2FsaXphdGlvbi5nZXQoJ3RpbWVUYWInKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAjZGF0ZVRpbWVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZGF0ZXRpbWUtc2VsZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNpdGlvbl09XCJ0YWJTd2l0Y2hUcmFuc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbmVuZDogaGFuZGxlVGFiQ2hhbmdlVHJhbnNpdGlvbkVuZC5iaW5kKHRoaXMsIGRhdGVUaW1lU2VsZWN0b3IpXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZGF0ZXRpbWUtY2FsZW5kYXItd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY2FsZW5kYXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJjYWxlbmRhck1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJjYWxlbmRhck1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzZWREYXRlXT1cImZvY3VzZWREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmF2aWdhdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb250aENlbGxUZW1wbGF0ZV09XCJtb250aENlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3llYXJDZWxsVGVtcGxhdGVdPVwieWVhckNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2FkZUNlbGxUZW1wbGF0ZV09XCJkZWNhZGVDZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZW50dXJ5Q2VsbFRlbXBsYXRlXT1cImNlbnR1cnlDZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyVGVtcGxhdGVdPVwid2Vla051bWJlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyVGl0bGVUZW1wbGF0ZV09XCJoZWFkZXJUaXRsZVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJWYWx1ZUNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2VuZG8tY2FsZW5kYXItbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvZGF5XT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZGF5JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWNhbGVuZGFyLW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9rZW5kby1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWRhdGV0aW1lLXRpbWUtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRpbWVzZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJ0aW1lU2VsZWN0b3JGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwidGltZVNlbGVjdG9yTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cInRpbWVTZWxlY3Rvck1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NldEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbmNlbEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBzXT1cInN0ZXBzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVRpbWVTZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRpbWVzZWxlY3Rvci1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm93XT1cImxvY2FsaXphdGlvbi5nZXQoJ25vdycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vd0xhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ25vd0xhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLXRpbWVzZWxlY3Rvci1tZXNzYWdlcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwva2VuZG8tdGltZXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1kYXRldGltZS1mb290ZXIgay1hY3Rpb24tYnV0dG9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGhhbmRsZVRhYk91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzaW46IGhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNvdXQ6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLXRpbWUtY2FuY2VsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbExhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdjYW5jZWxMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlQ2FuY2VsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tsb2NhbGl6YXRpb24uZ2V0KCdjYW5jZWwnKX19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay10aW1lLWFjY2VwdCBrLWJ1dHRvbiBrLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgnYWNjZXB0TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdExhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYWxlbmRhclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlQWNjZXB0XG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHQnKX19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlVGltZVBpY2tlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBQaWNrZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IEluamVjdCwgYXJnczogW1RPVUNIX0VOQUJMRUQsXSB9XSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGlzYWJsZWREYXRlc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9XG5dO1xuRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kYXRldGltZXBpY2tlcicsXSB9XSxcbiAgICB3cmFwcGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnd3JhcHBlcicsXSB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBTZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNhYmxlSWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRPbmx5SW5wdXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbmNlbEJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0UGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdlZWtOdW1iZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkRGF0ZXNWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb3BlbjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsb3NlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb25Gb2N1czogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIG9uQmx1cjogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2JsdXInLF0gfV0sXG4gICAgZGVmYXVsdFRhYjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICB5ZWFyQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZGVjYWRlQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgd2Vla051bWJlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgaGVhZGVyVGl0bGVUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbSGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9LF0gfV0sXG4gICAgcG9wdXBUZW1wbGF0ZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3BvcHVwVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0sXSB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6Y29tcG9uZW50LXNlbGVjdG9yLW5hbWUgIGNvbXBvbmVudC1zZWxlY3Rvci10eXBlICovXG5jb25zdCBERUZBVUxUX1ZJRVdTX0xFTkdUSCA9IDI7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihidXMsIGNkcikge1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1pbiA9IG5ldyBEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgdGhpcy5tYXggPSBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgICAgIHRoaXMudmlld3MgPSBERUZBVUxUX1ZJRVdTX0xFTkdUSDtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2VsbExlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgfVxuICAgIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93V2Vla051bWJlcnMgJiYgdGhpcy5pc01vbnRoVmlldygpO1xuICAgIH1cbiAgICBzZXQgd2Vla051bWJlcihzaG93V2Vla051bWJlcnMpIHtcbiAgICAgICAgdGhpcy5zaG93V2Vla051bWJlcnMgPSBzaG93V2Vla051bWJlcnM7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRNb250aENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoO1xuICAgIH1cbiAgICBnZXQgZ2V0Q29tcG9uZW50WWVhckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLnllYXI7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnREZWNhZGVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5kZWNhZGU7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRDZW50dXJ5Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0uY2VudHVyeTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3cyA9IHRoaXMudmlld3MgfHwgREVGQVVMVF9WSUVXU19MRU5HVEg7XG4gICAgICAgIGNvbnN0IGZvY3VzZWREYXRlID0gdGhpcy5mb2N1c2VkRGF0ZTtcbiAgICAgICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmNsYW1wRGF0ZSh0aGlzLnNlcnZpY2Uudmlld0RhdGUoZm9jdXNlZERhdGUsIHRoaXMubWF4LCB0aGlzLnZpZXdzKSk7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuc2VydmljZS5za2lwKHZpZXdEYXRlLCB0aGlzLm1pbik7XG4gICAgICAgIHRoaXMudG90YWwgPSB0aGlzLnNlcnZpY2UudG90YWwodGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgYWN0aXZlVmlld0NoYW5nZWQgPSBoYXNDaGFuZ2UoY2hhbmdlcywgJ2FjdGl2ZVZpZXcnKTtcbiAgICAgICAgY29uc3Qgdmlld3NIYXNDaGFuZ2VkID0gdGhpcy52aWV3cyA+IDAgJiYgaGFzQ2hhbmdlKGNoYW5nZXMsICd2aWV3cycpO1xuICAgICAgICBpZiAoYWN0aXZlVmlld0NoYW5nZWQgfHwgIXRoaXMuaXNJbkRhdGVzKGZvY3VzZWREYXRlKSB8fCB2aWV3c0hhc0NoYW5nZWQgfHwgIXRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlcyA9IHRoaXMuc2VydmljZS5kYXRlc0xpc3Qodmlld0RhdGUsIHRoaXMuZ2V0VGFrZSh0aGlzLnNraXApKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGNsb25lRGF0ZSh0aGlzLmRhdGVzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0U2VydmljZSgpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5idXMuc2VydmljZSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgIH1cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGNhbmRpZGF0ZSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgaXNNb250aFZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgfVxuICAgIG5hdmlnYXRlKGFjdGlvbikge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLm1vdmUoYWN0aW9uKTtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuc2VydmljZS5kYXRlc0xpc3QoY2FuZGlkYXRlLCB0aGlzLmdldFRha2UodGhpcy5za2lwKSk7XG4gICAgICAgIGlmICh0aGlzLmlzTGlzdEluUmFuZ2UobGlzdCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZXMgPSBsaXN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGNsb25lRGF0ZSh0aGlzLmRhdGVzWzBdKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgIH1cbiAgICBjYW5OYXZpZ2F0ZShhY3Rpb24pIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RJblJhbmdlKHRoaXMuc2VydmljZS5kYXRlc0xpc3QodGhpcy5tb3ZlKGFjdGlvbiksIHRoaXMuZ2V0VGFrZSh0aGlzLnNraXApKSk7XG4gICAgfVxuICAgIGNsYW1wRGF0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZUluUmFuZ2UodmFsdWUsIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgfVxuICAgIG1vdmUoYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UubW92ZSh0aGlzLmRhdGVzWzBdIHx8IHRoaXMuZm9jdXNlZERhdGUsIGFjdGlvbik7XG4gICAgfVxuICAgIGlzTGlzdEluUmFuZ2UobGlzdCkge1xuICAgICAgICBjb25zdCBsb3dlckJvdW5kID0gdGhpcy5zZXJ2aWNlLmJlZ2lubmluZ09mUGVyaW9kKHRoaXMubWluKTtcbiAgICAgICAgY29uc3QgdXBwZXJCb3VuZCA9IHRoaXMuc2VydmljZS5iZWdpbm5pbmdPZlBlcmlvZCh0aGlzLnNlcnZpY2UuYWRkVG9EYXRlKHRoaXMubWF4LCAxKSk7XG4gICAgICAgIHJldHVybiBsb3dlckJvdW5kIDw9IGxpc3RbMF0gJiYgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdIDwgdXBwZXJCb3VuZDtcbiAgICB9XG4gICAgaXNJbkRhdGVzKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuaXNJbkFycmF5KHZhbHVlLCB0aGlzLmRhdGVzKTtcbiAgICB9XG4gICAgZ2V0VGFrZShza2lwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnRvdGFsIC0gc2tpcCwgdGhpcy52aWV3cyk7XG4gICAgfVxufVxuSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhci1ob3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxrZW5kby1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgIFtjdXJyZW50RGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtyYW5nZUxlbmd0aF09XCJ2aWV3c1wiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJoZWFkZXJUaXRsZVRlbXBsYXRlUmVmXCJcbiAgICAgICAgKHRvZGF5KT1cImhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgIDwva2VuZG8tY2FsZW5kYXItaGVhZGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cImstY29udGVudFwiPlxuICAgICAgICA8dGJvZHkgKmtGb3I9XCJsZXQgZGF0ZSBvZiBkYXRlc1wiXG4gICAgICAgICAgICAgICBrZW5kb0NhbGVuZGFyVmlld1xuICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcbiAgICAgICAgICAgICAgIGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld1wiXG4gICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIiBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICBbY2VsbFVJRF09XCJjZWxsVUlEXCJcbiAgICAgICAgICAgICAgIFtmb2N1c2VkRGF0ZV09XCJmb2N1c2VkRGF0ZVwiXG4gICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgIFtzZWxlY3Rpb25SYW5nZV09XCJzZWxlY3Rpb25SYW5nZVwiXG4gICAgICAgICAgICAgICBbYWN0aXZlUmFuZ2VFbmRdPVwiYWN0aXZlUmFuZ2VFbmRcIlxuICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICAgICBbdGVtcGxhdGVSZWZdPVwiY2VsbFRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyVGVtcGxhdGVSZWZdPVwid2Vla051bWJlclRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgIFt2aWV3RGF0ZV09XCJkYXRlXCJcbiAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChjZWxsRW50ZXIpPVwiY2VsbEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAoY2VsbExlYXZlKT1cImNlbGxMZWF2ZS5lbWl0KCRldmVudClcIlxuICAgICAgICA+PC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkhvcml6b250YWxWaWV3TGlzdENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJ1c1ZpZXdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlclRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVSYW5nZUVuZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2VsbFVJRDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGlzQWN0aXZlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aWV3czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsRW50ZXI6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsTGVhdmU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBnZXRDb21wb25lbnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItdmlld1wiLF0gfV0sXG4gICAgZ2V0Q29tcG9uZW50TW9udGhDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItbW9udGh2aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnRZZWFyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLXllYXJ2aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnREZWNhZGVDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItZGVjYWRldmlld1wiLF0gfV0sXG4gICAgZ2V0Q29tcG9uZW50Q2VudHVyeUNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1jZW50dXJ5dmlld1wiLF0gfV1cbn07XG5cbmNvbnN0IG5vb3AkMiA9ICgpID0+IG51bGw7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdG9yID0gKGlzRGF0ZURpc2FibGVkKSA9PiB7XG4gICAgaWYgKCFpc1ByZXNlbnQoaXNEYXRlRGlzYWJsZWQpKSB7XG4gICAgICAgIHJldHVybiBub29wJDI7XG4gICAgfVxuICAgIHJldHVybiAoc2VsZWN0ZWRSYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBpc1JhbmdlQ29tcGxldGUgPSBpc1ByZXNlbnQoc2VsZWN0ZWRSYW5nZSkgJiYgaXNQcmVzZW50KHNlbGVjdGVkUmFuZ2Uuc3RhcnQpICYmIGlzUHJlc2VudChzZWxlY3RlZFJhbmdlLmVuZCk7XG4gICAgICAgIGlmICghaXNSYW5nZUNvbXBsZXRlIHx8IHNlbGVjdGVkUmFuZ2Uuc3RhcnQgPiBzZWxlY3RlZFJhbmdlLmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzYWJsZWREYXRlcyA9IGRpc2FibGVkRGF0ZXNJblJhbmdlKHNlbGVjdGVkUmFuZ2Uuc3RhcnQsIHNlbGVjdGVkUmFuZ2UuZW5kLCBpc0RhdGVEaXNhYmxlZCk7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge1xuICAgICAgICAgICAgZGlzYWJsZWREYXRlc0luUmFuZ2U6IGRpc2FibGVkRGF0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkRGF0ZXMubGVuZ3RoID8gZXJyb3IgOiBudWxsO1xuICAgIH07XG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1mb3J3YXJkLXJlZiAqL1xuY29uc3QgQk9UVE9NX1ZJRVdfRE9DX0xJTkskMSA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLWJvdHRvbXZpZXcnO1xuY29uc3QgVE9QX1ZJRVdfRE9DX0xJTkskMSA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLXRvcHZpZXcnO1xuY29uc3QgTUlOX0RPQ19MSU5LJDMgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy1taW4nO1xuY29uc3QgTUFYX0RPQ19MSU5LJDMgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy1tYXgnO1xuY29uc3QgVkFMVUVfRE9DX0xJTkskNSA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2NhbGVuZGFyLyN0b2MtdXNpbmctd2l0aC1qc29uJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBSQU5HRV9DQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCkgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBSQU5HRV9DQUxFTkRBUl9SQU5HRV9WQUxJREFUT1JTID0ge1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnQpIC8vdHNsaW50OmRpc2FibGUtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbn07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIE11bHRpVmlld0NhbGVuZGFyIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLW11bHRpdmlld2NhbGVuZGFyPjwva2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoYnVzLCBlbGVtZW50LCBsb2NhbGl6YXRpb24sIG5hdmlnYXRvciwgcmVuZGVyZXIsIGNkciwgem9uZSwgZGlzYWJsZWREYXRlc1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLm5hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZSA9IGRpc2FibGVkRGF0ZXNTZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pZCA9IGd1aWQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gbWluIG9yIG1heCB2YWxpZGF0b3JzIGFyZSBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYW5nZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yIGZvciBkaXNhYmxlZFxuICAgICAgICAgKiBkYXRlIHJhbmdlcyBpcyBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfbXVsdGl2aWV3Y2FsZW5kYXIgJX0jdG9jLXZhbGlkYXRpb24pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgZGlzYWJsZWRgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgICAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfbXVsdGl2aWV3Y2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHRhYmluZGV4YCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIuIEJhc2VkIG9uIHRoZVxuICAgICAgICAgKiBbSFRNTCBgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBiZWhhdmlvcixcbiAgICAgICAgICogaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZm9jdXNhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBhY3RpdmUgdmlldyB0aGF0IHRoZSBDYWxlbmRhciBpbml0aWFsbHkgcmVuZGVyc1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFjdGl2ZXZpZXdfbXVsdGl2aWV3Y2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIGFjdGl2ZSB2aWV3IGlzIGBtb250aGAuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gWW91IGhhdmUgdG8gc2V0IGBhY3RpdmVWaWV3YCB3aXRoaW4gdGhlIGB0b3BWaWV3YC1gYm90dG9tVmlld2AgcmFuZ2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0ubW9udGhdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgYm90dG9tbW9zdCB2aWV3LCB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtcGFydGlhbC1kYXRlcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3R0b21WaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLm1vbnRoXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHRvcG1vc3QgdmlldywgdG8gd2hpY2ggdGhlIHVzZXIgY2FuIG5hdmlnYXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50b3BWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLmNlbnR1cnldO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSB3ZWVrIG51bWJlciBjb2x1bW4gaW4gdGhlIGBtb250aGAgdmlld1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHdlZWtudW1jb2x1bW5fbXVsdGl2aWV3Y2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud2Vla051bWJlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgdmlld3NgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgICAgICogZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIG1vbnRocy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmlld3MgPSAyO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgYWN0aXZlIHZpZXcgaXMgY2hhbmdlZFxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfbXVsdGl2aWV3Y2FsZW5kYXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiBhIHZpZXcgY2VsbCBpcyBlbnRlcmVkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNlbGxFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gYSB2aWV3IGNlbGwgaXMgbGVhdmVkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNlbGxMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2VsbFVJRCA9IGd1aWQoKTtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUHJldkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc05leHREaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJldlZpZXcgPSBBY3Rpb24uUHJldlZpZXc7XG4gICAgICAgIHRoaXMubmV4dFZpZXcgPSBBY3Rpb24uTmV4dFZpZXc7XG4gICAgICAgIHRoaXMuX21pbiA9IG5ldyBEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgdGhpcy5fbWF4ID0gbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkRGF0ZSA9IGdldFRvZGF5KCk7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gbm9vcDtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMubWluVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGVGbiA9IG5vb3A7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKCkgPT4geyB9KTtcbiAgICAgICAgdGhpcy5zZXRDbGFzc2VzKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGZvY3VzZWREYXRlYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgZm9jdXNlZCBkYXRlIG9mIHRoZSBjb21wb25lbnRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1mb2N1c2VkLWRhdGVzKSkuXG4gICAgICpcbiAgICAgKiA+IElmIHRoZSBDYWxlbmRhciBpcyBvdXQgb2YgdGhlIG1pbiBvciBtYXggcmFuZ2UsIGl0IG5vcm1hbGl6ZXMgdGhlIGRlZmluZWQgYGZvY3VzZWREYXRlYC5cbiAgICAgKi9cbiAgICBzZXQgZm9jdXNlZERhdGUoZm9jdXNlZERhdGUpIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZERhdGUgPSBmb2N1c2VkRGF0ZSB8fCBnZXRUb2RheSgpO1xuICAgIH1cbiAgICBnZXQgZm9jdXNlZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb2N1c2VkRGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBgbWluYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgbWluaW11bSBhbGxvd2VkIGRhdGUgdmFsdWUuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBtaW5gIHZhbHVlIGlzIGAxOTAwLTEtMWAuXG4gICAgICovXG4gICAgc2V0IG1pbihtaW4pIHtcbiAgICAgICAgdGhpcy5fbWluID0gbWluIHx8IG5ldyBEYXRlKE1JTl9EQVRFKTtcbiAgICB9XG4gICAgZ2V0IG1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBgbWF4YCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgbWF4aW11bSBhbGxvd2VkIGRhdGUgdmFsdWUuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBtYXhgIHZhbHVlIGlzIGAyMDk5LTEyLTMxYC5cbiAgICAgKi9cbiAgICBzZXQgbWF4KG1heCkge1xuICAgICAgICB0aGlzLl9tYXggPSBtYXggfHwgbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgIH1cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB2YWx1ZWAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZCBkZWZpbmVzIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogPiBUaGUgYHZhbHVlYCBoYXMgdG8gYmUgYSB2YWxpZFxuICAgICAqIFtKYXZhU2NyaXB0IGBEYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZSkgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZShjYW5kaWRhdGUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZShjYW5kaWRhdGUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGF0ZXMgb2YgdGhlIE11bHRpVmlld0NhbGVuZGFyIHRoYXQgd2lsbCBiZSBkaXNhYmxlZFxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfbXVsdGl2aWV3Y2FsZW5kYXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmluaXRpYWxpemUodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBzZWxlY3Rpb25SYW5nZWAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZFxuICAgICAqIGRlZmluZXMgdGhlIHNlbGVjdGlvbiByYW5nZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2Mtc2VsZWN0aW9uLXJhbmdlKSkuXG4gICAgICovXG4gICAgc2V0IHNlbGVjdGlvblJhbmdlKHJhbmdlJCQxKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlID0gcmFuZ2UkJDE7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkRGF0ZXNSYW5nZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2VsZWN0aW9uUmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25SYW5nZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBjZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBtb250aENlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLm1vbnRoQ2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgeWVhckNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnllYXJDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBkZWNhZGVDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5kZWNhZGVDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBjZW50dXJ5Q2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuY2VudHVyeUNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHdlZWtOdW1iZXJUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLndlZWtOdW1iZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIGdldCBhY3RpdmVWaWV3RW51bSgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVmlldyA9IENhbGVuZGFyVmlld0VudW1bdGhpcy5hY3RpdmVWaWV3XTtcbiAgICAgICAgcmV0dXJuIGFjdGl2ZVZpZXcgPCB0aGlzLmJvdHRvbVZpZXdFbnVtID8gdGhpcy5ib3R0b21WaWV3RW51bSA6IGFjdGl2ZVZpZXc7XG4gICAgfVxuICAgIGdldCBib3R0b21WaWV3RW51bSgpIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyVmlld0VudW1bdGhpcy5ib3R0b21WaWV3XTtcbiAgICB9XG4gICAgZ2V0IHRvcFZpZXdFbnVtKCkge1xuICAgICAgICByZXR1cm4gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLnRvcFZpZXddO1xuICAgIH1cbiAgICBnZXQgd2lkZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cbiAgICBnZXQgd2lkZ2V0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuICdncmlkJztcbiAgICB9XG4gICAgZ2V0IGNhbGVuZGFyVGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gdW5kZWZpbmVkIDogdGhpcy50YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IGFyaWFEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBhcmlhQWN0aXZlZGVzY2VuZGFudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbFVJRCArIHRoaXMuZm9jdXNlZERhdGUuZ2V0VGltZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgLy9lbnN1cmUgdGhhdCBob3ZlcmVkIGlzIGFsc28gbm90IGFjdGl2ZVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU1vdXNlZG93bihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudCkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBkYXRlSW5SYW5nZSh0aGlzLm5hdmlnYXRvci5tb3ZlKHRoaXMuZm9jdXNlZERhdGUsIHRoaXMubmF2aWdhdG9yLmFjdGlvbihldmVudCksIHRoaXMuYWN0aXZlVmlld0VudW0pLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmZvY3VzZWREYXRlLCBjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGNhbmRpZGF0ZTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGVudGVyKCkge1xuICAgICAgICB0aGlzLmhhbmRsZURhdGVDaGFuZ2UodGhpcy5mb2N1c2VkRGF0ZSk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldE1lc3NhZ2VzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZXRNZXNzYWdlcygpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5idXMudmlld0NoYW5nZWQuc3Vic2NyaWJlKCh7IHZpZXcgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVt2aWV3XTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZS5lbWl0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblN0YXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnZlcmlmeUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5idXMuY29uZmlndXJlKHRoaXMuYm90dG9tVmlld0VudW0sIHRoaXMudG9wVmlld0VudW0pO1xuICAgICAgICBjb25zdCB1c2VWYWx1ZSA9IGhhc0V4aXN0aW5nVmFsdWUoY2hhbmdlcywgJ3ZhbHVlJykgJiYgIWhhc0V4aXN0aW5nVmFsdWUoY2hhbmdlcywgJ2ZvY3VzZWREYXRlJyk7XG4gICAgICAgIGNvbnN0IGZvY3VzZWREYXRlID0gZGF0ZUluUmFuZ2UoY2xvbmVEYXRlKHVzZVZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMuZm9jdXNlZERhdGUpLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gIWlzRXF1YWwodGhpcy5mb2N1c2VkRGF0ZSwgZm9jdXNlZERhdGUpID8gZm9jdXNlZERhdGUgOiB0aGlzLmZvY3VzZWREYXRlO1xuICAgICAgICBpZiAoY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5yYW5nZVZhbGlkYXRpb24gfHwgY2hhbmdlcy5kaXNhYmxlZERhdGVzIHx8IGNoYW5nZXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtaW5WYWxpZGF0b3IodGhpcy5taW4pIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWF4VmFsaWRhdG9yKHRoaXMubWF4KSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNSYW5nZVZhbGlkYXRlRm4gPSB0aGlzLmRpc2FibGVkRGF0ZXNSYW5nZVZhbGlkYXRpb24gPyBkaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0b3IodGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLmZvY3VzZWREYXRlIHx8IGNoYW5nZXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCdXR0b25TdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tZXNzYWdlc1RpbWVvdXQpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIGhvc3QgZWxlbWVudCBvZiB0aGUgQ2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJtdWx0aXZpZXdjYWxlbmRhci5mb2N1cygpXCI+Rm9jdXMgY2FsZW5kYXI8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLW11bHRpdmlld2NhbGVuZGFyICNtdWx0aXZpZXdjYWxlbmRhcj48L2tlbmRvLW11bHRpdmlld2NhbGVuZGFyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIENhbGVuZGFyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZURhdGVDaGFuZ2UoY2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNhbk5hdmlnYXRlRG93biA9IHRoaXMuYnVzLmNhbk1vdmVEb3duKHRoaXMuYWN0aXZlVmlld0VudW0pO1xuICAgICAgICBjb25zdCBpc1NhbWVEYXRlID0gIWNhbk5hdmlnYXRlRG93biAmJiBpc0VxdWFsKGNhbmRpZGF0ZSwgdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKSB8fCB0aGlzLmZvY3VzZWREYXRlO1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCBpc1NhbWVEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbk5hdmlnYXRlRG93bikge1xuICAgICAgICAgICAgdGhpcy5idXMubW92ZURvd24odGhpcy5hY3RpdmVWaWV3RW51bSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmlzRGF0ZURpc2FibGVkKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZShjYW5kaWRhdGUpKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjbG9uZURhdGUoY2FuZGlkYXRlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoY2FuZGlkYXRlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGRhdGVJblJhbmdlKGNsb25lRGF0ZShjYW5kaWRhdGUpIHx8IHRoaXMuZm9jdXNlZERhdGUsIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZShjb250cm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pblZhbGlkYXRlRm4oY29udHJvbCkgfHwgdGhpcy5tYXhWYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGlvblJhbmdlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgYWN0aXZlQ2VsbFRlbXBsYXRlKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWN0aXZlVmlld0VudW0pIHtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5tb250aDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aENlbGxUZW1wbGF0ZSB8fCB0aGlzLmNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS55ZWFyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlld0VudW0uZGVjYWRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2FkZUNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbnR1cnlDZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZShhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IHRoaXMudmlld0xpc3QubmF2aWdhdGUoYWN0aW9uKTtcbiAgICAgICAgdGhpcy51cGRhdGVCdXR0b25TdGF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZW1pdENlbGxFdmVudChlbWl0dGVyLCBhcmdzKSB7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnMoZW1pdHRlcikpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldENsYXNzZXMoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXdpZGdldCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLWNhbGVuZGFyJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stY2FsZW5kYXItaW5maW5pdGUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnay1jYWxlbmRhci1yYW5nZScpO1xuICAgIH1cbiAgICBzZXRNZXNzYWdlcygpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1lc3NhZ2VzVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldkJ1dHRvblRpdGxlID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdwcmV2QnV0dG9uVGl0bGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRCdXR0b25UaXRsZSA9IHRoaXMubG9jYWxpemF0aW9uLmdldCgnbmV4dEJ1dHRvblRpdGxlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2ZXJpZnlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1heCB2YWx1ZSBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gdGhlIG1pbi4gU2VlICR7TUlOX0RPQ19MSU5LJDN9IGFuZCAke01BWF9ET0NfTElOSyQzfS5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ib3R0b21WaWV3RW51bSA+IHRoaXMudG9wVmlld0VudW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHRvcFZpZXcgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBib3R0b21WaWV3LiBTZWUgJHtCT1RUT01fVklFV19ET0NfTElOSyQxfSBhbmQgJHtUT1BfVklFV19ET0NfTElOSyQxfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2ZXJpZnlWYWx1ZShjYW5kaWRhdGUpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5kaWRhdGUgJiYgIShjYW5kaWRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ3ZhbHVlJyBzaG91bGQgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGUgaW5zdGFuY2UuIENoZWNrICR7VkFMVUVfRE9DX0xJTkskNX0gZm9yIHBvc3NpYmxlIHJlc29sdXRpb24uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQnV0dG9uU3RhdGUoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1ByZXZEaXNhYmxlZCA9ICF0aGlzLnZpZXdMaXN0LmNhbk5hdmlnYXRlKHRoaXMucHJldlZpZXcpO1xuICAgICAgICAgICAgdGhpcy5pc05leHREaXNhYmxlZCA9ICF0aGlzLnZpZXdMaXN0LmNhbk5hdmlnYXRlKHRoaXMubmV4dFZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbk11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kby1tdWx0aXZpZXdjYWxlbmRhcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIEJ1c1ZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBSQU5HRV9DQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgICAgICAgICAgUkFOR0VfQ0FMRU5EQVJfUkFOR0VfVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRGlzYWJsZWREYXRlc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5tdWx0aXZpZXdjYWxlbmRhcidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRhaW5lciBrZW5kb011bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgaTE4bi10b2RheT1cImtlbmRvLm11bHRpdmlld2NhbGVuZGFyLnRvZGF5fFRoZSBsYWJlbCBmb3IgdGhlIHRvZGF5IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyXCJcbiAgICAgICAgdG9kYXk9XCJUT0RBWVwiXG5cbiAgICAgICAgaTE4bi1wcmV2QnV0dG9uVGl0bGU9XCJrZW5kby5tdWx0aXZpZXdjYWxlbmRhci5wcmV2QnV0dG9uVGl0bGV8VGhlIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgYnV0dG9uIGluIHRoZSBNdWx0aXZpZXcgY2FsZW5kYXJcIlxuICAgICAgICBwcmV2QnV0dG9uVGl0bGU9XCJOYXZpZ2F0ZSB0byBwcmV2aW91cyB2aWV3XCJcblxuICAgICAgICBpMThuLW5leHRCdXR0b25UaXRsZT1cImtlbmRvLm11bHRpdmlld2NhbGVuZGFyLm5leHRCdXR0b25UaXRsZXxUaGUgbGFiZWwgZm9yIHRoZSBuZXh0IGJ1dHRvbiBpbiB0aGUgTXVsdGl2aWV3IGNhbGVuZGFyXCJcbiAgICAgICAgbmV4dEJ1dHRvblRpdGxlPVwiTmF2aWdhdGUgdG8gbmV4dCB2aWV3XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstcHJldi12aWV3XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNQcmV2RGlzYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNQcmV2RGlzYWJsZWRcIlxuICAgICAgICBbdGl0bGVdPVwicHJldkJ1dHRvblRpdGxlXCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlKHByZXZWaWV3KVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktYXJyb3ctY2hldnJvbi1sZWZ0XCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxrZW5kby1jYWxlbmRhci1ob3Jpem9udGFsXG4gICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdFbnVtXCJcbiAgICAgICAgW2lzQWN0aXZlXT1cImlzQWN0aXZlIHx8IGlzSG92ZXJlZFwiXG4gICAgICAgIFtjZWxsVGVtcGxhdGVSZWZdPVwiYWN0aXZlQ2VsbFRlbXBsYXRlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2hlYWRlclRpdGxlVGVtcGxhdGVSZWZdPVwiaGVhZGVyVGl0bGVUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbd2Vla051bWJlclRlbXBsYXRlUmVmXT1cIndlZWtOdW1iZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbY2VsbFVJRF09XCJjZWxsVUlEXCJcbiAgICAgICAgW3ZpZXdzXT1cInZpZXdzXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtmb2N1c2VkRGF0ZV09XCJmb2N1c2VkRGF0ZVwiXG4gICAgICAgIFt3ZWVrTnVtYmVyXT1cIndlZWtOdW1iZXJcIlxuICAgICAgICBbYWN0aXZlUmFuZ2VFbmRdPVwiYWN0aXZlUmFuZ2VFbmRcIlxuICAgICAgICBbc2VsZWN0aW9uUmFuZ2VdPVwic2VsZWN0aW9uUmFuZ2VcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNlbGxFbnRlcik9XCJlbWl0Q2VsbEV2ZW50KGNlbGxFbnRlciwgJGV2ZW50KVwiXG4gICAgICAgIChjZWxsTGVhdmUpPVwiZW1pdENlbGxFdmVudChjZWxsTGVhdmUsICRldmVudClcIlxuICAgID5cbiAgICA8L2tlbmRvLWNhbGVuZGFyLWhvcml6b250YWw+XG4gICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstbmV4dC12aWV3XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNOZXh0RGlzYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXh0RGlzYWJsZWRcIlxuICAgICAgICBbdGl0bGVdPVwibmV4dEJ1dHRvblRpdGxlXCJcbiAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlKG5leHRWaWV3KVwiXG4gICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktYXJyb3ctY2hldnJvbi1yaWdodFwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5NdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJ1c1ZpZXdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBEaXNhYmxlZERhdGVzU2VydmljZSB9XG5dO1xuTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYm90dG9tVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wVmlldzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlUmFuZ2VFbmQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGlvblJhbmdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aWV3czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlVmlld0NoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxFbnRlcjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxMZWF2ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2NlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBtb250aENlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbW9udGhDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHllYXJDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3llYXJDZWxsVGVtcGxhdGUnLF0gfV0sXG4gICAgZGVjYWRlQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2RlY2FkZUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgY2VudHVyeUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VudHVyeUNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1dlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ3dlZWtOdW1iZXJUZW1wbGF0ZScsXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnaGVhZGVyVGl0bGVUZW1wbGF0ZScsXSB9XSxcbiAgICB2aWV3TGlzdDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LF0gfV0sXG4gICAgd2lkZ2V0SWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuaWQnLF0gfV0sXG4gICAgd2lkZ2V0Um9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGNhbGVuZGFyVGFiSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGFiaW5kZXgnLF0gfV0sXG4gICAgYXJpYURpc2FibGVkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtZGlzYWJsZWQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dLFxuICAgIGFyaWFBY3RpdmVkZXNjZW5kYW50OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudCcsXSB9XSxcbiAgICBoYW5kbGVCbHVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFtcImJsdXJcIixdIH1dLFxuICAgIGhhbmRsZUZvY3VzOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFtcImZvY3VzXCIsXSB9XSxcbiAgICBoYW5kbGVNb3VzZUVudGVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFtcIm1vdXNlZW50ZXJcIixdIH1dLFxuICAgIGhhbmRsZU1vdXNlTGVhdmU6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wibW91c2VsZWF2ZVwiLF0gfV0sXG4gICAgaGFuZGxlTW91c2Vkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFtcIm1vdXNlZG93blwiLCBbJyRldmVudCddLF0gfV0sXG4gICAgaGFuZGxlQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wiY2xpY2tcIixdIH1dLFxuICAgIGtleWRvd246IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0sXSB9XSxcbiAgICBlbnRlcjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbXCJrZXlkb3duLmVudGVyXCIsXSB9XVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCByZW5kZXJzIHRoZSBjb250ZW50IG9mIHRoZSBEYXRlUmFuZ2UgUG9wdXAuIFRvIGRlZmluZSB0aGUgY2VsbCB0ZW1wbGF0ZSwgbmVzdCBhblxuICogYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9SYW5nZVBvcHVwVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuXG4gKi9cbmNsYXNzIERhdGVSYW5nZVBvcHVwVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5EYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlUmFuZ2VQb3B1cFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVJhbmdlUG9wdXBUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbmNvbnN0IGlzQWN0aXZlID0gKGNtcCkgPT4gKGNtcCAmJiBjbXAuaXNBY3RpdmUpIHx8IGZhbHNlO1xuY29uc3QgaGFzQWN0aXZlQ29udGVudCA9IChwb3B1cCkgPT4gcG9wdXAgJiYgcG9wdXAuaGFzQWN0aXZlQ29udGVudCgpO1xuLyoqXG4gKiBBIHNlcnZpY2UgdGhhdCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGNvbXBvbmVudHMgdGhhdCBhcmUgcGxhY2VkIGluc2lkZSB0aGUgRGF0ZVJhbmdlQ29tcG9uZW50LlxuICogRm9yIGV4YW1wbGUsIHRoZSBzdGFydCBhbmQgZW5kIGBEYXRlSW5wdXRgIGFuZCBgRGF0ZVJhbmdlUG9wdXBgIGNvbXBvbmVudHMuXG4gKi9cbmNsYXNzIERhdGVSYW5nZVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gT2JzZXJ2YWJsZSBpbnN0YW5jZSB0aGF0IG5vdGlmaWVzIHdoZW4gdGhlIGBhY3RpdmVSYW5nZUVuZGAgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlUmFuZ2VFbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIE9ic2VydmFibGUgaW5zdGFuY2UgdGhhdCBub3RpZmllcyB3aGVuIHRoZSBgZm9jdXNlZERhdGVgIGlzIGNoYW5nZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBPYnNlcnZhYmxlIGluc3RhbmNlIHRoYXQgbm90aWZpZXMgd2hlbiB0aGUgZW5kIGBEYXRlSW5wdXRgIGNvbXBvbmVudCBpcyBjaGFuZ2VkLlxuICAgICAgICAgKiBGb3IgZXhhbXBsZSwgd2hlbiBhIG5ldyBlbmQgYERhdGVJbnB1dGAgaXMgYXR0YWNoZWQgb3Igd2hlbiB0aGUgb2xkIG9uZSBpcyBkZXRhY2hlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZW5kSW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIE9ic2VydmFibGUgaW5zdGFuY2UgdGhhdCBub3RpZmllcyB3aGVuIHRoZSBzdGFydCBgRGF0ZUlucHV0YCBjb21wb25lbnQgaXMgY2hhbmdlZC5cbiAgICAgICAgICogRm9yIGV4YW1wbGUsIHdoZW4gYSBuZXcgc3RhcnQgYERhdGVJbnB1dGAgaXMgYXR0YWNoZWQgb3IgdGhlIG9sZCBvbmUgaXMgZGV0YWNoZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXJ0SW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIE9ic2VydmFibGUgaW5zdGFuY2UgdGhhdCBub3RpZmllcyB3aGVuIHRoZSBgRGF0ZVJhbmdlUG9wdXBgIGNvbXBvbmVudCBpcyBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VQb3B1cCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gT2JzZXJ2YWJsZSBpbnN0YW5jZSB0aGF0IG5vdGlmaWVzIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmFuZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdChFTVBUWV9TRUxFQ1RJT05SQU5HRSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgYGFjdGl2ZVJhbmdlRW5kYCB2YWx1ZS5cbiAgICAgKi9cbiAgICBnZXQgYWN0aXZlUmFuZ2VFbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVJhbmdlRW5kJC52YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBgZm9jdXNlZERhdGVgIHZhbHVlLlxuICAgICAqL1xuICAgIGdldCBmb2N1c2VkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZERhdGUkLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbWluYCByYW5nZSB2YWx1ZS5cbiAgICAgKiBUaGUgYG1pbmAgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGBzdGFydGAgRGF0ZUlucHV0IHZhbHVlIG9yIHRoZSBgbWluYCB2YWx1ZSBvZiB0aGUgQ2FsZW5kYXIuXG4gICAgICovXG4gICAgZ2V0IG1pbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0SW5wdXQkLnZhbHVlIHx8IHt9KS5taW4gfHwgbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYG1heGAgcmFuZ2UgdmFsdWUuXG4gICAgICogVGhlIGBtYXhgIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBgZW5kYCBEYXRlSW5wdXQgdmFsdWUgb3IgdGhlIGBtYXhgIHZhbHVlIG9mIHRoZSBDYWxlbmRhci5cbiAgICAgKi9cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZW5kSW5wdXQkLnZhbHVlIHx8IHt9KS5tYXggfHwgbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBgc2VsZWN0aW9uUmFuZ2VgIHZhbHVlLlxuICAgICAqL1xuICAgIGdldCBzZWxlY3Rpb25SYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2UkLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZXMgdGhlIHJlZ2lzdGVyZWQgYERhdGVSYW5nZVBvcHVwYCBjb21wb25lbnQuXG4gICAgICogVGhlIG1ldGhvZCBvcGVucyB0aGUgcG9wdXAgYW5kIGZvY3VzZXMgdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIGFjdGl2YXRlUG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVSYW5nZVBvcHVwID0gdGhpcy5kYXRlUmFuZ2VQb3B1cCQudmFsdWU7XG4gICAgICAgIGlmICghZGF0ZVJhbmdlUG9wdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRlUmFuZ2VQb3B1cC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWFjdGl2YXRlcyB0aGUgcmVnaXN0ZXJlZCBgRGF0ZVJhbmdlUG9wdXBgIGNvbXBvbmVudC5cbiAgICAgKiBUaGUgbWV0aG9kIGNsb3NlcyB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZGVhY3RpdmF0ZVBvcHVwKCkge1xuICAgICAgICBjb25zdCBkYXRlUmFuZ2VQb3B1cCA9IHRoaXMuZGF0ZVJhbmdlUG9wdXAkLnZhbHVlO1xuICAgICAgICBpZiAoIShkYXRlUmFuZ2VQb3B1cCAmJiBkYXRlUmFuZ2VQb3B1cC5zaG93KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVSYW5nZVBvcHVwLnNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogRGVhY3RpdmF0ZXMgdGhlIHJlZ2lzdGVyZWQgYERhdGVSYW5nZVBvcHVwYCBjb21wb25lbnQgYW5kIGZpcmVzIHRoZSBgY2FuY2VsYCBldmVudC5cbiAgICAgKiBUaGUgbWV0aG9kIGNsb3NlcyB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgY2FuY2VsUG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVSYW5nZVBvcHVwID0gdGhpcy5kYXRlUmFuZ2VQb3B1cCQudmFsdWU7XG4gICAgICAgIGlmICghKGRhdGVSYW5nZVBvcHVwICYmIGRhdGVSYW5nZVBvcHVwLnNob3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZVJhbmdlUG9wdXAuY2FuY2VsUG9wdXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29tcGxldGVzIGFsbCBvYnNlcnZhYmxlcyB0byBtaXRpZ2F0ZSBwb3NzaWJsZSBtZW1vcnkgbGVha3MuXG4gICAgICogQ2FsbHMgdGhlIG1ldGhvZCB3aGVuIGEgY29tcG9uZW50IHRoYXQgdXNlcyBpdCBpcyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSYW5nZUVuZCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VQb3B1cCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5lbmRJbnB1dCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5zdGFydElucHV0JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnJhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGFuIGFjdGl2ZSBjb21wb25lbnQgdGhhdCBpcyBwbGFjZWQgaW5zaWRlIHRoZSBgRGF0ZVJhbmdlQ29tcG9uZW50YCBpcyBkZXRlY3RlZC5cbiAgICAgKiBGb3IgZXhhbXBsZSwgdGhlIG9wZW5lZCBwb3B1cCBvciB0aGUgZm9jdXNlZCBEYXRlSW5wdXQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW4gYWN0aXZlIGNvbXBvbmVudCBpcyBwcmVzZW50LlxuICAgICAqL1xuICAgIGhhc0FjdGl2ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLmRhdGVSYW5nZVBvcHVwJC52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNQb3B1cCA9IGlzQWN0aXZlKHBvcHVwKTtcbiAgICAgICAgY29uc3QgaXNTdGFydCA9IGlzQWN0aXZlKHRoaXMuc3RhcnRJbnB1dCQudmFsdWUpO1xuICAgICAgICBjb25zdCBpc0VuZCA9IGlzQWN0aXZlKHRoaXMuZW5kSW5wdXQkLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzUG9wdXAgfHwgaXNTdGFydCB8fCBpc0VuZCB8fCBoYXNBY3RpdmVDb250ZW50KHBvcHVwKSB8fCBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbmV3IHN0YXJ0IGBEYXRlSW5wdXRgIGNvbXBvbmVudC4gTm90aWZpZXMgYWxsIGBzdGFydElucHV0JGAgbGlzdGVuZXJzLlxuICAgICAqL1xuICAgIHJlZ2lzdGVyU3RhcnRJbnB1dChzdGFydElucHV0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRJbnB1dCQubmV4dChzdGFydElucHV0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbmV3IGVuZCBgRGF0ZUlucHV0YCBjb21wb25lbnQuIE5vdGlmaWVzIGFsbCBgZW5kSW5wdXQkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgcmVnaXN0ZXJFbmRJbnB1dChlbmRJbnB1dCkge1xuICAgICAgICB0aGlzLmVuZElucHV0JC5uZXh0KGVuZElucHV0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgbmV3IGBEYXRlUmFuZ2VQb3B1cGAgY29tcG9uZW50LiBOb3RpZmllcyBhbGwgYGRhdGVSYW5nZVBvcHVwJGAgbGlzdGVuZXJzLlxuICAgICAqL1xuICAgIHJlZ2lzdGVyUG9wdXAoZGF0ZVJhbmdlUG9wdXApIHtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VQb3B1cCQubmV4dChkYXRlUmFuZ2VQb3B1cCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGBhY3RpdmVSYW5nZUVuZGAgdmFsdWUuIE5vdGlmaWVzIGFsbCBgYWN0aXZlUmFuZ2VFbmQkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgc2V0QWN0aXZlUmFuZ2VFbmQoYWN0aXZlUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFhY3RpdmVSYW5nZSB8fCB0aGlzLmFjdGl2ZVJhbmdlRW5kID09PSBhY3RpdmVSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlUmFuZ2VFbmQkLm5leHQoYWN0aXZlUmFuZ2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBmb2N1c2VkIGRhdGUuIE5vdGlmaWVzIGFsbCBgZm9jdXNlZERhdGUkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgc2V0Rm9jdXNlZERhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy5mb2N1c2VkRGF0ZSQudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3Rpb24gcmFuZ2UuIE5vdGlmaWVzIGFsbCBgcmFuZ2UkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgc2V0UmFuZ2UocmFuZ2UgPSBFTVBUWV9TRUxFQ1RJT05SQU5HRSkge1xuICAgICAgICB0aGlzLnJhbmdlJC5uZXh0KHJhbmdlKTtcbiAgICB9XG59XG5EYXRlUmFuZ2VTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIERhdGVSYW5nZVBvcHVwIGNvbXBvbmVudCBmb3IgQW5ndWxhci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IERhdGVJbnB1dHNNb2R1bGUsIERhdGVSYW5nZVNlcnZpY2UgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kYXRlaW5wdXRzJztcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiBwcm92aWRlcnM6IFtEYXRlUmFuZ2VTZXJ2aWNlXSxcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGJ1dHRvbiAjYW5jaG9yIChjbGljayk9XCJwb3B1cC50b2dnbGUoKVwiPlRvZ2dsZTwvYnV0dG9uPlxuICogIDxrZW5kby1kYXRlcmFuZ2UtcG9wdXAgW2FuY2hvcl09XCJhbmNob3JcIiAjcG9wdXA+PC9rZW5kby1kYXRlcmFuZ2UtcG9wdXA+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgRGF0ZVJhbmdlUG9wdXBDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgZGF0ZVJhbmdlU2VydmljZSwgem9uZSwgcnRsKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UgPSBkYXRlUmFuZ2VTZXJ2aWNlO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLnJ0bCA9IHJ0bDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnRyb2xzIHRoZSBwb3B1cCBhbmltYXRpb24uXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBvcGVuaW5nIGFuZCBjbG9zaW5nIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbnRyb2xsaW5nIHRoZSBwb3B1cCBhbmltYXRpb25zLFxuICAgICAgICAgKiByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbYW5pbWF0aW9uc10oeyUgc2x1ZyBhbmltYXRpb25zX3BvcHVwICV9KS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb25maWd1cmVzIHRoZSBjb2xsaXNpb24gYmVoYXZpb3Igb2YgdGhlIHBvcHVwLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIGFydGljbGUgb25cbiAgICAgICAgICogW3ZpZXdwb3J0IGJvdW5kYXJ5IGRldGVjdGlvbl0oeyUgc2x1ZyB2aWV3cG9ydGJvdW5kYXJ5ZGV0ZWN0aW9uX3BvcHVwICV9KS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sbGlzaW9uID0geyBob3Jpem9udGFsOiAnZml0JywgdmVydGljYWw6ICdmbGlwJyB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBvcGVuLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIGNsb3NlZC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gY2xvc2UuXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gb3Blbi5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIGNhbGVuZGFyIGVsZW1lbnQgaXMgYmx1cnJlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBjYWxlbmRhciBlbGVtZW50IGlzIGZvY3VzZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGNsb3NlZCBlaXRoZXIgb24gYEVTQ2Aga2V5cHJlc3Mgb3Igb24gbGVhdmluZyB0aGUgdmlld3BvcnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucG9wdXBVSUQgPSBndWlkKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLnBvcHVwU3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKCkgPT4geyB9KTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGFjdGl2ZSBjYWxlbmRhciB0aGF0IGlzIHZpc2libGUgaW4gdGhlIHBvcHVwLlxuICAgICAqXG4gICAgICogPiBXaGVuIHRoZSBwb3B1cCBpcyBjbG9zZWQsIHRoZSBwcm9wZXJ0eSByZXR1cm5zIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgY2FsZW5kYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcjtcbiAgICB9XG4gICAgc2V0IGNhbGVuZGFyKGNhbGVuZGFyKSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRm9jdXNCbHVyKGNhbGVuZGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiB0aGUgb3BlbmVkIGNhbGVuZGFyIGlzIGFjdGl2ZSwgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICovXG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhciAmJiB0aGlzLmNhbGVuZGFyLmlzQWN0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIG9yIHNldHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzZXQgc2hvdyhzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93ID09PSBzaG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBpZiAoc2hvdykge1xuICAgICAgICAgICAgdGhpcy5vcGVuLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b2dnbGUoc2hvdyk7XG4gICAgfVxuICAgIGdldCBzaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdztcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5yZWdpc3RlclBvcHVwKHRoaXMpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNvbnRlbnRDYWxlbmRhci5jaGFuZ2VzLnN1YnNjcmliZSgoY2hhbmdlcykgPT4gdGhpcy5jYWxlbmRhciA9IGNoYW5nZXMuZmlyc3QpKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMudmlld0NhbGVuZGFyLmNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2VzKSA9PiB0aGlzLmNhbGVuZGFyID0gY2hhbmdlcy5maXJzdCkpO1xuICAgICAgICBpZiAoaXNXaW5kb3dBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdibHVyJykuc3Vic2NyaWJlKHRoaXMuaGFuZGxlV2luZG93Qmx1ci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVBvcHVwKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2YXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYmx1clN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ibHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogIE9wZW5zIHRoZSBwb3B1cCBjb21wb25lbnQgYW5kIGZvY3VzZXMgdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIGFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5zaG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVN1YnNjcmlwdGlvbiA9IG1lcmdlKHRoaXMuY29udGVudENhbGVuZGFyLmNoYW5nZXMsIHRoaXMudmlld0NhbGVuZGFyLmNoYW5nZXMpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKGNoYW5nZXMgPT4gY2hhbmdlcyAmJiBjaGFuZ2VzLmZpcnN0KSwgbWFwKGNoYW5nZXMgPT4gY2hhbmdlcy5maXJzdCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY2FsZW5kYXIpID0+IHNldFRpbWVvdXQoKCkgPT4gY2FsZW5kYXIuZm9jdXMoKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogIEZvY3VzZXMgdGhlIGNhbGVuZGFyIChpZiBhdmFpbGFibGUpLlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGZvY3VzZWQgZWxlbWVudCBpZHMgcGxhY2VkIGluc2lkZSB0aGUgcG9wdXAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW47XG4gICAgICovXG4gICAgaGFzQWN0aXZlQ29udGVudCgpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkgfHwgIXRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBvcHVwLlxuICAgICAqIElmIHlvdSB1c2UgdGhlIGB0b2dnbGVgIG1ldGhvZCB0byBzaG93IG9yIGhpZGUgdGhlIHBvcHVwLFxuICAgICAqIHRoZSBgb3BlbmAgYW5kIGBjbG9zZWAgZXZlbnRzIGRvIG5vdCBmaXJlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNob3cgVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUoc2hvdykge1xuICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZSgoc2hvdyA9PT0gdW5kZWZpbmVkKSA/ICF0aGlzLnNob3cgOiBzaG93KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIENsb3NlcyB0aGUgcG9wdXAgYW5kIHRyaWdnZXJzIHRoZSBgY2FuY2VsYCBldmVudC5cbiAgICAgKi9cbiAgICBjYW5jZWxQb3B1cCgpIHtcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG4gICAgaGFuZGxlV2luZG93Qmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMuY2xvc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuc2hvdyA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRSYW5nZSh0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2VsZWN0aW9uUmFuZ2UpO1xuICAgIH1cbiAgICBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgYWx0S2V5LCBrZXlDb2RlIH0gPSBldmVudDtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRXNjYXBlIHx8IChhbHRLZXkgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNhbmNlbFBvcHVwKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN1YnNjcmliZUZvY3VzQmx1cihjYWxlbmRhcikge1xuICAgICAgICBpZiAodGhpcy5ibHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNhbGVuZGFyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IGNhbGVuZGFyLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5ibHVyU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KG5hdGl2ZUVsZW1lbnQsICdibHVyJykuc3Vic2NyaWJlKCgpID0+IHRoaXMub25CbHVyLmVtaXQoKSk7XG4gICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQobmF0aXZlRWxlbWVudCwgJ2ZvY3VzJykuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Gb2N1cy5lbWl0KCkpO1xuICAgIH1cbiAgICBhZGRQb3B1cFN1YnNjcmlwdGlvbnMoLi4uc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLnBvcHVwU3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmlwdGlvbnMubWFwKHMgPT4gdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMuYWRkKHMpKTtcbiAgICB9XG4gICAgZ2V0IF9hcHBlbmRUbygpIHtcbiAgICAgICAgY29uc3QgYXBwZW5kVG8gPSB0aGlzLmFwcGVuZFRvO1xuICAgICAgICBpZiAoIWFwcGVuZFRvIHx8IGFwcGVuZFRvID09PSAncm9vdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvID09PSAnY29tcG9uZW50JyA/IHRoaXMuY29udGFpbmVyIDogYXBwZW5kVG87XG4gICAgfVxuICAgIF90b2dnbGUoc2hvdykge1xuICAgICAgICB0aGlzLl9zaG93ID0gc2hvdztcbiAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Nob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMucnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLnBvcHVwU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgICAgICBhbmNob3I6IHRoaXMuYW5jaG9yLFxuICAgICAgICAgICAgICAgIGFuY2hvckFsaWduOiB0aGlzLmFuY2hvckFsaWduIHx8IHsgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBhbmltYXRlOiB0aGlzLmFuaW1hdGUsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG86IHRoaXMuX2FwcGVuZFRvLFxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbjogdGhpcy5jb2xsaXNpb24sXG4gICAgICAgICAgICAgICAgY29udGVudDogKHRoaXMuY29udGVudFRlbXBsYXRlIHx8IHt9KS50ZW1wbGF0ZVJlZiB8fCB0aGlzLmRlZmF1bHRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgICAgICAgICAgIHBvcHVwQWxpZ246IHRoaXMucG9wdXBBbGlnbiB8fCB7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb25Nb2RlOiAnYWJzb2x1dGUnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgcG9wdXBFbGVtZW50LCBwb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUgfSA9IHRoaXMucG9wdXBSZWY7XG4gICAgICAgICAgICBwb3B1cEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMucG9wdXBVSUQpO1xuICAgICAgICAgICAgdGhpcy5hZGRQb3B1cFN1YnNjcmlwdGlvbnModGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGZyb21FdmVudChwb3B1cEVsZW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKHRoaXMuaGFuZGxlS2V5ZG93bi5iaW5kKHRoaXMpKSksIGZyb21FdmVudChwb3B1cEVsZW1lbnQsICdtb3VzZWxlYXZlJykuc3Vic2NyaWJlKHRoaXMuaGFuZGxlTW91c2VMZWF2ZS5iaW5kKHRoaXMpKSwgcG9wdXBBbmNob3JWaWV3cG9ydExlYXZlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbmNlbFBvcHVwKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXN0cm95UG9wdXAoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5wb3B1cFJlZikpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRGF0ZVJhbmdlUG9wdXBDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLWRhdGVyYW5nZS1wb3B1cCcsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRlcmFuZ2UtcG9wdXAnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gICAgICAgICAgICA8a2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXIga2VuZG9EYXRlUmFuZ2VTZWxlY3Rpb24+PC9rZW5kby1tdWx0aXZpZXdjYWxlbmRhcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVSYW5nZVBvcHVwQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEYXRlUmFuZ2VTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEJvb2xlYW4sIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbUlRMLF0gfV0gfVxuXTtcbkRhdGVSYW5nZVBvcHVwQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9LF0gfV0sXG4gICAgZGVmYXVsdFRlbXBsYXRlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnZGVmYXVsdFRlbXBsYXRlJyxdIH1dLFxuICAgIGNvbnRlbnRUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbRGF0ZVJhbmdlUG9wdXBUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIHZpZXdDYWxlbmRhcjogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnQsXSB9XSxcbiAgICBjb250ZW50Q2FsZW5kYXI6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW011bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50LF0gfV0sXG4gICAgYW5pbWF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYW5jaG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhbmNob3JBbGlnbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXBwZW5kVG86IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbGxpc2lvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBBbGlnbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWFyZ2luOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGVuOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBjYW5jZWw6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBLZW5kbyBVSSBEYXRlUmFuZ2UgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tZGF0ZXJhbmdlPlxuICogICAgICA8a2VuZG8tZGF0ZWlucHV0IGtlbmRvRGF0ZVJhbmdlU3RhcnRJbnB1dCBbKHZhbHVlKV09XCJkYXRlUmFuZ2Uuc3RhcnRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAqICAgICAgPGtlbmRvLWRhdGVpbnB1dCBrZW5kb0RhdGVSYW5nZUVuZElucHV0IFsodmFsdWUpXT1cImRhdGVSYW5nZS5lbmRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAqICA8L2tlbmRvLWRhdGVyYW5nZT5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGVSYW5nZTogYW55ID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgRGF0ZVJhbmdlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2hvd0RlZmF1bHQgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGhhc0NvbnRlbnRQb3B1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFBvcHVwLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zaG93RGVmYXVsdCA9ICF0aGlzLmhhc0NvbnRlbnRQb3B1cDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRlbnRQb3B1cC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0ID0gIXRoaXMuaGFzQ29udGVudFBvcHVwO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkRhdGVSYW5nZUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW0RhdGVSYW5nZVNlcnZpY2VdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGF0ZXJhbmdlJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxrZW5kby1kYXRlcmFuZ2UtcG9wdXAgKm5nSWY9XCJzaG93RGVmYXVsdFwiPjwva2VuZG8tZGF0ZXJhbmdlLXBvcHVwPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkRhdGVSYW5nZUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb250ZW50UG9wdXA6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0RhdGVSYW5nZVBvcHVwQ29tcG9uZW50LF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEYXRlUmFuZ2VJbnB1dCB7XG4gICAgY29uc3RydWN0b3IoYWN0aXZlUmFuZ2VFbmQsIGRhdGVSYW5nZVNlcnZpY2UsIGlucHV0LCBlbGVtZW50LCByZW5kZXJlciwgem9uZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVJhbmdlRW5kID0gYWN0aXZlUmFuZ2VFbmQ7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZSA9IGRhdGVSYW5nZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLm5hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHsgfSk7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZUVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5hY3RpdmVSYW5nZUVuZCA9PT0gdGhpcy5hY3RpdmVSYW5nZUVuZDtcbiAgICB9XG4gICAgZ2V0IHBvcHVwQ2FsZW5kYXJBY3RpdmF0ZWQoKSB7XG4gICAgICAgIGNvbnN0IHBvcHVwID0gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmRhdGVSYW5nZVBvcHVwJC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudChwb3B1cCkgJiYgaXNQcmVzZW50KHBvcHVwLmNhbGVuZGFyKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRSYW5nZSh0aGlzLmdldFJhbmdlKHRoaXMuaW5wdXQudmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBbXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm9uQmx1ci5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZWFjdGl2YXRlKCkpLFxuICAgICAgICAgICAgdGhpcy5pbnB1dC5vbkZvY3VzLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLnBvcHVwQ2FsZW5kYXJBY3RpdmF0ZWQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hY3RpdmF0ZSgpKSxcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWVVcGRhdGUuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudXBkYXRlUmFuZ2UodmFsdWUsICdjaGFuZ2UnKSksXG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UuYWN0aXZlUmFuZ2VFbmQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVDYWxlbmRhck9uRm9jdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZURhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVBY3RpdmVDbGFzcyh0aGlzLmlzQWN0aXZlRW5kKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmRhdGVSYW5nZVBvcHVwJC5zdWJzY3JpYmUocG9wdXAgPT4gdGhpcy5pbml0UG9wdXAocG9wdXApKSxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5yYW5nZSQuc3Vic2NyaWJlKHJhbmdlID0+IHRoaXMudXBkYXRlSW5wdXRWYWx1ZShyYW5nZSkpLFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY2xpY2snKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hY3RpdmF0ZSgpKSxcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLnRvZ2dsZVBvcHVwKGV2ZW50IHx8IHt9KSlcbiAgICAgICAgXS5tYXAocyA9PiB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHMpKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVQb3B1cCgpO1xuICAgIH1cbiAgICBpbml0UG9wdXAocG9wdXApIHtcbiAgICAgICAgaWYgKCFwb3B1cCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZVBvcHVwKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwb3B1cC5hbmNob3IpIHtcbiAgICAgICAgICAgIHBvcHVwLmFuY2hvciA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIFtcbiAgICAgICAgICAgIHBvcHVwLmNhbmNlbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pc0FjdGl2ZUVuZCAmJiB0aGlzLmlucHV0LmZvY3VzKCkpLFxuICAgICAgICAgICAgcG9wdXAub25Gb2N1cy5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVBY3RpdmVDbGFzcyh0aGlzLmlzQWN0aXZlRW5kKSksXG4gICAgICAgICAgICBwb3B1cC5vbkJsdXIuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVhY3RpdmF0ZSgpKVxuICAgICAgICBdLm1hcChzID0+IHRoaXMucG9wdXBTdWJzY3JpcHRpb25zLmFkZChzKSk7XG4gICAgfVxuICAgIHVuc3Vic2NyaWJlUG9wdXAoKSB7XG4gICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgIH1cbiAgICBhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldEFjdGl2ZVJhbmdlRW5kKHRoaXMuYWN0aXZlUmFuZ2VFbmQpO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UuYWN0aXZhdGVQb3B1cCgpO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlKCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSYW5nZSh0aGlzLmlucHV0LnZhbHVlLCAnYmx1cicpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVSYW5nZVNlcnZpY2UuaGFzQWN0aXZlQ29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUFjdGl2ZUNsYXNzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuZGF0ZVJhbmdlU2VydmljZS5kZWFjdGl2YXRlUG9wdXAoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZVJhbmdlKHZhbHVlLCBjb3JyZWN0T24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKHZhbHVlLCBjb3JyZWN0T24pO1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBY3RpdmVEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2V0UmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvZ2dsZVBvcHVwKHsgYWx0S2V5LCBrZXlDb2RlIH0pIHtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UuY2FuY2VsUG9wdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbHRLZXkgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd0Rvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5hY3RpdmF0ZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNBY3RpdmVEYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dC52YWx1ZSAmJiB0aGlzLmlzQWN0aXZlRW5kKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2V0Rm9jdXNlZERhdGUoY2xvbmVEYXRlKHRoaXMuaW5wdXQudmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b2dnbGVBY3RpdmVDbGFzcyhzaG93KSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHNob3cgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJztcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAobmF0aXZlRWxlbWVudCAmJiBuYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXJbYWN0aW9uXShuYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWRhdGVpbnB1dC13cmFwJyksICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBtYW5hZ2VzIHRoZSBlbmQgcmFuZ2Ugc2VsZWN0aW9uLlxuICpcbiAqID4gWW91IGNhbiB1c2UgdGhlIERhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlIG9ubHkgd2l0aCBhIERhdGVJbnB1dCBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlIGV4dGVuZHMgRGF0ZVJhbmdlSW5wdXQge1xuICAgIGNvbnN0cnVjdG9yKHJhbmdlU2VydmljZSwgZGF0ZUlucHV0LCBlbGVtZW50LCByZW5kZXJlciwgem9uZSkge1xuICAgICAgICBzdXBlcignZW5kJywgcmFuZ2VTZXJ2aWNlLCBkYXRlSW5wdXQsIGVsZW1lbnQsIHJlbmRlcmVyLCB6b25lKTtcbiAgICAgICAgdGhpcy5yYW5nZVNlcnZpY2UgPSByYW5nZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0ID0gZGF0ZUlucHV0O1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBuYXZpZ2F0aW9uIGJlaGF2aW9yIG9mIHRoZSBjYWxlbmRhciB3aGVuIHRoZSBhY3RpdmUgZW5kIGlzIGNoYW5nZWQgb24gaW5wdXQgZm9jdXMuIFdoZW4gZW5hYmxlZCxcbiAgICAgICAgICogdGhlIGNhbGVuZGFyIG5hdmlnYXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIGZvY3VzZWQgaW5wdXQuIE90aGVyd2lzZSwgdGhlIGNhbGVuZGFyIGRpc3BsYXlzIHRoZSBsYXN0IHBpY2tlZCBkYXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYXV0b21hdGljIG5hdmlnYXRpb24gYmVoYXZpb3Igb24gaW5wdXQgZm9jdXMgaXMgZGlzYWJsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGg1PlRvZ2dsZSBpbnB1dCBmb2N1cyB0byBzZWUgdGhlIGNhbGVuZGFyIG5hdmlnYXRpbmcgYmV0d2VlbiByYW5nZSBlbmRzLjwvaDU+XG4gICAgICAgICAqICA8a2VuZG8tZGF0ZXJhbmdlPlxuICAgICAgICAgKiAgICAgIDxrZW5kby1kYXRlaW5wdXQga2VuZG9EYXRlUmFuZ2VTdGFydElucHV0IFtuYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1c109XCJ0cnVlXCIgWyh2YWx1ZSldPVwic3RhcnRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICogICAgICA8a2VuZG8tZGF0ZWlucHV0IGtlbmRvRGF0ZVJhbmdlRW5kSW5wdXQgW25hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzXT1cInRydWVcIiBbKHZhbHVlKV09XCJlbmRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICogIDwva2VuZG8tZGF0ZXJhbmdlPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBzdGFydDogRGF0ZSA9IG5ldyBEYXRlKDIwMTgsIDMsIDEwKTtcbiAgICAgICAgICogICBwdWJsaWMgZW5kOiBEYXRlID0gbmV3IERhdGUoMjAxOCwgMTAsIDIwKTtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhdGVDYWxlbmRhck9uRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmFuZ2VTZXJ2aWNlLnJlZ2lzdGVyRW5kSW5wdXQodGhpcy5kYXRlSW5wdXQpO1xuICAgICAgICBzdXBlci5pbml0KCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIGdldFJhbmdlKHZhbHVlLCBjb3JyZWN0T24pIHtcbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpcy5kYXRlSW5wdXQ7XG4gICAgICAgIGlmICghaXNJblJhbmdlKHZhbHVlLCBtaW4sIG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IHRoaXMucmFuZ2VTZXJ2aWNlLnNlbGVjdGlvblJhbmdlIHx8IEVNUFRZX1NFTEVDVElPTlJBTkdFO1xuICAgICAgICBjb25zdCBzaG91bGRDbGFtcCA9IHRoaXMuYXV0b0NvcnJlY3RPbiA9PT0gY29ycmVjdE9uICYmIGlzUHJlc2VudCh2YWx1ZSkgJiYgdmFsdWUgPCBzdGFydDtcbiAgICAgICAgcmV0dXJuIHNob3VsZENsYW1wID8gY2xhbXBSYW5nZSh2YWx1ZSkgOiB7IHN0YXJ0LCBlbmQ6IGNsb25lRGF0ZSh2YWx1ZSkgfTtcbiAgICB9XG4gICAgdXBkYXRlSW5wdXRWYWx1ZShyYW5nZSQkMSkge1xuICAgICAgICBjb25zdCB7IGVuZCB9ID0gcmFuZ2UkJDEgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXMuZGF0ZUlucHV0O1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmRhdGVJbnB1dC52YWx1ZSwgZW5kKSB8fCAhaXNJblJhbmdlKGVuZCwgbWluLCBtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlSW5wdXQud3JpdGVWYWx1ZShjbG9uZURhdGUoZW5kKSk7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0Lm5vdGlmeSgpO1xuICAgIH1cbn1cbkRhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlUmFuZ2VFbmRJbnB1dF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRGF0ZVJhbmdlU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGF0ZUlucHV0Q29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYXV0b0NvcnJlY3RPbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbmF2aWdhdGVDYWxlbmRhck9uRm9jdXM6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIG1hbmFnZXMgdGhlIHN0YXJ0IHNlbGVjdGlvbiByYW5nZS5cbiAqXG4gKiA+IFlvdSBjYW4gdXNlIHRoZSBEYXRlUmFuZ2VTdGFydElucHV0RGlyZWN0aXZlIG9ubHkgd2l0aCBhIERhdGVJbnB1dCBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUgZXh0ZW5kcyBEYXRlUmFuZ2VJbnB1dCB7XG4gICAgY29uc3RydWN0b3IocmFuZ2VTZXJ2aWNlLCBkYXRlSW5wdXQsIGVsZW1lbnQsIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHN1cGVyKCdzdGFydCcsIHJhbmdlU2VydmljZSwgZGF0ZUlucHV0LCBlbGVtZW50LCByZW5kZXJlciwgem9uZSk7XG4gICAgICAgIHRoaXMucmFuZ2VTZXJ2aWNlID0gcmFuZ2VTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRhdGVJbnB1dCA9IGRhdGVJbnB1dDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbmF2aWdhdGlvbiBiZWhhdmlvciBvZiB0aGUgY2FsZW5kYXIgd2hlbiB0aGUgYWN0aXZlIGVuZCBpcyBjaGFuZ2VkIG9uIGlucHV0IGZvY3VzLlxuICAgICAgICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBjYWxlbmRhciBuYXZpZ2F0ZXMgdG8gdGhlIHZhbHVlIG9mIHRoZSBmb2N1c2VkIGlucHV0LiBPdGhlcndpc2UsIHRoZSBjYWxlbmRhclxuICAgICAgICAgKiBkaXNwbGF5cyB0aGUgbGFzdCBwaWNrZWQgZGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG9tYXRpYyBuYXZpZ2F0aW9uIGJlaGF2aW9yIG9uIGlucHV0IGZvY3VzIGlzIGRpc2FibGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxoNT5Ub2dnbGUgaW5wdXQgZm9jdXMgdG8gc2VlIHRoZSBjYWxlbmRhciBuYXZpZ2F0aW5nIGJldHdlZW4gcmFuZ2UgZW5kcy48L2g1PlxuICAgICAgICAgKiAgPGtlbmRvLWRhdGVyYW5nZT5cbiAgICAgICAgICogICAgICA8a2VuZG8tZGF0ZWlucHV0IGtlbmRvRGF0ZVJhbmdlU3RhcnRJbnB1dCBbbmF2aWdhdGVDYWxlbmRhck9uRm9jdXNdPVwidHJ1ZVwiIFsodmFsdWUpXT1cInN0YXJ0XCI+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAqICAgICAgPGtlbmRvLWRhdGVpbnB1dCBrZW5kb0RhdGVSYW5nZUVuZElucHV0IFtuYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1c109XCJ0cnVlXCIgWyh2YWx1ZSldPVwiZW5kXCI+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAqICA8L2tlbmRvLWRhdGVyYW5nZT5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgc3RhcnQ6IERhdGUgPSBuZXcgRGF0ZSgyMDE4LCAzLCAxMCk7XG4gICAgICAgICAqICAgcHVibGljIGVuZDogRGF0ZSA9IG5ldyBEYXRlKDIwMTgsIDEwLCAyMCk7XG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzID0gZmFsc2U7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJhbmdlU2VydmljZS5yZWdpc3RlclN0YXJ0SW5wdXQodGhpcy5kYXRlSW5wdXQpO1xuICAgICAgICBzdXBlci5pbml0KCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIGdldFJhbmdlKHZhbHVlLCBjb3JyZWN0T24pIHtcbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpcy5kYXRlSW5wdXQ7XG4gICAgICAgIGlmICghaXNJblJhbmdlKHZhbHVlLCBtaW4sIG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZW5kIH0gPSB0aGlzLnJhbmdlU2VydmljZS5zZWxlY3Rpb25SYW5nZSB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICAgICAgY29uc3Qgc2hvdWxkQ2xhbXAgPSB0aGlzLmF1dG9Db3JyZWN0T24gPT09IGNvcnJlY3RPbiAmJiBlbmQgJiYgdmFsdWUgPiBlbmQ7XG4gICAgICAgIHJldHVybiBzaG91bGRDbGFtcCA/IGNsYW1wUmFuZ2UodmFsdWUpIDogeyBzdGFydDogY2xvbmVEYXRlKHZhbHVlKSwgZW5kIH07XG4gICAgfVxuICAgIHVwZGF0ZUlucHV0VmFsdWUocmFuZ2UkJDEpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydCB9ID0gcmFuZ2UkJDEgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXMuZGF0ZUlucHV0O1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmRhdGVJbnB1dC52YWx1ZSwgc3RhcnQpIHx8ICFpc0luUmFuZ2Uoc3RhcnQsIG1pbiwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0LndyaXRlVmFsdWUoY2xvbmVEYXRlKHN0YXJ0KSk7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0Lm5vdGlmeSgpO1xuICAgIH1cbn1cbkRhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVSYW5nZVN0YXJ0SW5wdXRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUmFuZ2VTdGFydElucHV0RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRGF0ZVJhbmdlU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGF0ZUlucHV0Q29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuRGF0ZVJhbmdlU3RhcnRJbnB1dERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhdXRvQ29ycmVjdE9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBuYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1czogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggbWFuYWdlcyB0aGUgTXVsdGlWaWV3Q2FsZW5kYXIgcmFuZ2Ugc2VsZWN0aW9uLlxuICovXG5jbGFzcyBEYXRlUmFuZ2VTZWxlY3Rpb25EaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGNhbGVuZGFyLCBjZHIsIGVsZW1lbnQsIHJlbmRlcmVyLCBkYXRlUmFuZ2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZSA9IGRhdGVSYW5nZVNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGF1dG8tY29ycmVjdGlvbiBiZWhhdmlvci4gSWYgdGhlIHN0YXJ0IGRhdGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBlbmQgZGF0ZSxcbiAgICAgICAgICogdGhlIGRpcmVjdGl2ZSBmaXhlcyB0aGUgZGF0ZSByYW5nZSB0byBhIHNpbmdsZSBkYXRlIGVpdGhlciBvbiBpbnB1dCBjaGFuZ2Ugb3Igb24gYmx1clxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGF1dG9jb3JyZWN0X2RhdGVyYW5nZSAlfSN0b2MtY29uZmlndXJpbmctdGhlLWNhbGVuZGFyLXNlbGVjdGlvbi1kaXJlY3RpdmUpKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG8tY29ycmVjdGlvbiBpcyB0cmlnZ2VyZWQgb24gY2hhbmdlLlxuICAgICAgICAgKiBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCB0aGUgYGF1dG9Db3JyZWN0T25gIHByb3BlcnR5IHRvIGBub25lYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXV0b0NvcnJlY3RPbiA9ICdjaGFuZ2UnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgYWN0aXZlIHJhbmdlIGVuZCBpcyBjaGFuZ2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG9cbiAgICAgICAgICogdGhlIHNlY3Rpb24gb24gW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlUmFuZ2VFbmRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBzZWxlY3Rpb24gcmFuZ2UgaXMgY2hhbmdlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvXG4gICAgICAgICAqIHRoZSBzZWN0aW9uIG9uIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfbXVsdGl2aWV3Y2FsZW5kYXIgJX0jdG9jLWV2ZW50cykuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyU3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKCkgPT4geyB9KTtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlID0gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlIHx8IG5ldyBEYXRlUmFuZ2VTZXJ2aWNlKCk7XG4gICAgICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgc2VsZWN0aW9uIHJhbmdlIG9mIHRoZSBjYWxlbmRhci4gV2hlbiBhIG5ldyByYW5nZSBpcyBzZXQsXG4gICAgICogdGhlIGNvbm5lY3RlZCBEYXRlUmFuZ2VTZXJ2aWNlIG5vdGlmaWVzIGFsbCByZWxhdGVkIHBhcnRpZXMuXG4gICAgICovXG4gICAgZ2V0IHNlbGVjdGlvblJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhciA/IHRoaXMuY2FsZW5kYXIuc2VsZWN0aW9uUmFuZ2UgOiBudWxsO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0aW9uUmFuZ2UocmFuZ2UkJDEpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRXF1YWxDYWxlbmRhclJhbmdlKHJhbmdlJCQxKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsUmFuZ2UodGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNlbGVjdGlvblJhbmdlLCByYW5nZSQkMSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRSYW5nZShyYW5nZSQkMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVGb2N1c2VkRGF0ZShyYW5nZSQkMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgYWN0aXZlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIHdoaWNoIHJhbmdlIGVuZCB3aWxsIGJlIHVwZGF0ZWQgb25cbiAgICAgKiB1c2VyIGludGVyYWN0aW9uLiBXaGVuIGEgbmV3IGFjdGl2ZSBlbmQgaXMgc2V0LCB0aGUgY29ubmVjdGVkIERhdGVSYW5nZVNlcnZpY2Ugbm90aWZpZXMgYWxsIHJlbGF0ZWQgcGFydGllcy5cbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hpY2ggZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbCBiZSBtYXJrZWQgYXMgYWN0aXZlLiBUaGUgYWN0aXZlIGVuZCBnZXRzIG1vZGlmaWVkIHVwb24gdXNlclxuICAgICAqIGludGVyYWN0aW9uLiBXaGVuIGEgbmV3IGFjdGl2ZSBlbmQgaXMgc2V0LCB0aGUgd2lyZWQgRGF0ZVJhbmdlU2VydmljZSBub3RpZmllcyBhbGwgcmVsYXRlZCBjb21wb25lbnRzLiBGb3JcbiAgICAgKiBleGFtcGxlLCB0aGUgc3RhcnQgYW5kIGVuZCBEYXRlSW5wdXQgY29tcG9uZW50cy5cbiAgICAgKlxuICAgICAqID4gSWYgdGhlIHNlbGVjdGlvbiByYW5nZSBpcyB1bmRlZmluZWQsIHRoZSB2YWx1ZSBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGdldCBhY3RpdmVSYW5nZUVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQ7XG4gICAgfVxuICAgIHNldCBhY3RpdmVSYW5nZUVuZChhY3RpdmVSYW5nZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmFjdGl2ZVJhbmdlRW5kID09PSBhY3RpdmVSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQgPSBhY3RpdmVSYW5nZTtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldEFjdGl2ZVJhbmdlRW5kKGFjdGl2ZVJhbmdlKTtcbiAgICB9XG4gICAgZ2V0IGNhbGVuZGFyUmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJhbmdlIHx8IEVNUFRZX1NFTEVDVElPTlJBTkdFO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyO1xuICAgICAgICBjb25zdCBkYXRlUmFuZ2VTZXJ2aWNlID0gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlO1xuICAgICAgICBjYWxlbmRhci5taW4gPSBlaXRoZXIoZGF0ZVJhbmdlU2VydmljZS5taW4sIGNhbGVuZGFyLm1pbik7XG4gICAgICAgIGNhbGVuZGFyLm1heCA9IGVpdGhlcihkYXRlUmFuZ2VTZXJ2aWNlLm1heCwgY2FsZW5kYXIubWF4KTtcbiAgICAgICAgdGhpcy5hZGRTdWJzY3JpcHRpb25zKGNhbGVuZGFyLmNlbGxFbnRlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLmhhbmRsZUhvdmVyKHZhbHVlKSksIGNhbGVuZGFyLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKSksIGRhdGVSYW5nZVNlcnZpY2UuZm9jdXNlZERhdGUkLnN1YnNjcmliZShmb2N1c2VkRGF0ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwoY2FsZW5kYXIuZm9jdXNlZERhdGUsIGZvY3VzZWREYXRlKSkge1xuICAgICAgICAgICAgICAgIGNhbGVuZGFyLmZvY3VzZWREYXRlID0gZm9jdXNlZERhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBkYXRlUmFuZ2VTZXJ2aWNlLmFjdGl2ZVJhbmdlRW5kJC5zdWJzY3JpYmUocmFuZ2VFbmQgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbGVuZGFyLmFjdGl2ZVJhbmdlRW5kID09PSByYW5nZUVuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGVuZGFyLmFjdGl2ZVJhbmdlRW5kID0gcmFuZ2VFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJhbmdlRW5kQ2hhbmdlLmVtaXQocmFuZ2VFbmQpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLCBkYXRlUmFuZ2VTZXJ2aWNlLnJhbmdlJC5zdWJzY3JpYmUocmFuZ2UkJDEgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRXF1YWxDYWxlbmRhclJhbmdlKHJhbmdlJCQxKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXB0QW5kRW1pdChyYW5nZSQkMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzZWREYXRlKHJhbmdlJCQxKTtcbiAgICAgICAgfSksIGZyb21FdmVudCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2JsdXInKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oYW5kbGVCbHVyKCkpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGFkZFN1YnNjcmlwdGlvbnMoLi4uc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb25zLm1hcChzID0+IHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zLmFkZChzKSk7XG4gICAgfVxuICAgIGlzRXF1YWxDYWxlbmRhclJhbmdlKHJhbmdlJCQxKSB7XG4gICAgICAgIHJldHVybiBpc0VxdWFsUmFuZ2UodGhpcy5jYWxlbmRhci5zZWxlY3Rpb25SYW5nZSwgcmFuZ2UkJDEpO1xuICAgIH1cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuY2FsZW5kYXJSYW5nZTtcbiAgICAgICAgY29uc3QgYXV0b0NvcnJlY3QgPSB0aGlzLmF1dG9Db3JyZWN0T24gPT09ICdibHVyJyAmJiBzdGFydCAhPT0gbnVsbCAmJiBlbmQgIT09IG51bGwgJiYgZW5kIDwgc3RhcnQ7XG4gICAgICAgIGlmIChhdXRvQ29ycmVjdCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldFJhbmdlKGNsYW1wUmFuZ2Uoc3RhcnQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuZGF0ZVJhbmdlU2VydmljZTtcbiAgICAgICAgY29uc3QgYXV0b0NvcnJlY3QgPSB0aGlzLmF1dG9Db3JyZWN0T24gPT09ICdjaGFuZ2UnICYmIHRoaXMuc2hvdWxkQXV0b0NvcnJlY3QodmFsdWUpO1xuICAgICAgICBjb25zdCBhY3RpdmVFbmQgPSB0aGlzLmNhbGVuZGFyLmFjdGl2ZVJhbmdlRW5kICE9PSAnZW5kJyA/ICdlbmQnIDogKGF1dG9Db3JyZWN0ID8gJ2VuZCcgOiAnc3RhcnQnKTtcbiAgICAgICAgY29uc3QgcmFuZ2UkJDEgPSBhdXRvQ29ycmVjdCA/IGNsYW1wUmFuZ2UodmFsdWUpIDogdGhpcy51cGRhdGVSYW5nZSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNFcXVhbFJhbmdlKHNlcnZpY2Uuc2VsZWN0aW9uUmFuZ2UsIHJhbmdlJCQxKSkge1xuICAgICAgICAgICAgdGhpcy5hY2NlcHRBbmRFbWl0KHJhbmdlJCQxKTtcbiAgICAgICAgICAgIHNlcnZpY2Uuc2V0QWN0aXZlUmFuZ2VFbmQoYWN0aXZlRW5kKTtcbiAgICAgICAgICAgIHNlcnZpY2Uuc2V0UmFuZ2UocmFuZ2UkJDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUhvdmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBsZXRlUmFuZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5jYWxlbmRhclJhbmdlO1xuICAgICAgICBjb25zdCBhY3RpdmVSYW5nZUVuZCA9IHRoaXMuY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQ7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVJhbmdlID0gKHN0YXJ0ICYmIGFjdGl2ZVJhbmdlRW5kID09PSAnZW5kJykgfHwgKGVuZCAmJiBhY3RpdmVSYW5nZUVuZCA9PT0gJ3N0YXJ0Jyk7XG4gICAgICAgIGlmICh1cGRhdGVSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLnVwZGF0ZVJhbmdlKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzQ29tcGxldGVSYW5nZSgpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2VsZWN0aW9uUmFuZ2UgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHN0YXJ0KSAmJiBCb29sZWFuKGVuZCk7XG4gICAgfVxuICAgIHNob3VsZEF1dG9Db3JyZWN0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgZW5kLCBzdGFydCB9ID0gdGhpcy5jYWxlbmRhclJhbmdlO1xuICAgICAgICBpZiAodGhpcy5jYWxlbmRhci5hY3RpdmVSYW5nZUVuZCAhPT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmQgIT09IG51bGwgJiYgdmFsdWUgPiBlbmQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQgIT09IG51bGwgJiYgdmFsdWUgPCBzdGFydDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVGb2N1c2VkRGF0ZShyYW5nZSQkMSkge1xuICAgICAgICBpZiAoIXJhbmdlJCQxIHx8IHRoaXMuZGF0ZVJhbmdlU2VydmljZS5mb2N1c2VkRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRGb2N1c2VkRGF0ZShyYW5nZSQkMS5zdGFydCB8fCByYW5nZSQkMS5lbmQpO1xuICAgIH1cbiAgICB1cGRhdGVSYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IGVuZCwgc3RhcnQgfSA9IHRoaXMuY2FsZW5kYXJSYW5nZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQgIT09ICdlbmQnID8gKHsgc3RhcnQ6IHZhbHVlLCBlbmQgfSkgOiAoeyBzdGFydCwgZW5kOiB2YWx1ZSB9KTtcbiAgICB9XG4gICAgc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UkJDEpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhci5zZWxlY3Rpb25SYW5nZSA9IHJhbmdlJCQxO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLndyaXRlVmFsdWUobnVsbCk7XG4gICAgfVxuICAgIGFjY2VwdEFuZEVtaXQocmFuZ2UkJDEpIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSQkMSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2VDaGFuZ2UuZW1pdChyYW5nZSQkMSk7XG4gICAgfVxufVxuRGF0ZVJhbmdlU2VsZWN0aW9uRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlUmFuZ2VTZWxlY3Rpb25dJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUmFuZ2VTZWxlY3Rpb25EaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogRGF0ZVJhbmdlU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcbkRhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhdXRvQ29ycmVjdE9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3Rpb25SYW5nZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlUmFuZ2VFbmQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVJhbmdlRW5kQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgc2VsZWN0aW9uUmFuZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeCBkaXJlY3RpdmUtc2VsZWN0b3IgKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBLRm9yT2ZDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcigkaW1wbGljaXQsIGtGb3JPZiwgaW5kZXgsIGNvdW50KSB7XG4gICAgICAgIHRoaXMuJGltcGxpY2l0ID0gJGltcGxpY2l0O1xuICAgICAgICB0aGlzLmtGb3JPZiA9IGtGb3JPZjtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmNvdW50ID0gY291bnQ7XG4gICAgfVxuICAgIGdldCBmaXJzdCgpIHsgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7IH1cbiAgICBnZXQgbGFzdCgpIHsgcmV0dXJuIHRoaXMuaW5kZXggPT09IHRoaXMuY291bnQgLSAxOyB9XG4gICAgZ2V0IGV2ZW4oKSB7IHJldHVybiB0aGlzLmluZGV4ICUgMiA9PT0gMDsgfVxuICAgIGdldCBvZGQoKSB7IHJldHVybiAhdGhpcy5ldmVuOyB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgS0Zvck9mIHtcbiAgICBjb25zdHJ1Y3Rvcihfdmlld0NvbnRhaW5lciwgX3RlbXBsYXRlLCBfZGlmZmVycykge1xuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyID0gX3ZpZXdDb250YWluZXI7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlID0gX3RlbXBsYXRlO1xuICAgICAgICB0aGlzLl9kaWZmZXJzID0gX2RpZmZlcnM7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IG51bGw7XG4gICAgfVxuICAgIHNldCBrRm9yVGVtcGxhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCdrRm9yT2YnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2hhbmdlcy5rRm9yT2YuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RpZmZlciB8fCAhdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpZmZlciA9IHRoaXMuX2RpZmZlcnMuZmluZCh2YWx1ZSkuY3JlYXRlKHRoaXMua0ZvclRyYWNrQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICcke3ZhbHVlfScgb2YgdHlwZSAnJHtnZXRUeXBlTmFtZUZvckRlYnVnZ2luZyh2YWx1ZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaWZmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLmtGb3JPZik7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5Q2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYXBwbHlDaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyTGVuZ3RoID0gdGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmtGb3JPZi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHR1cGxlcyA9IHt9O1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2hPcGVyYXRpb24oKHJlY29yZCwgXywgY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdHVwbGVzW2N1cnJlbnRJbmRleF0gPSByZWNvcmQuaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAobGV0IGkgPSB2aWV3Q29udGFpbmVyTGVuZ3RoOyBpIDwgZGF0YUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSwgbmV3IEtGb3JPZkNvbnRleHQobnVsbCwgdGhpcy5rRm9yT2YsIC0xLCAtMSksIGkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDsgaSA+IGRhdGFMZW5ndGg7IGktLSkge1xuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5yZW1vdmUoaSAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdmlld0NvbnRhaW5lci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGkpO1xuICAgICAgICAgICAgdmlldy5jb250ZXh0LmluZGV4ID0gaTtcbiAgICAgICAgICAgIHZpZXcuY29udGV4dC5jb3VudCA9IGxlbmd0aDtcbiAgICAgICAgICAgIHZpZXcuY29udGV4dC4kaW1wbGljaXQgPSB0dXBsZXNbaV0gfHwgbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbktGb3JPZi5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbeyBzZWxlY3RvcjogJ1trRm9yXVtrRm9yT2ZdJyB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbktGb3JPZi5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFZpZXdDb250YWluZXJSZWYgfSxcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH0sXG4gICAgeyB0eXBlOiBJdGVyYWJsZURpZmZlcnMgfVxuXTtcbktGb3JPZi5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBrRm9yT2Y6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtGb3JUcmFja0J5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBrRm9yVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGVOYW1lRm9yRGVidWdnaW5nKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZS5uYW1lIHx8IHR5cGVvZiB0eXBlO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgSGVhZGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihidXMsIGNkciwgbG9jYWxpemF0aW9uLCBpbnRsLCBkaXNhYmxlZERhdGVzU2VydmljZSkge1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlID0gZGlzYWJsZWREYXRlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvZGF5QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5taW4gPSBuZXcgRGF0ZShNSU5fREFURSk7XG4gICAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gMTtcbiAgICAgICAgdGhpcy50b2RheSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICBnZXQgZ2V0Q29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAuYWRkKHRoaXMuaW50bC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmludGxDaGFuZ2UuYmluZCh0aGlzKSkpXG4gICAgICAgICAgICAuYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMubDEwbkNoYW5nZS5iaW5kKHRoaXMpKSlcbiAgICAgICAgICAgIC5hZGQodGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnNldFRvZGF5QXZhaWxhYmlsaXR5LmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoXykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5idXMuc2VydmljZSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdWYWx1ZSA9IENhbGVuZGFyVmlld0VudW1bdGhpcy5hY3RpdmVWaWV3XTtcbiAgICAgICAgdGhpcy50b2RheU1lc3NhZ2UgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ3RvZGF5Jyk7XG4gICAgICAgIHRoaXMuc2V0VG9kYXlBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSA9IHRoaXMuYnVzLmNhbk1vdmVVcCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5nZXRUaXRsZSgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGhhbmRsZVRvZGF5Q2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy50b2RheUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVzLm1vdmVUb0JvdHRvbSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICB0aGlzLnRvZGF5LmVtaXQoZGF0ZUluUmFuZ2UoZ2V0VG9kYXkoKSwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gICAgfVxuICAgIGhhbmRsZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXZpZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVzLm1vdmVVcCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgIH1cbiAgICBpbnRsQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50RGF0ZSAmJiB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldykpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsMTBuQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRvZGF5TWVzc2FnZSA9IHRoaXMubG9jYWxpemF0aW9uLmdldCgndG9kYXknKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGdldFRpdGxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5idXMuc2VydmljZSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICBjb25zdCB0YWtlID0gdGhpcy5yYW5nZUxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gc2VydmljZS50aXRsZSh0aGlzLmN1cnJlbnREYXRlKTtcbiAgICAgICAgY29uc3QgbmV4dERhdGUgPSBzZXJ2aWNlLmFkZFRvRGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB0YWtlKTtcbiAgICAgICAgaWYgKHRha2UgPCAxIHx8ICFzZXJ2aWNlLmlzSW5SYW5nZShuZXh0RGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHt0aXRsZX0gLSAke3NlcnZpY2UudGl0bGUobmV4dERhdGUpfWA7XG4gICAgfVxuICAgIHNldFRvZGF5QXZhaWxhYmlsaXR5KCkge1xuICAgICAgICBjb25zdCB0b2RheSA9IGdldFRvZGF5KCk7XG4gICAgICAgIGNvbnN0IGlzVG9kYXlJblJhbmdlID0gaXNJblJhbmdlKHRvZGF5LCBnZXREYXRlKHRoaXMubWluKSwgZ2V0RGF0ZSh0aGlzLm1heCkpO1xuICAgICAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZCh0b2RheSk7XG4gICAgICAgIHRoaXMudG9kYXlBdmFpbGFibGUgPSBpc1RvZGF5SW5SYW5nZSAmJiAhaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuSGVhZGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhci1oZWFkZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPHNwYW4gY2xhc3M9XCJrLWJ1dHRvbiBrLWJhcmUgay10aXRsZVwiIFtjbGFzcy5rLXN0YXRlLWRpc2FibGVkXT1cIiFuYXZpZ2F0ZVwiXG4gICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVOYXZpZ2F0aW9uXG4gICAgICAgIH1cIlxuICAgICAgICBbc2NvcGVdPVwidGhpc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIXRlbXBsYXRlUmVmXCI+e3t0aXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdJZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRpdGxlLCBhY3RpdmVWaWV3OiBhY3RpdmVWaWV3VmFsdWUsIGRhdGU6IGN1cnJlbnREYXRlIH1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJrLXRvZGF5XCIgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwiIXRvZGF5QXZhaWxhYmxlXCJcbiAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgY2xpY2s6IGhhbmRsZVRvZGF5Q2xpY2tcbiAgICAgICAgfVwiXG4gICAgICAgIFtzY29wZV09XCJ0aGlzXCI+XG4gICAgICAgIHt7dG9kYXlNZXNzYWdlfX1cbiAgICA8L3NwYW4+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSGVhZGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGlzYWJsZWREYXRlc1NlcnZpY2UgfVxuXTtcbkhlYWRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjdXJyZW50RGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJhbmdlTGVuZ3RoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9kYXk6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBnZXRDb21wb25lbnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItaGVhZGVyXCIsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFdlZWtOYW1lc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGludGwpIHtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICB9XG4gICAgZ2V0V2Vla05hbWVzKGluY2x1ZGVXZWVrTnVtYmVyID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgd2Vla05hbWVzID0gc2hpZnRXZWVrTmFtZXModGhpcy5pbnRsLmRhdGVGb3JtYXROYW1lcyh7IG5hbWVUeXBlOiAnc2hvcnQnLCB0eXBlOiAnZGF5cycgfSksIHRoaXMuaW50bC5maXJzdERheSgpKTtcbiAgICAgICAgcmV0dXJuIGluY2x1ZGVXZWVrTnVtYmVyID8gWycnXS5jb25jYXQod2Vla05hbWVzKSA6IHdlZWtOYW1lcztcbiAgICB9XG59XG5XZWVrTmFtZXNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XZWVrTmFtZXNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFZpZXdDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGJ1cywgaW50bCwgY2RyLCB3ZWVrU2VydmljZSwgZWxlbWVudCwgem9uZSwgcmVuZGVyZXIsIGRpc2FibGVkRGF0ZXNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy53ZWVrU2VydmljZSA9IHdlZWtTZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UgPSBkaXNhYmxlZERhdGVzU2VydmljZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAndmVydGljYWwnO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2VsbEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNlbGxMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb2xTcGFuID0gMDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIC5hZGQodGhpcy5pbnRsLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuaW50bENoYW5nZS5iaW5kKHRoaXMpKSlcbiAgICAgICAgICAgIC5hZGQodGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmRpc2FibGVkRGF0ZXNDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBnZXQgd2Vla051bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1dlZWtOdW1iZXJzICYmIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5tb250aDtcbiAgICB9XG4gICAgc2V0IHdlZWtOdW1iZXIoc2hvd1dlZWtOdW1iZXJzKSB7XG4gICAgICAgIHRoaXMuc2hvd1dlZWtOdW1iZXJzID0gc2hvd1dlZWtOdW1iZXJzO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5idXMuc2VydmljZSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlV2Vla05hbWVzID0gdGhpcy5pc0hvcml6b250YWwoKSAmJiB0aGlzLndlZWtOYW1lcy5sZW5ndGggPT09IDA7XG4gICAgICAgIGlmIChnZW5lcmF0ZVdlZWtOYW1lcyAmJiAoY2hhbmdlcy53ZWVrTnVtYmVyIHx8IGNoYW5nZXMuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSB0aGlzLndlZWtTZXJ2aWNlLmdldFdlZWtOYW1lcyh0aGlzLndlZWtOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sU3BhbiA9IHRoaXMuc2VydmljZS5yb3dMZW5ndGgodGhpcy53ZWVrTnVtYmVyKTtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuc2VydmljZS50aXRsZSh0aGlzLnZpZXdEYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENlbGxJbmRleCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb3JFYWNoKHVuc3Vic2NyaWJlQ2FsbGJhY2sgPT4gdW5zdWJzY3JpYmVDYWxsYmFjaygpKTtcbiAgICB9XG4gICAgaXNIb3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcbiAgICB9XG4gICAgaXNNb250aFZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgfVxuICAgIGZpcnN0RGF0ZShyb3dDdHgpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5maXJzdFdlZWtEYXRlQ29udGV4dChyb3dDdHgpO1xuICAgICAgICByZXR1cm4gY3R4ID8gY3R4LnZhbHVlIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0V2Vla051bWJlcihkYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy53ZWVrTnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2Vla0luWWVhcihkYXRlLCB0aGlzLmludGwuZmlyc3REYXkoKSk7XG4gICAgfVxuICAgIGdldFdlZWtOdW1iZXJDb250ZXh0KHJvd0N0eCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmZpcnN0V2Vla0RhdGVDb250ZXh0KHJvd0N0eCk7XG4gICAgICAgIGlmICghdGhpcy53ZWVrTnVtYmVyIHx8ICFjdHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdlZWtOdW1iZXIgPSB3ZWVrSW5ZZWFyKGN0eC52YWx1ZSwgdGhpcy5pbnRsLmZpcnN0RGF5KCkpLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogd2Vla051bWJlcixcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgaXNGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNXZWVrZW5kOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB3ZWVrTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IGNsb25lRGF0ZShjdHgudmFsdWUpXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldFN0eWxlcyhjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHsgaXNSYW5nZUVuZCwgaXNSYW5nZVN0YXJ0IH0gPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBpc0VuZEFjdGl2ZSA9IHRoaXMuYWN0aXZlUmFuZ2VFbmQgPT09ICdlbmQnICYmIGlzUmFuZ2VFbmQ7XG4gICAgICAgIGNvbnN0IGlzU3RhcnRBY3RpdmUgPSB0aGlzLmFjdGl2ZVJhbmdlRW5kID09PSAnc3RhcnQnICYmIGlzUmFuZ2VTdGFydDtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUNsYXNzT2JqZWN0KHtcbiAgICAgICAgICAgICdrLXJhbmdlLWVuZCc6IGlzUmFuZ2VFbmQsXG4gICAgICAgICAgICAnay1yYW5nZS1taWQnOiBjb250ZXh0LmlzUmFuZ2VNaWQsXG4gICAgICAgICAgICAnay1yYW5nZS1zcGxpdC1lbmQnOiBjb250ZXh0LmlzUmFuZ2VTcGxpdEVuZCxcbiAgICAgICAgICAgICdrLXJhbmdlLXNwbGl0LXN0YXJ0JzogY29udGV4dC5pc1JhbmdlU3BsaXRTdGFydCxcbiAgICAgICAgICAgICdrLXJhbmdlLXN0YXJ0JzogaXNSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgJ2stc3RhdGUtYWN0aXZlJzogaXNTdGFydEFjdGl2ZSB8fCBpc0VuZEFjdGl2ZSxcbiAgICAgICAgICAgICdrLXN0YXRlLWZvY3VzZWQnOiB0aGlzLmlzQWN0aXZlICYmIGNvbnRleHQuaXNGb2N1c2VkLFxuICAgICAgICAgICAgJ2stc3RhdGUtc2VsZWN0ZWQnOiBjb250ZXh0LmlzU2VsZWN0ZWQgfHwgaXNSYW5nZVN0YXJ0IHx8IGlzUmFuZ2VFbmQsXG4gICAgICAgICAgICAnay10b2RheSc6IGNvbnRleHQuaXNUb2RheSxcbiAgICAgICAgICAgICdrLXdlZWtlbmQnOiBjb250ZXh0LmlzV2Vla2VuZCxcbiAgICAgICAgICAgICdrLXN0YXRlLWRpc2FibGVkJzogY29udGV4dC5pc0Rpc2FibGVkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0YWJsZUNlbGxJbmRleChyb3dJbmRleCwgY2VsbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBgJHtyb3dJbmRleH06JHtjZWxsSW5kZXh9YDtcbiAgICB9XG4gICAgZmlyc3RXZWVrRGF0ZUNvbnRleHQocm93Q3R4KSB7XG4gICAgICAgIGlmICghdGhpcy53ZWVrTnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaWR4ID0gMDtcbiAgICAgICAgbGV0IGN0eCA9IHJvd0N0eFtpZHhdO1xuICAgICAgICB3aGlsZSAoIWN0eCAmJiBpZHggPCByb3dDdHgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjdHggPSByb3dDdHhbKytpZHhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuICAgIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnNlbGVjdGVkRGF0ZSB8fCBnZXRUb2RheSgpO1xuICAgICAgICBjb25zdCB2aWV3RGF0ZSA9IHNldFRpbWUodGhpcy52aWV3RGF0ZSwgdGltZSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuc2VydmljZS5kYXRhKHtcbiAgICAgICAgICAgIGNlbGxVSUQ6IHRoaXMuY2VsbFVJRCxcbiAgICAgICAgICAgIGZvY3VzZWREYXRlOiB0aGlzLmZvY3VzZWREYXRlLFxuICAgICAgICAgICAgaXNBY3RpdmVWaWV3OiAhdGhpcy5idXMuY2FuTW92ZURvd24odGhpcy5hY3RpdmVWaWV3KSxcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgc2VsZWN0ZWREYXRlOiB0aGlzLnNlbGVjdGVkRGF0ZSxcbiAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlOiB0aGlzLnNlbGVjdGlvblJhbmdlLFxuICAgICAgICAgICAgdmlld0RhdGU6IHZpZXdEYXRlLFxuICAgICAgICAgICAgaXNEYXRlRGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaXNEYXRlRGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludGxDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSB0aGlzLndlZWtTZXJ2aWNlLmdldFdlZWtOYW1lcyh0aGlzLndlZWtOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBkaXNhYmxlZERhdGVzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGJpbmRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5kb21FdmVudHMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnbW91c2VvdmVyJywgdGhpcy5jZWxsTW91c2VvdmVySGFuZGxlci5iaW5kKHRoaXMpKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ21vdXNlbGVhdmUnLCB0aGlzLm1vdXNlTGVhdmVIYW5kbGVyLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCB0aGlzLmNsaWNrSGFuZGxlci5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIGNsaWNrSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNsb3Nlc3RDZWxsKGFyZ3MpO1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZWxsLWluZGV4Jyk7XG4gICAgICAgICAgICBjb25zdCBjZWxsQ29udGV4dCA9IHRoaXMuY2VsbEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFjZWxsQ29udGV4dC5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChjZWxsQ29udGV4dC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbW91c2VMZWF2ZUhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDZWxsSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENlbGxMZWF2ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNlbGxNb3VzZW92ZXJIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuY2xvc2VzdENlbGwoYXJncyk7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWNlbGwtaW5kZXgnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDZWxsSW5kZXggJiYgdGhpcy5jdXJyZW50Q2VsbEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdENlbGxMZWF2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNlbGxCeUluZGV4KGluZGV4KS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2VsbEVudGVyLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2VsbEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50Q2VsbEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRDZWxsTGVhdmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9zZXN0Q2VsbChldmVudEFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGNsb3Nlc3RJblNjb3BlKGV2ZW50QXJncy50YXJnZXQsIG5vZGUgPT4gbm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtY2VsbC1pbmRleCcpLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIGVtaXRDZWxsTGVhdmUoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNlbGxCeUluZGV4KHRoaXMuY3VycmVudENlbGxJbmRleCk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxMZWF2ZS5lbWl0KGl0ZW0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudENlbGxJbmRleCA9IG51bGw7XG4gICAgfVxuICAgIGNlbGxCeUluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IFtyb3dJbmRleCwgY2VsbEluZGV4XSA9IGluZGV4LnNwbGl0KCc6Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbcm93SW5kZXhdW2NlbGxJbmRleF07XG4gICAgfVxufVxuVmlld0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJWaWV3XScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5Q2VsbD48dGQgY2xhc3M9XCJrLWVtcHR5XCI+Jm5ic3A7PC90ZD48L25nLXRlbXBsYXRlPlxuICAgIDx0ciAqbmdJZj1cIiFpc0hvcml6b250YWwoKVwiIHJvbGU9XCJyb3dcIj48dGggc2NvcGU9XCJjb2xcIiBbY29sU3Bhbl09XCJjb2xTcGFuXCI+e3t0aXRsZX19PC90aD48L3RyPlxuICAgIDx0ciByb2xlPVwicm93XCIgKm5nSWY9XCJpc01vbnRoVmlldygpICYmIGlzSG9yaXpvbnRhbCgpXCI+XG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgbmFtZSBvZiB3ZWVrTmFtZXNcIj57e25hbWV9fTwvdGg+XG4gICAgPC90cj5cbiAgICA8dHIgKmtGb3I9XCJsZXQgcm93IG9mIGRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwid2Vla051bWJlclwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1hbHRcIiAqbmdJZj1cImZpcnN0RGF0ZShyb3cpOyBlbHNlIGVtcHR5Q2VsbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhd2Vla051bWJlclRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0V2Vla051bWJlcihmaXJzdERhdGUocm93KSl9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0lmXT1cIndlZWtOdW1iZXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndlZWtOdW1iZXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGZpcnN0RGF0ZShyb3cpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnRleHQ6IGdldFdlZWtOdW1iZXJDb250ZXh0KHJvdylcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICprRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgY2VsbEluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2VsbDsgZWxzZSBlbXB0eUNlbGxcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiY2VsbC5pZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jZWxsLWluZGV4XT1cInRhYmxlQ2VsbEluZGV4KHJvd0luZGV4LCBjZWxsSW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImNlbGwuaXNTZWxlY3RlZCB8fCBjZWxsLmlzUmFuZ2VTdGFydCB8fCBjZWxsLmlzUmFuZ2VNaWQgfHwgY2VsbC5pc1JhbmdlRW5kXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3R5bGVzKGNlbGwpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY2VsbC50aXRsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWxpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF0ZW1wbGF0ZVJlZlwiPnt7Y2VsbC5mb3JtYXR0ZWRWYWx1ZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2VsbC52YWx1ZSwgY2VsbENvbnRleHQ6IGNlbGwgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdHI+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVmlld0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJ1c1ZpZXdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFdlZWtOYW1lc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBEaXNhYmxlZERhdGVzU2VydmljZSB9XG5dO1xuVmlld0NvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGlzQWN0aXZlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjZWxsVUlEOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aWV3RGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlUmFuZ2VFbmQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGlvblJhbmdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmlld0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlclRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsRW50ZXI6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsTGVhdmU6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBIZWFkZXJDb21wb25lbnRgJm1kYXNoO1RoZSBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBVSSBmb3IgdmVydGljYWwgbmF2aWdhdGlvbi5cbiAqIC0gYFZpZXdDb21wb25lbnRgJm1kYXNoO1RoZSBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBhY3RpdmUgQ2FsZW5kYXIgdmlldy5cbiAqL1xuY2xhc3MgQ2FsZW5kYXJDb21tb25Nb2R1bGUge1xufVxuQ2FsZW5kYXJDb21tb25Nb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBLRm9yT2YsXG4gICAgICAgICAgICAgICAgICAgIEhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgVmlld0NvbXBvbmVudFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBLRm9yT2YsXG4gICAgICAgICAgICAgICAgICAgIEhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgVmlld0NvbXBvbmVudFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXZlbnRzTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYENlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYFllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSB5ZWFyIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgZGVjYWRlIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGNlbnR1cnkgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggd2VlayBudW1iZXIgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgaGVhZGVyIHRpdGxlIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYE5hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBuYXZpZ2F0aW9uIGl0ZW0gdGVtcGxhdGUgZGlyZWN0aXZlLlxuICovXG5jbGFzcyBUZW1wbGF0ZXNNb2R1bGUge1xufVxuVGVtcGxhdGVzTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIERlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgSGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENhbGVuZGFyTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5DYWxlbmRhck1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvZGF5OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBDYWxlbmRhck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDYWxlbmRhck1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBnbG9iYWxpemF0aW9uX2RhdGVpbnB1dHMgJX0jdG9jLWN1c3RvbS1tZXNzYWdlcykpLlxuICovXG5jbGFzcyBDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgQ2FsZW5kYXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkNhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ2FsZW5kYXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhci1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbmNvbnN0IENPTVBPTkVOVF9ESVJFQ1RJVkVTID0gW1xuICAgIFZpcnR1YWxpemF0aW9uQ29tcG9uZW50XG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIFZpcnR1YWxpemF0aW9uIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgVmlydHVhbGl6YXRpb25Nb2R1bGUge1xufVxuVmlydHVhbGl6YXRpb25Nb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbQ09NUE9ORU5UX0RJUkVDVElWRVNdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYE1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgeWVhciBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYERlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGRlY2FkZSBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYENlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBjZW50dXJ5IGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIHdlZWsgbnVtYmVyIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgSGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGhlYWRlciB0aXRsZSB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbmF2aWdhdGlvbiBpdGVtIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBDYWxlbmRhciBtb2R1bGVcbiAqIGltcG9ydCB7IENhbGVuZGFyTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0cyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIENhbGVuZGFyTW9kdWxlXSwgLy8gaW1wb3J0IENhbGVuZGFyIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2FsZW5kYXJNb2R1bGUge1xufVxuQ2FsZW5kYXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVmlld0xpc3RDb21wb25lbnRcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25Db21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFZpZXdMaXN0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckNvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJDb21tb25Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEludGxNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlc01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVmlydHVhbGl6YXRpb25Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEV2ZW50c01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUmVzaXplU2Vuc29yTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJET01TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBDZW50dXJ5Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERlY2FkZVZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBNb250aFZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBZZWFyVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFdlZWtOYW1lc1NlcnZpY2VcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbk1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvZGF5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwcmV2QnV0dG9uVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5leHRCdXR0b25UaXRsZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBNdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5NdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlWaWV3Q2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb011bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5NdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBnbG9iYWxpemF0aW9uX2RhdGVpbnB1dHMgJX0jdG9jLWN1c3RvbS1tZXNzYWdlcykpLlxuICovXG5jbGFzcyBNdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5NdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlWaWV3Q2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLW11bHRpdmlld2NhbGVuZGFyLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTXVsdGlWaWV3Q2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBUaGUgcGFja2FnZSBleHBvcnRzOlxuICogLSBgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIHllYXIgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBkZWNhZGUgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgY2VudHVyeSBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYFdlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCB3ZWVrIG51bWJlciBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYEhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBoZWFkZXIgdGl0bGUgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIE11bHRpVmlld0NhbGVuZGFyIG1vZHVsZVxuICogaW1wb3J0IHsgTXVsdGlWaWV3Q2FsZW5kYXJNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kYXRlaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgTXVsdGlWaWV3Q2FsZW5kYXJNb2R1bGVdLCAvLyBpbXBvcnQgTXVsdGlWaWV3Q2FsZW5kYXIgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICovXG5jbGFzcyBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZSB7XG59XG5NdWx0aVZpZXdDYWxlbmRhck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxWaWV3TGlzdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTXVsdGlWaWV3Q2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgTXVsdGlWaWV3Q2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnRcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJDb21tb25Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlc01vZHVsZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2FsZW5kYXJDb21tb25Nb2R1bGUsIEludGxNb2R1bGUsIFRlbXBsYXRlc01vZHVsZSwgUG9wdXBNb2R1bGVdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgQ2VudHVyeVZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEZWNhZGVWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTW9udGhWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgWWVhclZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBXZWVrTmFtZXNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIFRoZSBleHBvcnRlZCBwYWNrYWdlIG1vZHVsZS5cbiAqXG4gKiBUaGUgcGFja2FnZSBleHBvcnRzOlxuICogLSBgQ2FsZW5kYXJNb2R1bGVgJm1kYXNoO1RoZSBjYWxlbmRhciBtb2R1bGUuXG4gKiAtIGBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZWAmbWRhc2g7VGhlIG11bHRpLXZpZXcgY2FsZW5kYXIgbW9kdWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIENhbGVuZGFycyBtb2R1bGVcbiAqIGltcG9ydCB7IENhbGVuZGFyc01vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBDYWxlbmRhcnNNb2R1bGVdLCAvLyBpbXBvcnQgdGhlIENhbGVuZGFycyBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENhbGVuZGFyc01vZHVsZSB7XG59XG5DYWxlbmRhcnNNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIE11bHRpVmlld0NhbGVuZGFyTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVJbnB1dE1lc3NhZ2VzIGV4dGVuZHMgQ29tcG9uZW50TWVzc2FnZXMge1xufVxuRGF0ZUlucHV0TWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGVjcmVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNyZW1lbnQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBEYXRlSW5wdXRNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkRhdGVJbnB1dExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IERhdGVJbnB1dE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVJbnB1dExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBnbG9iYWxpemF0aW9uX2RhdGVpbnB1dHMgJX0jdG9jLWN1c3RvbS1tZXNzYWdlcykpLlxuICovXG5jbGFzcyBEYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIERhdGVJbnB1dE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuRGF0ZUlucHV0Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRGF0ZUlucHV0TWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWRhdGVpbnB1dC1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVJbnB1dEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBEYXRlSW5wdXQgY29tcG9uZW50LlxuICovXG5jbGFzcyBEYXRlSW5wdXRNb2R1bGUge1xufVxuRGF0ZUlucHV0TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEludGxNb2R1bGUsIEV2ZW50c01vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVQaWNrZXJNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbkRhdGVQaWNrZXJNZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0b2RheTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9nZ2xlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIERhdGVQaWNrZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkRhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBEYXRlUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlUGlja2VyTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZGF0ZWlucHV0cyAlfSN0b2MtY3VzdG9tLW1lc3NhZ2VzKSkuXG4gKi9cbmNsYXNzIERhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIERhdGVQaWNrZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkRhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBEYXRlUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRlcGlja2VyLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG5jb25zdCDJtTAkZSA9IHRvdWNoRW5hYmxlZDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIERhdGVQaWNrZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBEYXRlUGlja2VyTW9kdWxlIHtcbn1cbkRhdGVQaWNrZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0TW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgSW50bE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUG9wdXBNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlc01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRPVUNIX0VOQUJMRUQsIHVzZVZhbHVlOiDJtTAkZSB9XVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBDT01QT05FTlRfRElSRUNUSVZFUyQxID0gW1xuICAgIERhdGVSYW5nZUNvbXBvbmVudCxcbiAgICBEYXRlUmFuZ2VQb3B1cENvbXBvbmVudCxcbiAgICBEYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIERhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZSxcbiAgICBEYXRlUmFuZ2VTdGFydElucHV0RGlyZWN0aXZlLFxuICAgIERhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlXG5dO1xuY29uc3QgQ09NUE9ORU5UX01PRFVMRVMgPSBbXG4gICAgTXVsdGlWaWV3Q2FsZW5kYXJNb2R1bGUsXG4gICAgRGF0ZUlucHV0TW9kdWxlLFxuICAgIFBvcHVwTW9kdWxlLFxuICAgIEV2ZW50c01vZHVsZVxuXTtcbi8qKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBEYXRlUmFuZ2VDb21wb25lbnRgJm1kYXNoO1RoZSBEYXRlUmFuZ2UgY29tcG9uZW50IGNsYXNzLlxuICogLSBgRGF0ZVJhbmdlUG9wdXBDb21wb25lbnRgJm1kYXNoO1RoZSBEYXRlUmFuZ2VQb3B1cCBjb21wb25lbnQgY2xhc3MuXG4gKiAtIGBEYXRlUmFuZ2VTZWxlY3Rpb25EaXJlY3RpdmVgJm1kYXNoO1RoZSBNdWx0aXZpZXdDYWxlbmRhciBkYXRlIHJhbmdlIHNlbGVjdGlvbiBkaXJlY3RpdmUuXG4gKiAtIGBEYXRlUmFuZ2VFbmRJbnB1dERpcmVjdGl2ZWAmbWRhc2g7VGhlIGVuZCBEYXRlSW5wdXQgZGF0ZSByYW5nZSBzZWxlY3Rpb24gZGlyZWN0aXZlLlxuICogLSBgRGF0ZVJhbmdlU3RhcnRJbnB1dERpcmVjdGl2ZWAmbWRhc2g7VGhlIHN0YXJ0IERhdGVJbnB1dCBkYXRlIHJhbmdlIHNlbGVjdGlvbiBkaXJlY3RpdmUuXG4gKiAtIGBEYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgRGF0ZVJhbmdlUG9wdXAgY29udGVudCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZWAmbWRhc2g7VGhlIE11bHRpVmlld0NhbGVuZGFyIG1vZHVsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBEYXRlUmFuZ2UgbW9kdWxlXG4gKiBpbXBvcnQgeyBEYXRlUmFuZ2VNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kYXRlaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRGF0ZVJhbmdlTW9kdWxlXSwgLy8gaW1wb3J0IERhdGVSYW5nZSBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIERhdGVSYW5nZU1vZHVsZSB7XG59XG5EYXRlUmFuZ2VNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTJDFdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtDT01QT05FTlRfRElSRUNUSVZFUyQxXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDT01QT05FTlRfTU9EVUxFU11cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY29uc3QgZGl2JDEgPSBkb21Db250YWluZXJGYWN0b3J5KCdkaXYnKTtcbmNvbnN0IHVsJDEgPSBkb21Db250YWluZXJGYWN0b3J5KCd1bCcpO1xuY29uc3QgbGkkMSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ2xpJyk7XG5jb25zdCBsaXN0SXRlbSA9ICgpID0+IGxpJDEoJzxzcGFuPjAyPC9zcGFuPicsICdrLWl0ZW0nKTtcbmNvbnN0IGxpc3QgPSAoKSA9PiB1bCQxKFtsaXN0SXRlbSgpXSwgJ2stcmVzZXQnKTtcbmNvbnN0IHNjcm9sbGFibGUkMSA9ICgpID0+IChkaXYkMShbbGlzdCgpXSwgJ2stdGltZS1jb250YWluZXIgay1jb250ZW50IGstc2Nyb2xsYWJsZScpKTtcbmNvbnN0IHRpbWVMaXN0V3JhcHBlciA9ICgpID0+IHtcbiAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGRpdiQxKFtkaXYkMShbc2Nyb2xsYWJsZSQxKCldLCAnay10aW1lLWxpc3QnKV0sICdrLXRpbWUtbGlzdC13cmFwcGVyJywgeyBsZWZ0OiAnLTEwMDAwcHgnLCBwb3NpdGlvbjogJ2Fic29sdXRlJyB9KTtcbn07XG5jb25zdCBUSU1FTElTVF9XUkFQUEVSID0gdGltZUxpc3RXcmFwcGVyKCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGltZVBpY2tlckRPTVNlcnZpY2Uge1xuICAgIGVuc3VyZUhlaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVMaXN0SGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUhlaWdodHMoKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlSGVpZ2h0cyhjb250YWluZXIpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0Q29udGFpbmVyID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuay10aW1lLWxpc3QtY29udGFpbmVyJyk7XG4gICAgICAgIGNvbnN0IGhvc3RDb250YWluZXIgPSBsaXN0Q29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBob3N0Q29udGFpbmVyLmFwcGVuZENoaWxkKFRJTUVMSVNUX1dSQVBQRVIpO1xuICAgICAgICB0aGlzLnRpbWVMaXN0SGVpZ2h0ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuay1zY3JvbGxhYmxlJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJ2xpJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICBob3N0Q29udGFpbmVyLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgIH1cbiAgICBpc0FjdGl2ZShlbGVtZW50KSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpIHx8ICFlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQgfHwgZWxlbWVudCkgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxufVxuVGltZVBpY2tlckRPTVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbmNvbnN0IEhPVVJTX0lOX0RBWSA9IDI0O1xuY29uc3QgY2xhbXBUb1JhbmdlID0gKHJhbmdlVmFsdWUpID0+ICh2YWx1ZSkgPT4gdmFsdWUgJSByYW5nZVZhbHVlO1xuY29uc3QgY2xhbXAgPSBjbGFtcFRvUmFuZ2UoSE9VUlNfSU5fREFZKTtcbmNvbnN0IHN0ZXBwZXIgPSAoc3RhcnQsIHN0ZXApID0+IChpZHgpID0+IGNsYW1wKHN0YXJ0ICsgKGlkeCAqIHN0ZXApKTtcbmNvbnN0IGRpc3RhbmNlRnJvbU1pbiA9ICh2YWx1ZSwgbWluKSA9PiBjbGFtcChIT1VSU19JTl9EQVkgKyB2YWx1ZSAtIG1pbik7XG5jb25zdCBsaW1pdCA9IChib3JkZXJWYWx1ZSkgPT4gKGJhcnJpZXIsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdXNlQmFycmllciA9ICF2YWx1ZSB8fCBnZXREYXRlKGJhcnJpZXIpLmdldFRpbWUoKSA9PT0gZ2V0RGF0ZSh2YWx1ZSkuZ2V0VGltZSgpO1xuICAgIHJldHVybiB1c2VCYXJyaWVyID8gYmFycmllciA6IHNldEhvdXJzKGJhcnJpZXIsIGJvcmRlclZhbHVlKTtcbn07XG5jb25zdCBsaW1pdERvd24gPSBsaW1pdCgwKTtcbmNvbnN0IGxpbWl0VXAgPSBsaW1pdChIT1VSU19JTl9EQVkgLSAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBIb3Vyc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGludGwpIHtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5ib3VuZFJhbmdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ID0gZmFsc2U7XG4gICAgfVxuICAgIGFwcGx5KHZhbHVlLCBjYW5kaWRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHNldEhvdXJzKHZhbHVlLCBjYW5kaWRhdGUuZ2V0SG91cnMoKSk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZShzZXR0aW5ncykge1xuICAgICAgICBjb25zdCB7IGJvdW5kUmFuZ2UgPSB0aGlzLmJvdW5kUmFuZ2UsIGluc2VydFVuZGl2aWRlZE1heCA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4LCBtaW4gPSB0aGlzLm1pbiwgbWF4ID0gdGhpcy5tYXgsIHBhcnQsIHN0ZXAgPSB0aGlzLnN0ZXAgfSA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLmJvdW5kUmFuZ2UgPSBib3VuZFJhbmdlO1xuICAgICAgICB0aGlzLmluc2VydFVuZGl2aWRlZE1heCA9IGluc2VydFVuZGl2aWRlZE1heDtcbiAgICAgICAgdGhpcy50b0xpc3RJdGVtID0gKGhvdXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBzZXRIb3VycyhNSUROSUdIVF9EQVRFLCBob3VyKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5pbnRsLmZvcm1hdERhdGUoZGF0ZSwgcGFydC5wYXR0ZXJuKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgIH1cbiAgICBkYXRhKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgW21pbl0gPSB0aGlzLnJhbmdlKHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICBjb25zdCBnZXRIb3VyID0gc3RlcHBlcihtaW4sIHRoaXMuc3RlcCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRUb0l0ZW0gPSAoaWR4KSA9PiAodGhpcy50b0xpc3RJdGVtKGdldEhvdXIoaWR4KSkpO1xuICAgICAgICBjb25zdCBkYXRhID0gcmFuZ2UoMCwgdGhpcy5jb3VudEZyb21NaW4oc2VsZWN0ZWRWYWx1ZSkpLm1hcChjb252ZXJ0VG9JdGVtKTtcbiAgICAgICAgdGhpcy5hZGRMYXN0KGRhdGEpO1xuICAgICAgICB0aGlzLmFkZE1pc3NpbmcoZGF0YSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpc1JhbmdlQ2hhbmdlZChtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gIWlzRXF1YWwodGhpcy5taW4sIG1pbikgfHwgIWlzRXF1YWwodGhpcy5tYXgsIG1heCk7XG4gICAgfVxuICAgIGxpbWl0UmFuZ2UobWluLCBtYXgsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdW5kUmFuZ2UgPyBbbGltaXREb3duKG1pbiwgdmFsdWUpLCBsaW1pdFVwKG1heCwgdmFsdWUpXSA6IFttaW4sIG1heF07XG4gICAgfVxuICAgIHRvdGFsKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGxhc3QkJDEgPSB0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmlzTGFzdE1pc3NpbmcodmFsdWUpID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IG1pc3NpbmcgPSB0aGlzLmlzTWlzc2luZyh2YWx1ZSkgPyAxIDogMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRGcm9tTWluKHZhbHVlKSArIG1pc3NpbmcgKyBsYXN0JCQxO1xuICAgIH1cbiAgICBzZWxlY3RlZEluZGV4KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kaXZpZGVCeVN0ZXAodmFsdWUpKTtcbiAgICB9XG4gICAgdmFsdWVJbkxpc3QodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hNYXggPSB0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmxhc3RIb3VyKHZhbHVlKSA9PT0gdmFsdWUuZ2V0SG91cnMoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoTWF4IHx8ICF0aGlzLmlzTWlzc2luZyh2YWx1ZSk7XG4gICAgfVxuICAgIGFkZExhc3QoZGF0YSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh0aGlzLnRvTGlzdEl0ZW0odGhpcy5sYXN0SG91cih2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgYWRkTWlzc2luZyhkYXRhLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZUluTGlzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pc3NpbmdJdGVtID0gdGhpcy50b0xpc3RJdGVtKHZhbHVlLmdldEhvdXJzKCkpO1xuICAgICAgICBkYXRhLnNwbGljZSh0aGlzLnNlbGVjdGVkSW5kZXgodmFsdWUpLCAwLCBtaXNzaW5nSXRlbSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb3VudEZyb21NaW4odmFsdWUpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMucmFuZ2UodmFsdWUpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihkaXN0YW5jZUZyb21NaW4obWF4LCBtaW4pIC8gdGhpcy5zdGVwKSArIDE7IC8qIGluY2x1ZGUgbWluICovXG4gICAgfVxuICAgIGlzTWlzc2luZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSkgIT09IHRoaXMuZGl2aWRlQnlTdGVwKHZhbHVlKTtcbiAgICB9XG4gICAgaXNMYXN0TWlzc2luZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01pc3Npbmcoc2V0SG91cnModGhpcy5tYXgsIHRoaXMubGFzdEhvdXIodmFsdWUpKSk7XG4gICAgfVxuICAgIGRpdmlkZUJ5U3RlcCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGlzdGFuY2VGcm9tTWluKHZhbHVlLmdldEhvdXJzKCksIHRoaXMubWluLmdldEhvdXJzKCkpIC8gdGhpcy5zdGVwO1xuICAgIH1cbiAgICBsYXN0SG91cih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZSh2YWx1ZSlbMV07XG4gICAgfVxuICAgIHJhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLmxpbWl0UmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBbbWluLmdldEhvdXJzKCksIG1heC5nZXRIb3VycygpXTtcbiAgICB9XG59XG5Ib3Vyc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkhvdXJzU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH1cbl07XG5cbmNvbnN0IE1JTlVURVNfSU5fSE9VUiA9IDYwO1xuY29uc3QgY2xhbXBUb1JhbmdlJDEgPSAocmFuZ2VWYWx1ZSkgPT4gKHZhbHVlKSA9PiB2YWx1ZSAlIHJhbmdlVmFsdWU7XG5jb25zdCBjbGFtcCQxID0gY2xhbXBUb1JhbmdlJDEoTUlOVVRFU19JTl9IT1VSKTtcbmNvbnN0IHN0ZXBwZXIkMSA9IChzdGFydCwgc3RlcCkgPT4gKGlkeCkgPT4gY2xhbXAkMShzdGFydCArIChpZHggKiBzdGVwKSk7XG5jb25zdCBkaXN0YW5jZUZyb21NaW4kMSA9ICh2YWx1ZSwgbWluKSA9PiBjbGFtcCQxKE1JTlVURVNfSU5fSE9VUiArIHZhbHVlIC0gbWluKTtcbmNvbnN0IGxpbWl0JDEgPSAoYm9yZGVyVmFsdWUpID0+IChiYXJyaWVyLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHVzZUJhcnJpZXIgPSAhdmFsdWUgfHwgYmFycmllci5nZXRIb3VycygpID09PSB2YWx1ZS5nZXRIb3VycygpO1xuICAgIHJldHVybiB1c2VCYXJyaWVyID8gYmFycmllciA6IHNldE1pbnV0ZXMoYmFycmllciwgYm9yZGVyVmFsdWUpO1xufTtcbmNvbnN0IGxpbWl0RG93biQxID0gbGltaXQkMSgwKTtcbmNvbnN0IGxpbWl0VXAkMSA9IGxpbWl0JDEoTUlOVVRFU19JTl9IT1VSIC0gMSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWludXRlc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGludGwpIHtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggPSBmYWxzZTtcbiAgICB9XG4gICAgYXBwbHkodmFsdWUsIGNhbmRpZGF0ZSkge1xuICAgICAgICByZXR1cm4gc2V0TWludXRlcyh2YWx1ZSwgY2FuZGlkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZShzZXR0aW5ncykge1xuICAgICAgICBjb25zdCB7IGluc2VydFVuZGl2aWRlZE1heCA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4LCBtaW4gPSB0aGlzLm1pbiwgbWF4ID0gdGhpcy5tYXgsIHBhcnQsIHN0ZXAgPSB0aGlzLnN0ZXAgfSA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLmluc2VydFVuZGl2aWRlZE1heCA9IGluc2VydFVuZGl2aWRlZE1heDtcbiAgICAgICAgdGhpcy50b0xpc3RJdGVtID0gKG1pbnV0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHNldE1pbnV0ZXMoTUlETklHSFRfREFURSwgbWludXRlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5pbnRsLmZvcm1hdERhdGUoZGF0ZSwgcGFydC5wYXR0ZXJuKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgIH1cbiAgICBkYXRhKHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgW21pbl0gPSB0aGlzLnJhbmdlKHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICBjb25zdCBnZXRNaW51dGUgPSBzdGVwcGVyJDEobWluLCB0aGlzLnN0ZXApO1xuICAgICAgICBjb25zdCBjb252ZXJ0VG9JdGVtID0gKGlkeCkgPT4gKHRoaXMudG9MaXN0SXRlbShnZXRNaW51dGUoaWR4KSkpO1xuICAgICAgICBjb25zdCBkYXRhID0gcmFuZ2UoMCwgdGhpcy5jb3VudEZyb21NaW4oc2VsZWN0ZWRWYWx1ZSkpLm1hcChjb252ZXJ0VG9JdGVtKTtcbiAgICAgICAgdGhpcy5hZGRMYXN0KGRhdGEpO1xuICAgICAgICB0aGlzLmFkZE1pc3NpbmcoZGF0YSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpc1JhbmdlQ2hhbmdlZChtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gIWlzRXF1YWwodGhpcy5taW4sIG1pbikgfHwgIWlzRXF1YWwodGhpcy5tYXgsIG1heCk7XG4gICAgfVxuICAgIGxpbWl0UmFuZ2UobWluLCBtYXgsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbbGltaXREb3duJDEobWluLCB2YWx1ZSksIGxpbWl0VXAkMShtYXgsIHZhbHVlKV07XG4gICAgfVxuICAgIHRvdGFsKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGxhc3QkJDEgPSB0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmlzTGFzdE1pc3NpbmcodmFsdWUpID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IG1pc3NpbmcgPSB0aGlzLmlzTWlzc2luZyh2YWx1ZSkgPyAxIDogMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRGcm9tTWluKHZhbHVlKSArIG1pc3NpbmcgKyBsYXN0JCQxO1xuICAgIH1cbiAgICBzZWxlY3RlZEluZGV4KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5kaXZpZGVCeVN0ZXAodmFsdWUpKTtcbiAgICB9XG4gICAgdmFsdWVJbkxpc3QodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF0Y2hNYXggPSB0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmxhc3RNaW51dGUodmFsdWUpID09PSB2YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHJldHVybiBtYXRjaE1heCB8fCAhdGhpcy5pc01pc3NpbmcodmFsdWUpO1xuICAgIH1cbiAgICBhZGRMYXN0KGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmlzTGFzdE1pc3NpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2godGhpcy50b0xpc3RJdGVtKHRoaXMubGFzdE1pbnV0ZSh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgYWRkTWlzc2luZyhkYXRhLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZUluTGlzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pc3NpbmdJdGVtID0gdGhpcy50b0xpc3RJdGVtKHZhbHVlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIGRhdGEuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSksIDAsIG1pc3NpbmdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvdW50RnJvbU1pbih2YWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5yYW5nZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRpc3RhbmNlRnJvbU1pbiQxKG1heCwgbWluKSAvIHRoaXMuc3RlcCkgKyAxOyAvKiBpbmNsdWRlIG1pbiAqL1xuICAgIH1cbiAgICBpc01pc3NpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXgodmFsdWUpICE9PSB0aGlzLmRpdmlkZUJ5U3RlcCh2YWx1ZSk7XG4gICAgfVxuICAgIGlzTGFzdE1pc3NpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNaXNzaW5nKHNldE1pbnV0ZXModGhpcy5tYXgsIHRoaXMubGFzdE1pbnV0ZSh2YWx1ZSkpKTtcbiAgICB9XG4gICAgZGl2aWRlQnlTdGVwKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkaXN0YW5jZUZyb21NaW4kMSh2YWx1ZS5nZXRNaW51dGVzKCksIHRoaXMubWluLmdldE1pbnV0ZXMoKSkgLyB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIGxhc3RNaW51dGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2UodmFsdWUpWzFdO1xuICAgIH1cbiAgICByYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5saW1pdFJhbmdlKHRoaXMubWluLCB0aGlzLm1heCwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gW21pbi5nZXRNaW51dGVzKCksIG1heC5nZXRNaW51dGVzKCldO1xuICAgIH1cbn1cbk1pbnV0ZXNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5NaW51dGVzU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH1cbl07XG5cbmNvbnN0IFNFQ09ORFNfSU5fSE9VUiA9IDYwO1xuY29uc3QgY2xhbXBUb1JhbmdlJDIgPSAocmFuZ2VWYWx1ZSkgPT4gKHZhbHVlKSA9PiB2YWx1ZSAlIHJhbmdlVmFsdWU7XG5jb25zdCBjbGFtcCQyID0gY2xhbXBUb1JhbmdlJDIoU0VDT05EU19JTl9IT1VSKTtcbmNvbnN0IHN0ZXBwZXIkMiA9IChzdGFydCwgc3RlcCkgPT4gKGlkeCkgPT4gY2xhbXAkMihzdGFydCArIChpZHggKiBzdGVwKSk7XG5jb25zdCBkaXN0YW5jZUZyb21NaW4kMiA9ICh2YWx1ZSwgbWluKSA9PiBjbGFtcCQyKFNFQ09ORFNfSU5fSE9VUiArIHZhbHVlIC0gbWluKTtcbmNvbnN0IGxpbWl0JDIgPSAoYm9yZGVyVmFsdWUpID0+IChiYXJyaWVyLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHVzZUJhcnJpZXIgPSAhdmFsdWUgfHwgYmFycmllci5nZXRIb3VycygpID09PSB2YWx1ZS5nZXRIb3VycygpICYmIGJhcnJpZXIuZ2V0TWludXRlcygpID09PSB2YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgcmV0dXJuIHVzZUJhcnJpZXIgPyBiYXJyaWVyIDogc2V0U2Vjb25kcyhiYXJyaWVyLCBib3JkZXJWYWx1ZSk7XG59O1xuY29uc3QgbGltaXREb3duJDIgPSBsaW1pdCQyKDApO1xuY29uc3QgbGltaXRVcCQyID0gbGltaXQkMihTRUNPTkRTX0lOX0hPVVIgLSAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTZWNvbmRzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaW50bCkge1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmluc2VydFVuZGl2aWRlZE1heCA9IGZhbHNlO1xuICAgIH1cbiAgICBhcHBseSh2YWx1ZSwgY2FuZGlkYXRlKSB7XG4gICAgICAgIHJldHVybiBzZXRTZWNvbmRzKHZhbHVlLCBjYW5kaWRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICB9XG4gICAgY29uZmlndXJlKHNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHsgaW5zZXJ0VW5kaXZpZGVkTWF4ID0gdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXgsIG1pbiA9IHRoaXMubWluLCBtYXggPSB0aGlzLm1heCwgcGFydCwgc3RlcCA9IHRoaXMuc3RlcCB9ID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ID0gaW5zZXJ0VW5kaXZpZGVkTWF4O1xuICAgICAgICB0aGlzLnRvTGlzdEl0ZW0gPSAobWludXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gc2V0U2Vjb25kcyhNSUROSUdIVF9EQVRFLCBtaW51dGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmludGwuZm9ybWF0RGF0ZShkYXRlLCBwYXJ0LnBhdHRlcm4pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgfVxuICAgIGRhdGEoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluXSA9IHRoaXMucmFuZ2Uoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGdldFNlY29uZCA9IHN0ZXBwZXIkMihtaW4sIHRoaXMuc3RlcCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRUb0l0ZW0gPSAoaWR4KSA9PiAodGhpcy50b0xpc3RJdGVtKGdldFNlY29uZChpZHgpKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByYW5nZSgwLCB0aGlzLmNvdW50RnJvbU1pbihzZWxlY3RlZFZhbHVlKSkubWFwKGNvbnZlcnRUb0l0ZW0pO1xuICAgICAgICB0aGlzLmFkZExhc3QoZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZyhkYXRhLCBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlzUmFuZ2VDaGFuZ2VkKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiAhaXNFcXVhbCh0aGlzLm1pbiwgbWluKSB8fCAhaXNFcXVhbCh0aGlzLm1heCwgbWF4KTtcbiAgICB9XG4gICAgbGltaXRSYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtsaW1pdERvd24kMihtaW4sIHZhbHVlKSwgbGltaXRVcCQyKG1heCwgdmFsdWUpXTtcbiAgICB9XG4gICAgdG90YWwodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbGFzdCQkMSA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkgPyAxIDogMDtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IHRoaXMuaXNNaXNzaW5nKHZhbHVlKSA/IDEgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEZyb21NaW4odmFsdWUpICsgbWlzc2luZyArIGxhc3QkJDE7XG4gICAgfVxuICAgIHNlbGVjdGVkSW5kZXgodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmRpdmlkZUJ5U3RlcCh2YWx1ZSkpO1xuICAgIH1cbiAgICB2YWx1ZUluTGlzdCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXRjaE1heCA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMubGFzdFNlY29uZCh2YWx1ZSkgPT09IHZhbHVlLmdldFNlY29uZHMoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoTWF4IHx8ICF0aGlzLmlzTWlzc2luZyh2YWx1ZSk7XG4gICAgfVxuICAgIGRpdmlkZUJ5U3RlcCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGlzdGFuY2VGcm9tTWluJDIodmFsdWUuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbi5nZXRTZWNvbmRzKCkpIC8gdGhpcy5zdGVwO1xuICAgIH1cbiAgICBhZGRMYXN0KGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmluc2VydFVuZGl2aWRlZE1heCAmJiB0aGlzLmlzTGFzdE1pc3NpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2godGhpcy50b0xpc3RJdGVtKHRoaXMubGFzdFNlY29uZCh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgYWRkTWlzc2luZyhkYXRhLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZUluTGlzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1pc3NpbmdJdGVtID0gdGhpcy50b0xpc3RJdGVtKHZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICAgIGRhdGEuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSksIDAsIG1pc3NpbmdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvdW50RnJvbU1pbih2YWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5yYW5nZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRpc3RhbmNlRnJvbU1pbiQyKG1heCwgbWluKSAvIHRoaXMuc3RlcCkgKyAxOyAvKiBpbmNsdWRlIG1pbiAqL1xuICAgIH1cbiAgICBpc01pc3NpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXgodmFsdWUpICE9PSB0aGlzLmRpdmlkZUJ5U3RlcCh2YWx1ZSk7XG4gICAgfVxuICAgIGlzTGFzdE1pc3NpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNaXNzaW5nKHNldFNlY29uZHModGhpcy5tYXgsIHRoaXMubGFzdFNlY29uZCh2YWx1ZSkpKTtcbiAgICB9XG4gICAgbGFzdFNlY29uZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZSh2YWx1ZSlbMV07XG4gICAgfVxuICAgIHJhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLmxpbWl0UmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBbbWluLmdldFNlY29uZHMoKSwgbWF4LmdldFNlY29uZHMoKV07XG4gICAgfVxufVxuU2Vjb25kc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNlY29uZHNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuY29uc3Qgc2V0SG91cnMkMSA9IChkYXRlLCBob3VycykgPT4ge1xuICAgIGNvbnN0IGNsb25lID0gY2xvbmVEYXRlKGRhdGUpO1xuICAgIGNsb25lLnNldEhvdXJzKGhvdXJzKTtcbiAgICByZXR1cm4gY2xvbmU7XG59O1xuY29uc3QgaXNBTSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPCAxMjtcbmNvbnN0IGlzUE0gPSAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmICghdmFsdWUgfHwgdmFsdWUgPiAxMSk7XG5jb25zdCBpblJhbmdlID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gKCghbWluICYmICFtYXgpIHx8ICh2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4KSk7XG5jb25zdCBpblJldmVyc2VSYW5nZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+ICgoIW1pbiAmJiAhbWF4KSB8fCB2YWx1ZSA+PSBtaW4gfHwgdmFsdWUgPD0gbWF4KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEYXlQZXJpb2RTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihpbnRsKSB7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhcHBseSh2YWx1ZSwgY2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB2YWx1ZS5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBob3VyQU0gPSBpc0FNKGhvdXIpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVBTSA9IGlzQU0oY2FuZGlkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICBpZiAoKGhvdXJBTSAmJiBjYW5kaWRhdGVBTSkgfHwgKCFob3VyQU0gJiYgIWNhbmRpZGF0ZUFNKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFttaW4sIG1heCA9IDI0XSA9IHRoaXMubm9ybWFsaXplZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGhvdXIgKyAoY2FuZGlkYXRlQU0gPyAtMTIgOiAxMik7XG4gICAgICAgIHJldHVybiBzZXRIb3VycyQxKHZhbHVlLCBNYXRoLm1pbihNYXRoLm1heChtaW4sIHJlc3VsdCksIChtYXggfHwgMjQpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25maWd1cmUoc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3QgeyBtaW4gPSB0aGlzLm1pbiwgbWF4ID0gdGhpcy5tYXgsIHBhcnQgPSB0aGlzLnBhcnQgfSA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBkYXRhKF8pIHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSB0aGlzLnBhcnQubmFtZXM7XG4gICAgICAgIGlmICghbmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLm5vcm1hbGl6ZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBkYXlQZXJpb2QgPSB0aGlzLmludGwuZGF0ZUZvcm1hdE5hbWVzKG5hbWVzKTtcbiAgICAgICAgaWYgKGlzQU0obWluKSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgdGV4dDogZGF5UGVyaW9kLmFtLCB2YWx1ZTogc2V0SG91cnMkMSh0aGlzLm1pbiwgbWluKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQTShtYXgpKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2goeyB0ZXh0OiBkYXlQZXJpb2QucG0sIHZhbHVlOiBzZXRIb3VycyQxKHRoaXMubWluLCBNYXRoLm1heCgxMiwgbWF4KSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWluLmdldEhvdXJzKCkgIT09IG1pbiA/IGRhdGEucmV2ZXJzZSgpIDogZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzUmFuZ2VDaGFuZ2VkKF8sIF9fKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGxpbWl0UmFuZ2UobWluLCBtYXgsIF8pIHtcbiAgICAgICAgcmV0dXJuIFttaW4sIG1heF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b3RhbCgpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMubm9ybWFsaXplZFJhbmdlKCk7XG4gICAgICAgIGlmICghbWluICYmICFtYXgpIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW4gPiAxMSB8fCBtYXggPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZWxlY3RlZEluZGV4KHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZUluTGlzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IodmFsdWUuZ2V0SG91cnMoKSAvIDEyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluLmdldEhvdXJzKCkgPT09IHRoaXMubm9ybWFsaXplZFJhbmdlKClbMF0gPyBpbmRleCA6IChpbmRleCA9PT0gMCA/IDEgOiAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHZhbHVlSW5MaXN0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJldmVyc2UgPSB0aGlzLm1pbi5nZXRIb3VycygpICE9PSB0aGlzLm5vcm1hbGl6ZWRSYW5nZSgpWzBdO1xuICAgICAgICBjb25zdCBpc0luUmFuZ2UgPSByZXZlcnNlID8gaW5SZXZlcnNlUmFuZ2UgOiBpblJhbmdlO1xuICAgICAgICByZXR1cm4gaXNJblJhbmdlKHZhbHVlLmdldEhvdXJzKCksIHRoaXMubWluLmdldEhvdXJzKCksIHRoaXMubWF4LmdldEhvdXJzKCkpO1xuICAgIH1cbiAgICBub3JtYWxpemVkUmFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IG1pbkhvdXIgPSB0aGlzLm1pbi5nZXRIb3VycygpO1xuICAgICAgICBjb25zdCBtYXhIb3VyID0gdGhpcy5tYXguZ2V0SG91cnMoKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIE1hdGgubWluKG1pbkhvdXIsIG1heEhvdXIpLFxuICAgICAgICAgICAgTWF0aC5tYXgobWluSG91ciwgbWF4SG91cilcbiAgICAgICAgXTtcbiAgICB9XG59XG5EYXlQZXJpb2RTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXlQZXJpb2RTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuLyogdHNsaW50OmRpc2FibGU6Y29tcG9uZW50LXNlbGVjdG9yLW5hbWUgIGNvbXBvbmVudC1zZWxlY3Rvci10eXBlICovXG5jb25zdCBTTkFQX1RIUkVTSE9MRCA9IDAuMDU7IC8vJSBvZiB0aGUgaXRlbSBoZWlnaHRcbmNvbnN0IFNDUk9MTF9USFJFU0hPTEQgPSAyOyAvLzwgMnB4IHRocmVzaG9sZFxuY29uc3QgbmlsID0gKCkgPT4gKG51bGwpO1xuY29uc3QgZ2V0dGVycyA9IHtcbiAgICAzNTogKGRhdGEsIF8pID0+IGRhdGFbZGF0YS5sZW5ndGggLSAxXSxcbiAgICAzNjogKGRhdGEsIF8pID0+IGRhdGFbMF0sXG4gICAgMzg6IChkYXRhLCBpbmRleCkgPT4gZGF0YVtpbmRleCAtIDFdLFxuICAgIDQwOiAoZGF0YSwgaW5kZXgpID0+IGRhdGFbaW5kZXggKyAxXVxufTtcbmNvbnN0IHNlcnZpY2VzJDEgPSB7XG4gICAgW1RJTUVfUEFSVC5kYXlwZXJpb2RdOiBEYXlQZXJpb2RTZXJ2aWNlLFxuICAgIFtUSU1FX1BBUlQuaG91cl06IEhvdXJzU2VydmljZSxcbiAgICBbVElNRV9QQVJULm1pbnV0ZV06IE1pbnV0ZXNTZXJ2aWNlLFxuICAgIFtUSU1FX1BBUlQuc2Vjb25kXTogU2Vjb25kc1NlcnZpY2Vcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGltZUxpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGluamVjdG9yLCBkb20sIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5kb20gPSBkb207XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5taW4gPSBjbG9uZURhdGUoTUlETklHSFRfREFURSk7XG4gICAgICAgIHRoaXMubWF4ID0gY2xvbmVEYXRlKE1BWF9USU1FKTtcbiAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudENsYXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5za2lwID0gMDtcbiAgICAgICAgdGhpcy50b3RhbCA9IDYwO1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgfVxuICAgIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyB1bmRlZmluZWQgOiAwO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnBhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KHNlcnZpY2VzJDFbdGhpcy5wYXJ0LnR5cGVdKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5jb25maWd1cmUodGhpcy5zZXJ2aWNlU2V0dGluZ3MoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSBjaGFuZ2VzLnZhbHVlIHx8IHt9O1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5zZXJ2aWNlLmxpbWl0UmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2UuaXNSYW5nZUNoYW5nZWQobWluLCBtYXgpIHx8IGNoYW5nZXMubWluIHx8IGNoYW5nZXMubWF4IHx8IGNoYW5nZXMuc3RlcCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuY29uZmlndXJlKHRoaXMuc2VydmljZVNldHRpbmdzKHsgbWluLCBtYXggfSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNraXAgdGhlIHJlbmRlcmluZyBvZiB0aGUgbGlzdCB3aGVuZXZlciBwb3NzaWJsZVxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5sZW5ndGggfHwgdGhpcy5oYXNNaXNzaW5nVmFsdWUodmFsdWVDaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5zZXJ2aWNlLmRhdGEodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYW5pbWF0ZVRvSW5kZXggPSB0aGlzLmFuaW1hdGVUb0luZGV4ICYmIHRoaXMudGV4dEhhc0NoYW5nZWQodmFsdWVDaGFuZ2VzKTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRoaXMuc2VydmljZS50b3RhbCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb20uZW5zdXJlSGVpZ2h0cygpO1xuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSB0aGlzLmRvbS5pdGVtSGVpZ2h0O1xuICAgICAgICB0aGlzLmxpc3RIZWlnaHQgPSB0aGlzLmRvbS50aW1lTGlzdEhlaWdodDtcbiAgICAgICAgdGhpcy50b3BPZmZzZXQgPSAodGhpcy5saXN0SGVpZ2h0IC0gdGhpcy5pdGVtSGVpZ2h0KSAvIDI7XG4gICAgICAgIHRoaXMuYm90dG9tT2Zmc2V0ID0gdGhpcy5saXN0SGVpZ2h0IC0gdGhpcy5pdGVtSGVpZ2h0O1xuICAgICAgICB0aGlzLnRvcFRocmVzaG9sZCA9IHRoaXMuaXRlbUhlaWdodCAqIFNOQVBfVEhSRVNIT0xEO1xuICAgICAgICB0aGlzLmJvdHRvbVRocmVzaG9sZCA9IHRoaXMuaXRlbUhlaWdodCAqICgxIC0gU05BUF9USFJFU0hPTEQpO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSBgdHJhbnNsYXRlWSgke3RoaXMudG9wT2Zmc2V0fXB4KWA7XG4gICAgICAgIHRoaXMuc3R5bGUgPSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlLCAnLW1zLXRyYW5zZm9ybSc6IHRyYW5zbGF0ZSB9O1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5iaW5kQ2FsbGJhY2sgPT4gdW5iaW5kQ2FsbGJhY2soKSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxPbmNlKChpbmRleCkgPT4gdGhpcy52aXJ0dWFsaXphdGlvbi5zY3JvbGxUb0luZGV4KGluZGV4KSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxPbmNlKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hbmltYXRlVG9JbmRleCA/ICdhbmltYXRlVG9JbmRleCcgOiAnc2Nyb2xsVG9JbmRleCc7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uW2FjdGlvbl0oaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYW5kbGVDaGFuZ2UoZGF0YUl0ZW0pIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5zZXJ2aWNlLmFwcGx5KHRoaXMudmFsdWUsIGRhdGFJdGVtLnZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUuZ2V0VGltZSgpID09PSBjYW5kaWRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gdGhpcy5kYXRhLmluZGV4T2YoZGF0YUl0ZW0pO1xuICAgICAgICB0aGlzLnZhbHVlID0gY2FuZGlkYXRlO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgaGFuZGxlSXRlbUNsaWNrKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNsb3Nlc3RJblNjb3BlKGFyZ3MudGFyZ2V0LCBub2RlID0+IG5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLXRpbWVsaXN0LWl0ZW0taW5kZXgnKSwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLmdldEF0dHJpYnV0ZSgnZGF0YS10aW1lbGlzdC1pdGVtLWluZGV4Jyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0aGlzLmRhdGFbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBob3N0IGVsZW1lbnQgb2YgdGhlIFRpbWVMaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwidGltZWxpc3QuZm9jdXMoKVwiPkZvY3VzIFRpbWVMaXN0PC9idXR0b24+XG4gICAgICogIDxrZW5kby10aW1lbGlzdCAjdGltZWxpc3Q+PC9rZW5kby10aW1lbGlzdD5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBUaW1lTGlzdCBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICAgIGl0ZW1PZmZzZXQoc2Nyb2xsVG9wKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXgodGhpcy52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy52aXJ0dWFsaXphdGlvbi5hY3RpdmVJbmRleCgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnZpcnR1YWxpemF0aW9uLml0ZW1PZmZzZXQoYWN0aXZlSW5kZXgpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKE1hdGguY2VpbChzY3JvbGxUb3ApIC0gb2Zmc2V0KTtcbiAgICAgICAgaWYgKHZhbHVlSW5kZXggPT09IGFjdGl2ZUluZGV4ICYmIGRpc3RhbmNlIDwgU0NST0xMX1RIUkVTSE9MRCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxVcCA9IHZhbHVlSW5kZXggPiBhY3RpdmVJbmRleDtcbiAgICAgICAgY29uc3QgbW92ZVRvTmV4dCA9IHNjcm9sbFVwICYmIGRpc3RhbmNlID49IHRoaXMuYm90dG9tVGhyZXNob2xkIHx8ICFzY3JvbGxVcCAmJiBkaXN0YW5jZSA+IHRoaXMudG9wVGhyZXNob2xkO1xuICAgICAgICByZXR1cm4gbW92ZVRvTmV4dCA/IHRoaXMudmlydHVhbGl6YXRpb24uaXRlbU9mZnNldChhY3RpdmVJbmRleCArIDEpIDogb2Zmc2V0O1xuICAgIH1cbiAgICBoYXNNaXNzaW5nVmFsdWUoeyBwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUgfSkge1xuICAgICAgICBjb25zdCBpc1ByZXZpb3VzTWlzc2luZyA9IHByZXZpb3VzVmFsdWUgJiYgIXRoaXMuc2VydmljZS52YWx1ZUluTGlzdChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50TWlzc2luZyA9IGN1cnJlbnRWYWx1ZSAmJiAhdGhpcy5zZXJ2aWNlLnZhbHVlSW5MaXN0KGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBpc1ByZXZpb3VzTWlzc2luZyB8fCBpc0N1cnJlbnRNaXNzaW5nO1xuICAgIH1cbiAgICBzY3JvbGxPbmNlKGFjdGlvbikge1xuICAgICAgICBpZiAodGhpcy5pbmRleFRvU2Nyb2xsICE9PSAtMSkge1xuICAgICAgICAgICAgYWN0aW9uKHRoaXMuaW5kZXhUb1Njcm9sbCk7XG4gICAgICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXJ2aWNlU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBib3VuZFJhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgIGluc2VydFVuZGl2aWRlZE1heDogZmFsc2UsXG4gICAgICAgICAgICBtYXg6IHRoaXMubWF4LFxuICAgICAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgICAgIHBhcnQ6IHRoaXMucGFydCxcbiAgICAgICAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgc2V0dGluZ3MpO1xuICAgICAgICByZXN1bHQuYm91bmRSYW5nZSA9IHJlc3VsdC5wYXJ0LnR5cGUgIT09ICdob3VyJztcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc2VsZWN0ZWRJbmRleCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5zZWxlY3RlZEluZGV4KHZhbHVlKTtcbiAgICB9XG4gICAgdGV4dEhhc0NoYW5nZWQoeyBwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUgfSkge1xuICAgICAgICBpZiAoIXByZXZpb3VzVmFsdWUgfHwgIWN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9sZERhdGEgPSB0aGlzLmRhdGFbdGhpcy5zZWxlY3RlZEluZGV4KHByZXZpb3VzVmFsdWUpXTtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZGF0YVt0aGlzLnNlbGVjdGVkSW5kZXgoY3VycmVudFZhbHVlKV07XG4gICAgICAgIHJldHVybiBvbGREYXRhICYmIG5ld0RhdGEgJiYgb2xkRGF0YS50ZXh0ICE9PSBuZXdEYXRhLnRleHQ7XG4gICAgfVxuICAgIGhhbmRsZUtleURvd24oZSkge1xuICAgICAgICBjb25zdCBnZXR0ZXIgPSBnZXR0ZXJzW2Uua2V5Q29kZV0gfHwgbmlsO1xuICAgICAgICBjb25zdCBkYXRhSXRlbSA9IGdldHRlcih0aGlzLmRhdGEsIHRoaXMuc2VydmljZS5zZWxlY3RlZEluZGV4KHRoaXMudmFsdWUpKTtcbiAgICAgICAgaWYgKGRhdGFJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShkYXRhSXRlbSk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnZpcnR1YWxpemF0aW9uXG4gICAgICAgICAgICAuc2Nyb2xsJCgpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgbWFwKChlKSA9PiBlLnRhcmdldC5zY3JvbGxUb3ApLCBtYXAoKHRvcCkgPT4gdGhpcy5pdGVtT2Zmc2V0KHRvcCkpLCBtYXAoKGl0ZW1PZmZzZXQpID0+IHRoaXMudmlydHVhbGl6YXRpb24uaXRlbUluZGV4KGl0ZW1PZmZzZXQpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbi5zY3JvbGxUb0luZGV4KGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YVtpbmRleF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdtb3VzZW92ZXInLCAoKSA9PiAhdGhpcy5pc0FjdGl2ZSAmJiB0aGlzLmZvY3VzKCkpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoKSA9PiB0aGlzLmZvY3VzKCkpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnYmx1cicsICgpID0+IHRoaXMuaXNBY3RpdmUgPSBmYWxzZSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdmb2N1cycsICgpID0+IHRoaXMuaXNBY3RpdmUgPSB0cnVlKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleURvd24uYmluZCh0aGlzKSkpO1xuICAgIH1cbn1cblRpbWVMaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby10aW1lbGlzdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8a2VuZG8tdmlydHVhbGl6YXRpb25cbiAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgIFt0YWtlXT1cInRvdGFsXCJcbiAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcbiAgICAgICAgW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiXG4gICAgICAgIFttYXhTY3JvbGxEaWZmZXJlbmNlXT1cImxpc3RIZWlnaHRcIlxuICAgICAgICBbdG9wT2Zmc2V0XT1cInRvcE9mZnNldFwiXG4gICAgICAgIFtib3R0b21PZmZzZXRdPVwiYm90dG9tT2Zmc2V0XCJcbiAgICAgICAgY2xhc3M9XCJrLXRpbWUtY29udGFpbmVyXCJcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgICAgPHVsIFtuZ1N0eWxlXT1cInN0eWxlXCIgY2xhc3M9XCJrLXJlc2V0XCJcbiAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlSXRlbUNsaWNrXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGE7IGxldCBpbmRleCA9IGluZGV4O1wiIGNsYXNzPVwiay1pdGVtXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpbWVsaXN0LWl0ZW0taW5kZXhdPVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2l0ZW0udGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2tlbmRvLXZpcnR1YWxpemF0aW9uPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRpbWVMaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogSW5qZWN0b3IgfSxcbiAgICB7IHR5cGU6IFRpbWVQaWNrZXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuVGltZUxpc3RDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhcnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB2aXJ0dWFsaXphdGlvbjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbVmlydHVhbGl6YXRpb25Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImF0dHIudGFiaW5kZXhcIixdIH1dLFxuICAgIGNvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay10aW1lLWxpc3RcIixdIH1dXG59O1xuXG5jb25zdCBpc0VxdWFsVGlsbE1pbnV0ZSA9ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZS5nZXRIb3VycygpID09PSBtaW4uZ2V0SG91cnMoKSAmJiB2YWx1ZS5nZXRNaW51dGVzKCkgPT09IG1pbi5nZXRNaW51dGVzKCk7XG5jb25zdCBpc0VxdWFsVGlsbFNlY29uZCA9ICh2YWx1ZSwgbWluKSA9PiBpc0VxdWFsVGlsbE1pbnV0ZSh2YWx1ZSwgbWluKSAmJiB2YWx1ZS5nZXRTZWNvbmRzKCkgPT09IG1pbi5nZXRTZWNvbmRzKCk7XG5jb25zdCBpc0VxdWFsVGlsbE1pbGxpc2Vjb25kID0gKHZhbHVlLCBtaW4pID0+IGlzRXF1YWxUaWxsU2Vjb25kKHZhbHVlLCBtaW4pICYmIHZhbHVlLmdldE1pbGxpc2Vjb25kcygpID09PSBtaW4uZ2V0TWlsbGlzZWNvbmRzKCk7XG5jb25zdCDJtTMkNiA9ICh2YWx1ZSkgPT4gdmFsdWUuZ2V0SG91cnMoKSwgybU0JDIgPSAoXywgbWluKSA9PiBtaW4uZ2V0SG91cnMoKSwgybU1JDEgPSAodmFsdWUpID0+IHZhbHVlLmdldE1pbnV0ZXMoKSwgybU2JDEgPSAodmFsdWUsIG1pbikgPT4gaXNFcXVhbFRpbGxNaW51dGUodmFsdWUsIG1pbikgPyBtaW4uZ2V0TWludXRlcygpIDogMCwgybU3JDEgPSAodmFsdWUpID0+IHZhbHVlLmdldFNlY29uZHMoKSwgybU4JDEgPSAodmFsdWUsIG1pbikgPT4gaXNFcXVhbFRpbGxTZWNvbmQodmFsdWUsIG1pbikgPyBtaW4uZ2V0U2Vjb25kcygpIDogMCwgybU5JDEgPSAodmFsdWUpID0+IHZhbHVlLmdldE1pbGxpc2Vjb25kcygpLCDJtTEwJDEgPSAodmFsdWUsIG1pbikgPT4gaXNFcXVhbFRpbGxNaWxsaXNlY29uZCh2YWx1ZSwgbWluKSA/IG1pbi5nZXRNaWxsaXNlY29uZHMoKSA6IDA7XG5jb25zdCBkZWZhdWx0R2V0dGVycyA9IFtcbiAgICB7XG4gICAgICAgIHR5cGU6IFRJTUVfUEFSVC5ob3VyLFxuICAgICAgICBnZXR0ZXI6IMm1MyQ2LFxuICAgICAgICBtaW5HZXR0ZXI6IMm1NCQyXG4gICAgfSwge1xuICAgICAgICB0eXBlOiBUSU1FX1BBUlQubWludXRlLFxuICAgICAgICBnZXR0ZXI6IMm1NSQxLFxuICAgICAgICBtaW5HZXR0ZXI6IMm1NiQxXG4gICAgfSwge1xuICAgICAgICB0eXBlOiBUSU1FX1BBUlQuc2Vjb25kLFxuICAgICAgICBnZXR0ZXI6IMm1NyQxLFxuICAgICAgICBtaW5HZXR0ZXI6IMm1OCQxXG4gICAgfSwge1xuICAgICAgICB0eXBlOiBUSU1FX1BBUlQubWlsbGlzZWNvbmQsXG4gICAgICAgIGdldHRlcjogybU5JDEsXG4gICAgICAgIG1pbkdldHRlcjogybUxMCQxXG4gICAgfVxuXTtcbmNvbnN0IGxlZnQgPSBnZXR0ZXIgPT4gKG9yaWdpbiwgXykgPT4gZ2V0dGVyKG9yaWdpbik7XG5jb25zdCByaWdodCA9IGdldHRlciA9PiAoXywgY2FuZGlkYXRlKSA9PiBnZXR0ZXIoY2FuZGlkYXRlKTtcbmNvbnN0IGNvbnZlcnRUb09iamVjdCA9IChwYXJ0cykgPT4gcGFydHMucmVkdWNlKChvYmosIHApID0+IHsgb2JqW3AudHlwZV0gPSBwLnR5cGU7IHJldHVybiBvYmo7IH0sIHt9KTtcbmNvbnN0IGdldHRlckJ5UGFydCA9IHBhcnRzID0+IGcgPT4gcGFydHNbZy50eXBlXSA/IHJpZ2h0KGcuZ2V0dGVyKSA6IGxlZnQoZy5nZXR0ZXIpO1xuY29uc3QgZ2V0dGVyc0ZhY3RvcnkgPSBnZXR0ZXJzID0+IHBhcnRzID0+IChnZXR0ZXJzLm1hcChnZXR0ZXJCeVBhcnQoY29udmVydFRvT2JqZWN0KHBhcnRzKSkpKTtcbmNvbnN0IHNuYXBWYWx1ZSA9IChnZXR0ZXIsIG1pbkdldHRlciwgc3RlcCkgPT4gKGRhdGUsIG1pbikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0dGVyKGRhdGUpO1xuICAgIGNvbnN0IG1pblZhbHVlID0gbWluR2V0dGVyKGRhdGUsIG1pbik7XG4gICAgY29uc3QgcmVzdCA9IHZhbHVlIC0gbWluVmFsdWU7XG4gICAgaWYgKHJlc3QgPCAwKSB7XG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgbW9kID0gcmVzdCAlIHN0ZXA7XG4gICAgcmV0dXJuIHZhbHVlIC0gbW9kICsgKG1vZCA+IHN0ZXAgLyAyID8gc3RlcCA6IDApO1xufTtcbmNvbnN0IHNuYXBwZXJzRmFjdG9yeSA9IChnZXR0ZXJzKSA9PiBzdGVwcyA9PiAoZ2V0dGVycy5tYXAoZyA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2cudHlwZV07XG4gICAgcmV0dXJuIHN0ZXAgPyBzbmFwVmFsdWUoZy5nZXR0ZXIsIGcubWluR2V0dGVyLCBzdGVwKSA6IGcuZ2V0dGVyO1xufSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdlbmVyYXRlR2V0dGVycyA9IGdldHRlcnNGYWN0b3J5KGRlZmF1bHRHZXR0ZXJzKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZW5lcmF0ZVNuYXBwZXJzID0gc25hcHBlcnNGYWN0b3J5KGRlZmF1bHRHZXR0ZXJzKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB2YWx1ZU1lcmdlciA9IGdldHRlcnMgPT4gKG9yaWdpbiwgY2FuZGlkYXRlKSA9PiB7XG4gICAgb3JpZ2luLnNldEhvdXJzKC4uLmdldHRlcnMubWFwKGcgPT4gZyhvcmlnaW4sIGNhbmRpZGF0ZSkpKTtcbiAgICByZXR1cm4gb3JpZ2luO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzbmFwVGltZSA9IHNuYXBwZXJzID0+IChjYW5kaWRhdGUsIG1pbikgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICBkYXRlLnNldEhvdXJzKC4uLnNuYXBwZXJzLm1hcChzID0+IHMoZGF0ZSwgbWluKSkpO1xuICAgIHJldHVybiBkYXRlO1xufTtcblxuY29uc3QgbGlzdFJlZHVjZXIgPSAoc3RhdGUsIGxpc3QsIGlkeCwgYWxsKSA9PiB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCB8fCAhbGlzdC5pc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBbe1xuICAgICAgICAgICAgbmV4dDogYWxsW2lkeCArIDFdIHx8IGxpc3QsXG4gICAgICAgICAgICBwcmV2OiBhbGxbaWR4IC0gMV0gfHwgbGlzdFxuICAgICAgICB9XTtcbn07XG52YXIgRGlyZWN0aW9uO1xuKGZ1bmN0aW9uIChEaXJlY3Rpb24pIHtcbiAgICBEaXJlY3Rpb25bRGlyZWN0aW9uW1wiTGVmdFwiXSA9IDBdID0gXCJMZWZ0XCI7XG4gICAgRGlyZWN0aW9uW0RpcmVjdGlvbltcIlJpZ2h0XCJdID0gMV0gPSBcIlJpZ2h0XCI7XG59KShEaXJlY3Rpb24gfHwgKERpcmVjdGlvbiA9IHt9KSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBSZXByZXNlbnRzIHRoZSBLZW5kbyBVSSBUaW1lU2VsZWN0b3IgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICovXG5jbGFzcyBUaW1lU2VsZWN0b3JDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgY2RyLCBlbGVtZW50LCBpbnRsLCBkb20sIHpvbmUsIHJlbmRlcmVyLCBwaWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5kb20gPSBkb207XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlID0gcGlja2VyU2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tcG9uZW50Q2xhc3MgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB0aW1lIGZvcm1hdCB1c2VkIHRvIGRpc3BsYXkgdGhlIHRpbWUgbGlzdCBjb2x1bW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb3JtYXQgPSAndCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IHZhbGlkIHRpbWUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1pbiA9IGNsb25lRGF0ZShNSU5fVElNRSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGJpZ2dlc3QgdmFsaWQgdGltZSB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWF4ID0gY2xvbmVEYXRlKE1BWF9USU1FKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSAqKkNhbmNlbCoqIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgKipTZXQqKiBidXR0b24gaW4gdGhlIHBvcHVwLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZXRCdXR0b24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlICoqTm93KiogYnV0dG9uIGluIHRoZSBwb3B1cC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBJZiB0aGUgY3VycmVudCB0aW1lIGlzIG91dCBvZiByYW5nZSBvciB0aGUgaW5jcmVtZW50YWwgc3RlcCBpcyBncmVhdGVyIHRoYW4gYDFgLCB0aGUgKipOb3cqKiBidXR0b24gd2lsbCBiZSBoaWRkZW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIFRpbWVTZWxlY3RvciBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgVGltZVNlbGVjdG9yIGNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGNhbmNlbHMgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZVJlamVjdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dOb3dCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9hY3RpdmVMaXN0SW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5fc3RlcHMgPSB7fTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLnRpbWVTZWxlY3RvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgaW5jcmVtZW50YWwgc3RlcHMgb2YgdGhlIFRpbWVTZWxlY3Rvci5cbiAgICAgKlxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICogLSBgaG91cjogTnVtYmVyYCZtZGFzaDtDb250cm9scyB0aGUgaW5jcmVtZW50YWwgc3RlcCBvZiB0aGUgaG91ciB2YWx1ZS5cbiAgICAgKiAtIGBtaW51dGU6IE51bWJlcmAmbWRhc2g7Q29udHJvbHMgdGhlIGluY3JlbWVudGFsIHN0ZXAgb2YgdGhlIG1pbnV0ZSB2YWx1ZS5cbiAgICAgKiAtIGBzZWNvbmQ6IE51bWJlcmAmbWRhc2g7Q29udHJvbHMgdGhlIGluY3JlbWVudGFsIHN0ZXAgb2YgdGhlIHNlY29uZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICogIDxrZW5kby10aW1lc2VsZWN0b3IgZm9ybWF0PVwiSEg6bW06c3NcIiBbc3RlcHNdPVwic3RlcHNcIj48L2tlbmRvLXRpbWVzZWxlY3Rvcj5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgIHB1YmxpYyBzdGVwcyA9IHsgaG91cjogMiwgbWludXRlOiAxNSwgc2Vjb25kOiAxNSB9O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqID4gSWYgdGhlIGluY3JlbWVudGFsIHN0ZXAgaXMgZ3JlYXRlciB0aGFuIGAxYCwgdGhlICoqTm93KiogYnV0dG9uIHdpbGwgYmUgaGlkZGVuLlxuICAgICAqL1xuICAgIHNldCBzdGVwcyhzdGVwcykge1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHN0ZXBzIHx8IHt9O1xuICAgIH1cbiAgICBnZXQgc3RlcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcztcbiAgICB9XG4gICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudCA9IHRpbWVJblJhbmdlKHRoaXMuc25hcFRpbWUoY2xvbmVEYXRlKHZhbHVlIHx8IE1JRE5JR0hUX0RBVEUpLCB0aGlzLm1pbiksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICAgIH1cbiAgICBnZXQgYWN0aXZlTGlzdEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTGlzdEluZGV4O1xuICAgIH1cbiAgICBzZXQgYWN0aXZlTGlzdEluZGV4KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUxpc3RJbmRleCA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMudGltZUxpc3RXcmFwcGVycyB8fCAhdGhpcy50aW1lTGlzdFdyYXBwZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZUxpc3RXcmFwcGVycy5mb3JFYWNoKGxpc3RXcmFwcGVyID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MobGlzdFdyYXBwZXIubmF0aXZlRWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RJbmRleCA9IHRoaXMubGlzdEluZGV4KHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRXcmFwcGVyID0gdGhpcy50aW1lTGlzdFdyYXBwZXJzLnRvQXJyYXkoKVtsaXN0SW5kZXhdO1xuICAgICAgICAgICAgaWYgKGZvY3VzZWRXcmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhmb2N1c2VkV3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5sb2NhbGl6YXRpb25cbiAgICAgICAgICAgICAgICAuY2hhbmdlc1xuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvbS5jYWxjdWxhdGVIZWlnaHRzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoXykge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS50aW1lU2VsZWN0b3IgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5iaW5kQ2FsbGJhY2sgPT4gdW5iaW5kQ2FsbGJhY2soKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIFRpbWVTZWxlY3RvciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJ0aW1lc2VsZWN0b3IuZm9jdXMoKVwiPkZvY3VzIHRpbWUgcGlja2VyPC9idXR0b24+XG4gICAgICogIDxrZW5kby10aW1lc2VsZWN0b3IgI3RpbWVzZWxlY3Rvcj48L2tlbmRvLXRpbWVzZWxlY3Rvcj5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy50aW1lTGlzdHMuZmlyc3Q7XG4gICAgICAgIGlmICghbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFRpbWVTZWxlY3RvciBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMudGltZUxpc3RzLmZpcnN0O1xuICAgICAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsaXN0LmJsdXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUFjY2VwdCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5tZXJnZVZhbHVlKGNsb25lRGF0ZSh0aGlzLnZhbHVlIHx8IGdldERhdGUoZ2V0Tm93KCkpKSwgdGhpcy5jdXJyZW50KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVOb3coKSB7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGdldE5vdygpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0aGlzLmN1cnJlbnQpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZVJlamVjdCgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZVJlamVjdC5lbWl0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVGb2N1cyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdEZvY3VzKGFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTGlzdEZvY3VzKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChhcmdzLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGltZWxpc3QtaW5kZXgnKSwgMTApO1xuICAgICAgICB0aGlzLmFjdGl2ZUxpc3RJbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmhhbmRsZUZvY3VzKGFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQmx1cihhcmdzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50Rm9jdXNUYXJnZXQoYXJncyk7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ICYmIHRoaXMuY29udGFpbnNFbGVtZW50KGN1cnJlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVMaXN0SW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtaXRCbHVyKGFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29udGFpbnNFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oY2xvc2VzdChlbGVtZW50LCBub2RlID0+IG5vZGUgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSk7XG4gICAgfVxuICAgIHBhcnRTdGVwKHBhcnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHNbcGFydC50eXBlXSB8fCAxO1xuICAgIH1cbiAgICBpbml0KGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCFjaGFuZ2VzIHx8IGhhc0NoYW5nZShjaGFuZ2VzLCAnZm9ybWF0JykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdFBhcnRzID0gdGhpcy5pbnRsLnNwbGl0RGF0ZUZvcm1hdCh0aGlzLmZvcm1hdCk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlVmFsdWUgPSB2YWx1ZU1lcmdlcihnZW5lcmF0ZUdldHRlcnModGhpcy5kYXRlRm9ybWF0UGFydHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoYW5nZXMgfHwgaGFzQ2hhbmdlKGNoYW5nZXMsICdzdGVwcycpKSB7XG4gICAgICAgICAgICB0aGlzLnNuYXBUaW1lID0gc25hcFRpbWUoZ2VuZXJhdGVTbmFwcGVycyh0aGlzLnN0ZXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGFuZ2VzIHx8IGhhc0NoYW5nZShjaGFuZ2VzLCAndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dOb3dCdXR0b24gPSAhdGhpcy5oYXNTdGVwcygpICYmIHRoaXMubm93QnV0dG9uICYmIGlzSW5UaW1lUmFuZ2UoZ2V0Tm93KCksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgfVxuICAgIGZvY3VzTGlzdChkaXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRpbWVMaXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVMaXN0cy5yZWR1Y2UobGlzdFJlZHVjZXIsIFtdKVxuICAgICAgICAgICAgLm1hcChzdGF0ZSA9PiBkaXIgPT09IERpcmVjdGlvbi5SaWdodCA/IHN0YXRlLm5leHQgOiBzdGF0ZS5wcmV2KVxuICAgICAgICAgICAgLm1hcChsaXN0ID0+IGxpc3QgJiYgbGlzdC5mb2N1cygpKTtcbiAgICB9XG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgIH1cbiAgICBoYXNBY3RpdmVCdXR0b24oKSB7XG4gICAgICAgIGlmICghdGhpcy5hY2NlcHQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMuYWNjZXB0LCB0aGlzLmNhbmNlbCwgdGhpcy5ub3ddLnJlZHVjZSgoaXNBY3RpdmUsIGVsKSA9PiBpc0FjdGl2ZSB8fCB0aGlzLmRvbS5pc0FjdGl2ZShlbCksIGZhbHNlKTtcbiAgICB9XG4gICAgaGFzU3RlcHMoKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnN0ZXBzKTtcbiAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoICE9PSBrZXlzLnJlZHVjZSgoYWNjLCBrKSA9PiBhY2MgKyB0aGlzLnN0ZXBzW2tdLCAwKTtcbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0UGFydHMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KTtcbiAgICAgICAgdGhpcy5tZXJnZVZhbHVlID0gdmFsdWVNZXJnZXIoZ2VuZXJhdGVHZXR0ZXJzKHRoaXMuZGF0ZUZvcm1hdFBhcnRzKSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBiaW5kRXZlbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUtleWRvd24oYXJncykge1xuICAgICAgICBjb25zdCB7IGtleUNvZGUsIGFsdEtleSB9ID0gYXJncztcbiAgICAgICAgLy8gcmVzZXJ2ZSB0aGUgYWx0ICsgYXJyb3cga2V5IGNvbW1hbmRzIGZvciB0aGUgcGlja2VyXG4gICAgICAgIGNvbnN0IGFycm93S2V5UHJlc3NlZCA9IFtLZXlzLkFycm93TGVmdCwgS2V5cy5BcnJvd1JpZ2h0XS5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnBpY2tlclNlcnZpY2UpICYmIGFycm93S2V5UHJlc3NlZCAmJiBhbHRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5FbnRlciAmJiAhdGhpcy5oYXNBY3RpdmVCdXR0b24oKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBY2NlcHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93TGVmdCB8fCBrZXlDb2RlID09PSBLZXlzLkFycm93UmlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNMaXN0KGtleUNvZGUgPT09IEtleXMuQXJyb3dMZWZ0ID8gRGlyZWN0aW9uLkxlZnQgOiBEaXJlY3Rpb24uUmlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRCbHVyKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uQmx1ci5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRGb2N1cyhhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyU2VydmljZS5vbkZvY3VzLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGlzdEluZGV4KHBhcnRJbmRleCkge1xuICAgICAgICBsZXQgbGlzdElkeCA9IDA7XG4gICAgICAgIGxldCBwYXJ0SWR4ID0gMDtcbiAgICAgICAgd2hpbGUgKHBhcnRJZHggPCBwYXJ0SW5kZXgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXRQYXJ0c1twYXJ0SWR4XS50eXBlICE9PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICBsaXN0SWR4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJ0SWR4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RJZHg7XG4gICAgfVxufVxuVGltZVNlbGVjdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kby10aW1lc2VsZWN0b3InLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8udGltZXNlbGVjdG9yJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRpbWVzZWxlY3RvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb1RpbWVTZWxlY3RvckxvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLWFjY2VwdD1cImtlbmRvLnRpbWVzZWxlY3Rvci5hY2NlcHR8VGhlIEFjY2VwdCBidXR0b24gdGV4dCBpbiB0aGUgdGltZXNlbGVjdG9yIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBhY2NlcHQ9XCJTZXRcIlxuXG4gICAgICAgICAgICBpMThuLWFjY2VwdExhYmVsPVwia2VuZG8udGltZXNlbGVjdG9yLmFjY2VwdExhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIEFjY2VwdCBidXR0b24gaW4gdGhlIHRpbWVzZWxlY3RvciBjb21wb25lbnRcIlxuICAgICAgICAgICAgYWNjZXB0TGFiZWw9XCJTZXQgdGltZVwiXG5cbiAgICAgICAgICAgIGkxOG4tY2FuY2VsPVwia2VuZG8udGltZXNlbGVjdG9yLmNhbmNlbHxUaGUgQ2FuY2VsIGJ1dHRvbiB0ZXh0IGluIHRoZSB0aW1lc2VsZWN0b3IgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGNhbmNlbD1cIkNhbmNlbFwiXG5cbiAgICAgICAgICAgIGkxOG4tY2FuY2VsTGFiZWw9XCJrZW5kby50aW1lc2VsZWN0b3IuY2FuY2VsTGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgQ2FuY2VsIGJ1dHRvbiBpbiB0aGUgdGltZXNlbGVjdG9yIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBjYW5jZWxMYWJlbD1cIkNhbmNlbCBjaGFuZ2VzXCJcblxuICAgICAgICAgICAgaTE4bi1ub3c9XCJrZW5kby50aW1lc2VsZWN0b3Iubm93fFRoZSBOb3cgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVzZWxlY3RvciBjb21wb25lbnRcIlxuICAgICAgICAgICAgbm93PVwiTm93XCJcblxuICAgICAgICAgICAgaTE4bi1ub3dMYWJlbD1cImtlbmRvLnRpbWVzZWxlY3Rvci5ub3dMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBOb3cgYnV0dG9uIGluIHRoZSB0aW1lc2VsZWN0b3IgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG5vd0xhYmVsPVwiU2VsZWN0IG5vd1wiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLXRpbWUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyBpbnRsLmZvcm1hdERhdGUoY3VycmVudCwgZm9ybWF0KSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNub3dcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dOb3dCdXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay1iYXJlIGstdGltZS1ub3dcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdub3dMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ25vd0xhYmVsJylcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGhhbmRsZU5vdyxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+e3tsb2NhbGl6YXRpb24uZ2V0KCdub3cnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay10aW1lLWxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstdGltZS1oaWdobGlnaHRcIj48L3NwYW4+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgW25nRm9yT2ZdPVwiZGF0ZUZvcm1hdFBhcnRzXCIgbGV0LXBhcnQgbGV0LWlkeD1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAjbGlzdFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLXRpbWUtbGlzdC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhcnQudHlwZSAhPT0gJ2xpdGVyYWwnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay10aXRsZVwiPnt7aW50bC5kYXRlRmllbGROYW1lKHBhcnQpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10aW1lbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRdPVwicGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcF09XCJwYXJ0U3RlcChwYXJ0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGhhbmRsZUxpc3RGb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzY29wZV09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGltZWxpc3QtaW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwva2VuZG8tdGltZWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstdGltZS1zZXBhcmF0b3JcIiAqbmdJZj1cInBhcnQudHlwZSA9PT0gJ2xpdGVyYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7cGFydC5wYXR0ZXJufX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiay10aW1lLWZvb3RlciBrLWFjdGlvbi1idXR0b25zXCIgKm5nSWY9XCJzZXRCdXR0b24gfHwgY2FuY2VsQnV0dG9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgI2NhbmNlbFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstdGltZS1jYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdjYW5jZWxMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbExhYmVsJylcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGhhbmRsZVJlamVjdCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+e3tsb2NhbGl6YXRpb24uZ2V0KCdjYW5jZWwnKX19PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgI2FjY2VwdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2V0QnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstdGltZS1hY2NlcHQgay1idXR0b24gay1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHRMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdExhYmVsJylcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGhhbmRsZUFjY2VwdCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgICAgICAgICBibHVyOiBoYW5kbGVCbHVyXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA+e3tsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHQnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGltZVNlbGVjdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBUaW1lUGlja2VyRE9NU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IFBpY2tlclNlcnZpY2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5UaW1lU2VsZWN0b3JDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYWNjZXB0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYWNjZXB0JyxdIH1dLFxuICAgIGNhbmNlbDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NhbmNlbCcsXSB9XSxcbiAgICBub3c6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydub3cnLF0gfV0sXG4gICAgdGltZUxpc3RzOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtUaW1lTGlzdENvbXBvbmVudCxdIH1dLFxuICAgIHRpbWVMaXN0V3JhcHBlcnM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogWydsaXN0V3JhcHBlcicsXSB9XSxcbiAgICBjb21wb25lbnRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10aW1lc2VsZWN0b3InLF0gfV0sXG4gICAgZGlzYWJsZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjYW5jZWxCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNldEJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm93QnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZhbHVlUmVqZWN0OiBbeyB0eXBlOiBPdXRwdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUaW1lUGlja2VyTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5UaW1lUGlja2VyTWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYWNjZXB0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY2NlcHRMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2FuY2VsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjYW5jZWxMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm93OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub3dMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9nZ2xlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIFRpbWVQaWNrZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cblRpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUaW1lUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9UaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZGF0ZWlucHV0cyAlfSN0b2MtY3VzdG9tLW1lc3NhZ2VzKSkuXG4gKi9cbmNsYXNzIFRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIFRpbWVQaWNrZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUaW1lUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby10aW1lcGlja2VyLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGltZVNlbGVjdG9yTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBUaW1lUGlja2VyTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5UaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUaW1lUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1RpbWVTZWxlY3RvckxvY2FsaXplZE1lc3NhZ2VzXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGltZVNlbGVjdG9yTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMuXG4gKi9cbmNsYXNzIFRpbWVTZWxlY3RvckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgVGltZVBpY2tlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuVGltZVNlbGVjdG9yQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogVGltZVBpY2tlck1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZVNlbGVjdG9yQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby10aW1lc2VsZWN0b3ItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lU2VsZWN0b3JDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuY29uc3QgQ09NUE9ORU5UX0RJUkVDVElWRVMkMiA9IFtcbiAgICBUaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgVGltZUxpc3RDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgIFRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgVGltZVNlbGVjdG9yTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgVGltZVNlbGVjdG9yQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgVGltZVNlbGVjdG9yQ29tcG9uZW50XG5dO1xuY29uc3QgQ09NUE9ORU5UX01PRFVMRVMkMSA9IFtcbiAgICBEYXRlSW5wdXRNb2R1bGUsXG4gICAgSW50bE1vZHVsZSxcbiAgICBQb3B1cE1vZHVsZSxcbiAgICBWaXJ0dWFsaXphdGlvbk1vZHVsZSxcbiAgICBFdmVudHNNb2R1bGVcbl07XG5jb25zdCDJtTAkbiA9IHRvdWNoRW5hYmxlZDtcbmNvbnN0IHByb3ZpZGVycyA9IFtcbiAgICBUaW1lUGlja2VyRE9NU2VydmljZSxcbiAgICBIb3Vyc1NlcnZpY2UsXG4gICAgTWludXRlc1NlcnZpY2UsXG4gICAgU2Vjb25kc1NlcnZpY2UsXG4gICAgRGF5UGVyaW9kU2VydmljZSxcbiAgICB7XG4gICAgICAgIHByb3ZpZGU6IFRPVUNIX0VOQUJMRUQsXG4gICAgICAgIHVzZVZhbHVlOiDJtTAkblxuICAgIH1cbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBUaW1lUGlja2VyIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgVGltZVBpY2tlck1vZHVsZSB7XG59XG5UaW1lUGlja2VyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtDT01QT05FTlRfRElSRUNUSVZFUyQyXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbQ09NUE9ORU5UX0RJUkVDVElWRVMkMl0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgLi4uQ09NUE9ORU5UX01PRFVMRVMkMV0sXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnNcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE1lc3NhZ2VzJDEgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5NZXNzYWdlcyQxLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvZ2dsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0ZVRhYjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0ZVRhYkxhYmVsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aW1lVGFiOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aW1lVGFiTGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjY2VwdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWNjZXB0TGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbmNlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2FuY2VsTGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvZGF5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub3c6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vd0xhYmVsOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ2xvYmFsaXphdGlvbl9kYXRlaW5wdXRzICV9I3RvYy1jdXN0b20tbWVzc2FnZXMpKS5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCBleHRlbmRzIE1lc3NhZ2VzJDEge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5EYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWRhdGV0aW1lcGlja2VyLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgTWVzc2FnZXMkMSB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EYXRlVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbmNvbnN0IENPTVBPTkVOVF9ESVJFQ1RJVkVTJDMgPSBbXG4gICAgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgRGF0ZVRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZVxuXTtcbmNvbnN0IMm1MCRvID0gdG91Y2hFbmFibGVkO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRGF0ZVRpbWVQaWNrZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBEYXRlVGltZVBpY2tlck1vZHVsZSB7XG59XG5EYXRlVGltZVBpY2tlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLkNPTVBPTkVOVF9ESVJFQ1RJVkVTJDNcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgLi4uQ09NUE9ORU5UX0RJUkVDVElWRVMkMyxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgSW50bE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZUlucHV0TW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGltZVBpY2tlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUG9wdXBNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEV2ZW50c01vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBUT1VDSF9FTkFCTEVELCB1c2VWYWx1ZTogybUwJG8gfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY29uc3QgQ09NUE9ORU5UX01PRFVMRVMkMiA9IFtcbiAgICBDYWxlbmRhcnNNb2R1bGUsXG4gICAgRGF0ZUlucHV0TW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgVGltZVBpY2tlck1vZHVsZSxcbiAgICBEYXRlUmFuZ2VNb2R1bGUsXG4gICAgRGF0ZVRpbWVQaWNrZXJNb2R1bGVcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBEYXRlIElucHV0cyBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIERhdGUgSW5wdXRzIG1vZHVsZVxuICogaW1wb3J0IHsgRGF0ZUlucHV0c01vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIHRoZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRGF0ZUlucHV0c01vZHVsZV0sIC8vIGltcG9ydCB0aGUgRGF0ZSBJbnB1dHMgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBEYXRlSW5wdXRzTW9kdWxlIHtcbn1cbkRhdGVJbnB1dHNNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IENPTVBPTkVOVF9NT0RVTEVTJDIsXG4gICAgICAgICAgICAgICAgaW1wb3J0czogQ09NUE9ORU5UX01PRFVMRVMkMlxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IENhbGVuZGFyQ29tbW9uTW9kdWxlLCBDQUxFTkRBUl9SQU5HRV9WQUxJREFUT1JTLCBDQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUiwgS0VORE9fSU5QVVRfUFJPVklERVIsIEtGb3JPZiwgS0Zvck9mQ29udGV4dCwgSGVhZGVyQ29tcG9uZW50LCBIb3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQsIENhbGVuZGFyTWVzc2FnZXMsIE11bHRpVmlld0NhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIE1lc3NhZ2VzLCBSQU5HRV9DQUxFTkRBUl9SQU5HRV9WQUxJREFUT1JTLCBSQU5HRV9DQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUiwgTmF2aWdhdGlvbkNvbXBvbmVudCwgQnVzVmlld1NlcnZpY2UsIENlbnR1cnlWaWV3U2VydmljZSwgRGVjYWRlVmlld1NlcnZpY2UsIERpc2FibGVkRGF0ZXNTZXJ2aWNlLCBDYWxlbmRhckRPTVNlcnZpY2UsIE1vbnRoVmlld1NlcnZpY2UsIE5hdmlnYXRpb25TZXJ2aWNlLCBTY3JvbGxTeW5jU2VydmljZSwgV2Vla05hbWVzU2VydmljZSwgWWVhclZpZXdTZXJ2aWNlLCBUZW1wbGF0ZXNNb2R1bGUsIENlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLCBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgVmlld0xpc3RDb21wb25lbnQsIFZpZXdDb21wb25lbnQsIFBpY2tlclNlcnZpY2UsIERhdGVJbnB1dE1lc3NhZ2VzLCBEYXRlUGlja2VyTWVzc2FnZXMsIERhdGVSYW5nZUlucHV0LCBEYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlLCBEYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTWVzc2FnZXMkMSwgVGltZVBpY2tlck1lc3NhZ2VzLCBUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIFRpbWVTZWxlY3RvckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBEYXlQZXJpb2RTZXJ2aWNlLCBUaW1lUGlja2VyRE9NU2VydmljZSwgSG91cnNTZXJ2aWNlLCBNaW51dGVzU2VydmljZSwgU2Vjb25kc1NlcnZpY2UsIFRpbWVMaXN0Q29tcG9uZW50LCBUaW1lU2VsZWN0b3JDb21wb25lbnQsIFRPVUNIX0VOQUJMRUQsIFNjcm9sbGVyU2VydmljZSwgREVGQVVMVF9TQ1JPTExFUl9GQUNUT1JZLCBTQ1JPTExFUl9GQUNUT1JZX1RPS0VOLCBWaXJ0dWFsaXphdGlvbkNvbXBvbmVudCwgVmlydHVhbGl6YXRpb25Nb2R1bGUsIENhbGVuZGFyQ29tcG9uZW50LCBEYXRlSW5wdXRDb21wb25lbnQsIERhdGVQaWNrZXJDb21wb25lbnQsIFRpbWVQaWNrZXJDb21wb25lbnQsIERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCwgRGF0ZVJhbmdlQ29tcG9uZW50LCBEYXRlUmFuZ2VQb3B1cENvbXBvbmVudCwgRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUsIERhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUsIERhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZSwgQ2FsZW5kYXJNb2R1bGUsIENhbGVuZGFyc01vZHVsZSwgRGF0ZUlucHV0TW9kdWxlLCBEYXRlUGlja2VyTW9kdWxlLCBEYXRlSW5wdXRzTW9kdWxlLCBUaW1lUGlja2VyTW9kdWxlLCBEYXRlVGltZVBpY2tlck1vZHVsZSwgTXVsdGlWaWV3Q2FsZW5kYXJNb2R1bGUsIERhdGVSYW5nZU1vZHVsZSwgRGF0ZVJhbmdlU2VydmljZSwgQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgRGF0ZUlucHV0Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIERhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgUHJldmVudGFibGVFdmVudCwgQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTXVsdGlWaWV3Q2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsIERhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBUaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSB9O1xuIl19","import { Subscriber } from '../Subscriber';\nexport function pairwise() {\n return (source) => source.lift(new PairwiseOperator());\n}\nclass PairwiseOperator {\n call(subscriber, source) {\n return source.subscribe(new PairwiseSubscriber(subscriber));\n }\n}\nclass PairwiseSubscriber extends Subscriber {\n constructor(destination) {\n super(destination);\n this.hasPrev = false;\n }\n _next(value) {\n let pair;\n if (this.hasPrev) {\n pair = [this.prev, value];\n }\n else {\n this.hasPrev = true;\n }\n this.prev = value;\n if (pair) {\n this.destination.next(pair);\n }\n }\n}\n//# sourceMappingURL=pairwise.js.map","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import { switchMap } from './switchMap';\nexport function switchMapTo(innerObservable, resultSelector) {\n return resultSelector ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable);\n}\n//# sourceMappingURL=switchMapTo.js.map","import { ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { POPOVER_VIEW_DATA } from '../popover-view.token';\nimport { PopoverOverlayRef } from '../popover-view-ref';\n\n\n@Component({\n selector: 'app-popover',\n templateUrl: './popover.component.html',\n styleUrls: ['./popover.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverComponent implements OnInit, OnDestroy {\n\n private destroy$ = new Subject();\n constructor(@Inject(POPOVER_VIEW_DATA) public data: { text: string }, public dialogRef: PopoverOverlayRef) {\n }\n public ngOnInit() {\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n }\n @HostListener('mouseleave', ['$event']) private handleKeyDown(_: KeyboardEvent) {\n this.dialogRef.close();\n }\n\n\n}\n","\n\n

    \n {{this.data.text}}\n

    \n\n
    \n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent = Number.POSITIVE_INFINITY) {\n return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","export default function template() {\n throw new Error(\"Template implementation missing.\");\n}\n","import { mergeMap } from './mergeMap';\nexport function concatMap(project, resultSelector) {\n return mergeMap(project, resultSelector, 1);\n}\n//# sourceMappingURL=concatMap.js.map","import PathNode from './path-node';\nimport renderPath from './utils/render-path';\n\nclass ArcNode extends PathNode {\n renderPoints(ctx) {\n const path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n}\n\nexport default ArcNode;\n","import Class from './class';\n\nclass Observable extends Class {\n constructor() {\n super();\n\n this._events = {};\n }\n\n bind(eventName, handlers, one) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n const length = eventNames.length;\n\n if (handlers === undefined) {\n for (let field in eventName) {\n this.bind(field, eventName[field]);\n }\n return this;\n }\n\n for (let idx = 0; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n let handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n if (one) {\n const original = handler;\n handler = () => { // eslint-disable-line no-loop-func\n this.unbind(eventName, handler);\n original.apply(this, arguments);\n };\n handler.original = original;\n }\n let events = this._events[eventName] = this._events[eventName] || [];\n events.push(handler);\n }\n }\n\n return this;\n }\n\n one(eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n }\n\n first(eventName, handlers) {\n const eventNames = getArray(eventName);\n const handlersIsFunction = isFunction(handlers);\n\n for (let idx = 0, length = eventNames.length; idx < length; idx++) {\n const eventName = eventNames[idx];\n\n const handler = handlersIsFunction ? handlers : handlers[eventName];\n\n if (handler) {\n const events = this._events[eventName] = this._events[eventName] || [];\n events.unshift(handler);\n }\n }\n\n return this;\n }\n\n trigger(eventName, e = {}) {\n let events = this._events[eventName];\n\n if (events) {\n const length = events.length;\n\n e.sender = this;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n\n events = events.slice();\n\n for (let idx = 0; idx < length; idx++) {\n events[idx].call(this, e);\n }\n\n return e._defaultPrevented === true;\n }\n\n return false;\n }\n\n unbind(eventName, handler) {\n const events = this._events[eventName];\n\n if (eventName === undefined) {\n this._events = {};\n } else if (events) {\n if (handler) {\n for (let idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n this._events[eventName] = [];\n }\n }\n\n return this;\n }\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction getArray(value) {\n return typeof value === \"string\" ? [ value ] : value;\n}\n\nfunction preventDefault() {\n this._defaultPrevented = true;\n}\n\nfunction isDefaultPrevented() {\n return this._defaultPrevented === true;\n}\n\nexport default Observable;","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { InjectionToken, forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, NgZone, Attribute, Optional, Inject, Input, Output, ViewChild, Directive, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator } from '@angular/forms';\nimport { mixinTabIndex, mixinColor, mixinDisableRipple, mixinDisabled, MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { ObserversModule } from '@angular/cdk/observers';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for `mat-checkbox`. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/material/core';\nimport * as ɵngcc3 from '@angular/cdk/observers';\n\nconst _c0 = [\"input\"];\nconst _c1 = function () { return { enterDuration: 150 }; };\nconst _c2 = [\"*\"];\nconst MAT_CHECKBOX_DEFAULT_OPTIONS = new InjectionToken('mat-checkbox-default-options', {\n providedIn: 'root',\n factory: MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY\n});\n/** @docs-private */\nfunction MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent',\n clickAction: 'check-indeterminate',\n };\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Increasing integer for generating unique ids for checkbox components.\nlet nextUniqueId = 0;\n// Default checkbox configuration.\nconst defaults = MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY();\n/**\n * Provider Expression that allows mat-checkbox to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)].\n * @docs-private\n */\nconst MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatCheckbox),\n multi: true\n};\n/** Change event object emitted by MatCheckbox. */\nclass MatCheckboxChange {\n}\n// Boilerplate for applying mixins to MatCheckbox.\n/** @docs-private */\nclass MatCheckboxBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatCheckboxMixinBase = mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(MatCheckboxBase))));\n/**\n * A material design checkbox component. Supports all of the functionality of an HTML5 checkbox,\n * and exposes a similar API. A MatCheckbox can be either checked, unchecked, indeterminate, or\n * disabled. Note that all additional accessibility attributes are taken care of by the component,\n * so there is no need to provide them yourself. However, if you want to omit a label and still\n * have the checkbox be accessible, you may supply an [aria-label] input.\n * See: https://material.io/design/components/selection-controls.html\n */\nclass MatCheckbox extends _MatCheckboxMixinBase {\n constructor(elementRef, _changeDetectorRef, _focusMonitor, _ngZone, tabIndex, _animationMode, _options) {\n super(elementRef);\n this._changeDetectorRef = _changeDetectorRef;\n this._focusMonitor = _focusMonitor;\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._options = _options;\n /**\n * Attached to the aria-label attribute of the host element. In most cases, aria-labelledby will\n * take precedence so this may be omitted.\n */\n this.ariaLabel = '';\n /**\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\n */\n this.ariaLabelledby = null;\n this._uniqueId = `mat-checkbox-${++nextUniqueId}`;\n /** A unique id for the checkbox input. If none is supplied, it will be auto-generated. */\n this.id = this._uniqueId;\n /** Whether the label should appear after or before the checkbox. Defaults to 'after' */\n this.labelPosition = 'after';\n /** Name value will be applied to the input element if present */\n this.name = null;\n /** Event emitted when the checkbox's `checked` value changes. */\n this.change = new EventEmitter();\n /** Event emitted when the checkbox's `indeterminate` value changes. */\n this.indeterminateChange = new EventEmitter();\n /**\n * Called when the checkbox is blurred. Needed to properly implement ControlValueAccessor.\n * @docs-private\n */\n this._onTouched = () => { };\n this._currentAnimationClass = '';\n this._currentCheckState = 0 /* Init */;\n this._controlValueAccessorChangeFn = () => { };\n this._checked = false;\n this._disabled = false;\n this._indeterminate = false;\n this._options = this._options || defaults;\n this.color = this.defaultColor = this._options.color || defaults.color;\n this.tabIndex = parseInt(tabIndex) || 0;\n }\n /** Returns the unique id for the visual hidden input. */\n get inputId() { return `${this.id || this._uniqueId}-input`; }\n /** Whether the checkbox is required. */\n get required() { return this._required; }\n set required(value) { this._required = coerceBooleanProperty(value); }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state change\n // (such as a form control's 'ng-touched') will cause a changed-after-checked error.\n // See https://github.com/angular/angular/issues/17793. To work around this, we defer\n // telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n });\n }\n });\n this._syncIndeterminate(this._indeterminate);\n }\n // TODO: Delete next major revision.\n ngAfterViewChecked() { }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /**\n * Whether the checkbox is checked.\n */\n get checked() { return this._checked; }\n set checked(value) {\n if (value != this.checked) {\n this._checked = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Whether the checkbox is disabled. This fully overrides the implementation provided by\n * mixinDisabled, but the mixin is still required because mixinTabIndex requires it.\n */\n get disabled() { return this._disabled; }\n set disabled(value) {\n const newValue = coerceBooleanProperty(value);\n if (newValue !== this.disabled) {\n this._disabled = newValue;\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Whether the checkbox is indeterminate. This is also known as \"mixed\" mode and can be used to\n * represent a checkbox with three states, e.g. a checkbox that represents a nested list of\n * checkable items. Note that whenever checkbox is manually clicked, indeterminate is immediately\n * set to false.\n */\n get indeterminate() { return this._indeterminate; }\n set indeterminate(value) {\n const changed = value != this._indeterminate;\n this._indeterminate = coerceBooleanProperty(value);\n if (changed) {\n if (this._indeterminate) {\n this._transitionCheckState(3 /* Indeterminate */);\n }\n else {\n this._transitionCheckState(this.checked ? 1 /* Checked */ : 2 /* Unchecked */);\n }\n this.indeterminateChange.emit(this._indeterminate);\n }\n this._syncIndeterminate(this._indeterminate);\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the checkbox\n // component will be only marked for check, but no actual change detection runs automatically.\n // Instead of going back into the zone in order to trigger a change detection which causes\n // *all* components to be checked (if explicitly marked or not using OnPush), we only trigger\n // an explicit change detection for the checkbox view and its children.\n this._changeDetectorRef.detectChanges();\n }\n // Implemented as part of ControlValueAccessor.\n writeValue(value) {\n this.checked = !!value;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n // Implemented as part of ControlValueAccessor.\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n // Implemented as part of ControlValueAccessor.\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n _getAriaChecked() {\n if (this.checked) {\n return 'true';\n }\n return this.indeterminate ? 'mixed' : 'false';\n }\n _transitionCheckState(newState) {\n let oldState = this._currentCheckState;\n let element = this._elementRef.nativeElement;\n if (oldState === newState) {\n return;\n }\n if (this._currentAnimationClass.length > 0) {\n element.classList.remove(this._currentAnimationClass);\n }\n this._currentAnimationClass = this._getAnimationClassForCheckStateTransition(oldState, newState);\n this._currentCheckState = newState;\n if (this._currentAnimationClass.length > 0) {\n element.classList.add(this._currentAnimationClass);\n // Remove the animation class to avoid animation when the checkbox is moved between containers\n const animationClass = this._currentAnimationClass;\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n element.classList.remove(animationClass);\n }, 1000);\n });\n }\n }\n _emitChangeEvent() {\n const event = new MatCheckboxChange();\n event.source = this;\n event.checked = this.checked;\n this._controlValueAccessorChangeFn(this.checked);\n this.change.emit(event);\n }\n /** Toggles the `checked` state of the checkbox. */\n toggle() {\n this.checked = !this.checked;\n }\n /**\n * Event handler for checkbox input element.\n * Toggles checked state if element is not disabled.\n * Do not toggle on (change) event since IE doesn't fire change event when\n * indeterminate checkbox is clicked.\n * @param event\n */\n _onInputClick(event) {\n var _a;\n const clickAction = (_a = this._options) === null || _a === void 0 ? void 0 : _a.clickAction;\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `checkbox` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n // If resetIndeterminate is false, and the current state is indeterminate, do nothing on click\n if (!this.disabled && clickAction !== 'noop') {\n // When user manually click on the checkbox, `indeterminate` is set to false.\n if (this.indeterminate && clickAction !== 'check') {\n Promise.resolve().then(() => {\n this._indeterminate = false;\n this.indeterminateChange.emit(this._indeterminate);\n });\n }\n this.toggle();\n this._transitionCheckState(this._checked ? 1 /* Checked */ : 2 /* Unchecked */);\n // Emit our custom change event if the native input emitted one.\n // It is important to only emit it, if the native input triggered one, because\n // we don't want to trigger a change event, when the `checked` variable changes for example.\n this._emitChangeEvent();\n }\n else if (!this.disabled && clickAction === 'noop') {\n // Reset native input when clicked with noop. The native checkbox becomes checked after\n // click, reset it to be align with `checked` value of `mat-checkbox`.\n this._inputElement.nativeElement.checked = this.checked;\n this._inputElement.nativeElement.indeterminate = this.indeterminate;\n }\n }\n /** Focuses the checkbox. */\n focus(origin = 'keyboard', options) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n }\n _onInteractionEvent(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n }\n _getAnimationClassForCheckStateTransition(oldState, newState) {\n // Don't transition if animations are disabled.\n if (this._animationMode === 'NoopAnimations') {\n return '';\n }\n let animSuffix = '';\n switch (oldState) {\n case 0 /* Init */:\n // Handle edge case where user interacts with checkbox that does not have [(ngModel)] or\n // [checked] bound to it.\n if (newState === 1 /* Checked */) {\n animSuffix = 'unchecked-checked';\n }\n else if (newState == 3 /* Indeterminate */) {\n animSuffix = 'unchecked-indeterminate';\n }\n else {\n return '';\n }\n break;\n case 2 /* Unchecked */:\n animSuffix = newState === 1 /* Checked */ ?\n 'unchecked-checked' : 'unchecked-indeterminate';\n break;\n case 1 /* Checked */:\n animSuffix = newState === 2 /* Unchecked */ ?\n 'checked-unchecked' : 'checked-indeterminate';\n break;\n case 3 /* Indeterminate */:\n animSuffix = newState === 1 /* Checked */ ?\n 'indeterminate-checked' : 'indeterminate-unchecked';\n break;\n }\n return `mat-checkbox-anim-${animSuffix}`;\n }\n /**\n * Syncs the indeterminate value with the checkbox DOM node.\n *\n * We sync `indeterminate` directly on the DOM node, because in Ivy the check for whether a\n * property is supported on an element boils down to `if (propName in element)`. Domino's\n * HTMLInputElement doesn't have an `indeterminate` property so Ivy will warn during\n * server-side rendering.\n */\n _syncIndeterminate(value) {\n const nativeCheckbox = this._inputElement;\n if (nativeCheckbox) {\n nativeCheckbox.nativeElement.indeterminate = value;\n }\n }\n}\nMatCheckbox.ɵfac = function MatCheckbox_Factory(t) { return new (t || MatCheckbox)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵinjectAttribute('tabindex'), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_CHECKBOX_DEFAULT_OPTIONS, 8)); };\nMatCheckbox.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatCheckbox, selectors: [[\"mat-checkbox\"]], viewQuery: function MatCheckbox_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(MatRipple, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._inputElement = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ripple = _t.first);\n } }, hostAttrs: [1, \"mat-checkbox\"], hostVars: 12, hostBindings: function MatCheckbox_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.id);\n ɵngcc0.ɵɵattribute(\"tabindex\", null);\n ɵngcc0.ɵɵclassProp(\"mat-checkbox-indeterminate\", ctx.indeterminate)(\"mat-checkbox-checked\", ctx.checked)(\"mat-checkbox-disabled\", ctx.disabled)(\"mat-checkbox-label-before\", ctx.labelPosition == \"before\")(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\");\n } }, inputs: { disableRipple: \"disableRipple\", color: \"color\", tabIndex: \"tabIndex\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], id: \"id\", labelPosition: \"labelPosition\", name: \"name\", required: \"required\", checked: \"checked\", disabled: \"disabled\", indeterminate: \"indeterminate\", ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"], value: \"value\" }, outputs: { change: \"change\", indeterminateChange: \"indeterminateChange\" }, exportAs: [\"matCheckbox\"], features: [ɵngcc0.ɵɵProvidersFeature([MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c2, decls: 17, vars: 20, consts: [[1, \"mat-checkbox-layout\"], [\"label\", \"\"], [1, \"mat-checkbox-inner-container\"], [\"type\", \"checkbox\", 1, \"mat-checkbox-input\", \"cdk-visually-hidden\", 3, \"id\", \"required\", \"checked\", \"disabled\", \"tabIndex\", \"change\", \"click\"], [\"input\", \"\"], [\"matRipple\", \"\", 1, \"mat-checkbox-ripple\", \"mat-focus-indicator\", 3, \"matRippleTrigger\", \"matRippleDisabled\", \"matRippleRadius\", \"matRippleCentered\", \"matRippleAnimation\"], [1, \"mat-ripple-element\", \"mat-checkbox-persistent-ripple\"], [1, \"mat-checkbox-frame\"], [1, \"mat-checkbox-background\"], [\"version\", \"1.1\", \"focusable\", \"false\", \"viewBox\", \"0 0 24 24\", 0, \"xml\", \"space\", \"preserve\", 1, \"mat-checkbox-checkmark\"], [\"fill\", \"none\", \"stroke\", \"white\", \"d\", \"M4.1,12.7 9,17.6 20.3,6.3\", 1, \"mat-checkbox-checkmark-path\"], [1, \"mat-checkbox-mixedmark\"], [1, \"mat-checkbox-label\", 3, \"cdkObserveContent\"], [\"checkboxLabel\", \"\"], [2, \"display\", \"none\"]], template: function MatCheckbox_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"label\", 0, 1);\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵelementStart(3, \"input\", 3, 4);\n ɵngcc0.ɵɵlistener(\"change\", function MatCheckbox_Template_input_change_3_listener($event) { return ctx._onInteractionEvent($event); })(\"click\", function MatCheckbox_Template_input_click_3_listener($event) { return ctx._onInputClick($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵelement(6, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(7, \"span\", 7);\n ɵngcc0.ɵɵelementStart(8, \"span\", 8);\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(9, \"svg\", 9);\n ɵngcc0.ɵɵelement(10, \"path\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelement(11, \"span\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"span\", 12, 13);\n ɵngcc0.ɵɵlistener(\"cdkObserveContent\", function MatCheckbox_Template_span_cdkObserveContent_12_listener() { return ctx._onLabelTextChange(); });\n ɵngcc0.ɵɵelementStart(14, \"span\", 14);\n ɵngcc0.ɵɵtext(15, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(16);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n const _r2 = ɵngcc0.ɵɵreference(13);\n ɵngcc0.ɵɵattribute(\"for\", ctx.inputId);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-checkbox-inner-container-no-side-margin\", !_r2.textContent || !_r2.textContent.trim());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.inputId)(\"required\", ctx.required)(\"checked\", ctx.checked)(\"disabled\", ctx.disabled)(\"tabIndex\", ctx.tabIndex);\n ɵngcc0.ɵɵattribute(\"value\", ctx.value)(\"name\", ctx.name)(\"aria-label\", ctx.ariaLabel || null)(\"aria-labelledby\", ctx.ariaLabelledby)(\"aria-checked\", ctx._getAriaChecked())(\"aria-describedby\", ctx.ariaDescribedby);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"matRippleTrigger\", _r0)(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleRadius\", 20)(\"matRippleCentered\", true)(\"matRippleAnimation\", ɵngcc0.ɵɵpureFunction0(19, _c1));\n } }, directives: [ɵngcc2.MatRipple, ɵngcc3.CdkObserveContent], styles: [\"@keyframes mat-checkbox-fade-in-background{0%{opacity:0}50%{opacity:1}}@keyframes mat-checkbox-fade-out-background{0%,50%{opacity:1}100%{opacity:0}}@keyframes mat-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:22.910259}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1)}100%{stroke-dashoffset:0}}@keyframes mat-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mat-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);stroke-dashoffset:0}to{stroke-dashoffset:-22.910259}}@keyframes mat-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(45deg)}}@keyframes mat-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:0;transform:rotate(45deg)}to{opacity:1;transform:rotate(360deg)}}@keyframes mat-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:rotate(0deg)}}@keyframes mat-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(315deg)}}@keyframes mat-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;opacity:1;transform:scaleX(1)}32.8%,100%{opacity:0;transform:scaleX(0)}}.mat-checkbox-background,.mat-checkbox-frame{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:2px;box-sizing:border-box;pointer-events:none}.mat-checkbox{display:inline-block;transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);cursor:pointer;-webkit-tap-highlight-color:transparent}._mat-animation-noopable.mat-checkbox{transition:none;animation:none}.mat-checkbox .mat-ripple-element:not(.mat-checkbox-persistent-ripple){opacity:.16}.mat-checkbox-layout{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:inherit;align-items:baseline;vertical-align:middle;display:inline-flex;white-space:nowrap}.mat-checkbox-label{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.mat-checkbox-inner-container{display:inline-block;height:16px;line-height:0;margin:auto;margin-right:8px;order:0;position:relative;vertical-align:middle;white-space:nowrap;width:16px;flex-shrink:0}[dir=rtl] .mat-checkbox-inner-container{margin-left:8px;margin-right:auto}.mat-checkbox-inner-container-no-side-margin{margin-left:0;margin-right:0}.mat-checkbox-frame{background-color:transparent;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1);border-width:2px;border-style:solid}._mat-animation-noopable .mat-checkbox-frame{transition:none}.cdk-high-contrast-active .mat-checkbox.cdk-keyboard-focused .mat-checkbox-frame{border-style:dotted}.mat-checkbox-background{align-items:center;display:inline-flex;justify-content:center;transition:background-color 90ms cubic-bezier(0, 0, 0.2, 0.1),opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}._mat-animation-noopable .mat-checkbox-background{transition:none}.cdk-high-contrast-active .mat-checkbox .mat-checkbox-background{background:none}.mat-checkbox-persistent-ripple{display:block;width:100%;height:100%;transform:none}.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:.04}.mat-checkbox.cdk-keyboard-focused .mat-checkbox-persistent-ripple{opacity:.12}.mat-checkbox-persistent-ripple,.mat-checkbox.mat-checkbox-disabled .mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:0}@media(hover: none){.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{display:none}}.mat-checkbox-checkmark{top:0;left:0;right:0;bottom:0;position:absolute;width:100%}.mat-checkbox-checkmark-path{stroke-dashoffset:22.910259;stroke-dasharray:22.910259;stroke-width:2.1333333333px}.cdk-high-contrast-black-on-white .mat-checkbox-checkmark-path{stroke:#000 !important}.mat-checkbox-mixedmark{width:calc(100% - 6px);height:2px;opacity:0;transform:scaleX(0) rotate(0deg);border-radius:2px}.cdk-high-contrast-active .mat-checkbox-mixedmark{height:0;border-top:solid 2px;margin-top:2px}.mat-checkbox-label-before .mat-checkbox-inner-container{order:1;margin-left:8px;margin-right:auto}[dir=rtl] .mat-checkbox-label-before .mat-checkbox-inner-container{margin-left:auto;margin-right:8px}.mat-checkbox-checked .mat-checkbox-checkmark{opacity:1}.mat-checkbox-checked .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-checked .mat-checkbox-mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark{opacity:0;transform:rotate(45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-indeterminate .mat-checkbox-mixedmark{opacity:1;transform:scaleX(1) rotate(0deg)}.mat-checkbox-unchecked .mat-checkbox-background{background-color:transparent}.mat-checkbox-disabled{cursor:default}.cdk-high-contrast-active .mat-checkbox-disabled{opacity:.5}.mat-checkbox-anim-unchecked-checked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-checked .mat-checkbox-checkmark-path{animation:180ms linear 0ms mat-checkbox-unchecked-checked-checkmark-path}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-unchecked-indeterminate-mixedmark}.mat-checkbox-anim-checked-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-checked-unchecked .mat-checkbox-checkmark-path{animation:90ms linear 0ms mat-checkbox-checked-unchecked-checkmark-path}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-checkmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-checkmark}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-mixedmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-checkmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-checkmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-mixedmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-mixedmark}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-mixedmark{animation:300ms linear 0ms mat-checkbox-indeterminate-unchecked-mixedmark}.mat-checkbox-input{bottom:0;left:50%}.mat-checkbox .mat-checkbox-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatCheckbox.ctorParameters = () => [\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: FocusMonitor },\n { type: NgZone },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_CHECKBOX_DEFAULT_OPTIONS,] }] }\n];\nMatCheckbox.propDecorators = {\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n ariaDescribedby: [{ type: Input, args: ['aria-describedby',] }],\n id: [{ type: Input }],\n required: [{ type: Input }],\n labelPosition: [{ type: Input }],\n name: [{ type: Input }],\n change: [{ type: Output }],\n indeterminateChange: [{ type: Output }],\n value: [{ type: Input }],\n _inputElement: [{ type: ViewChild, args: ['input',] }],\n ripple: [{ type: ViewChild, args: [MatRipple,] }],\n checked: [{ type: Input }],\n disabled: [{ type: Input }],\n indeterminate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCheckbox, [{\n type: Component,\n args: [{\n selector: 'mat-checkbox',\n template: \"\\n\",\n exportAs: 'matCheckbox',\n host: {\n 'class': 'mat-checkbox',\n '[id]': 'id',\n '[attr.tabindex]': 'null',\n '[class.mat-checkbox-indeterminate]': 'indeterminate',\n '[class.mat-checkbox-checked]': 'checked',\n '[class.mat-checkbox-disabled]': 'disabled',\n '[class.mat-checkbox-label-before]': 'labelPosition == \"before\"',\n '[class._mat-animation-noopable]': `_animationMode === 'NoopAnimations'`\n },\n providers: [MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR],\n inputs: ['disableRipple', 'color', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\"@keyframes mat-checkbox-fade-in-background{0%{opacity:0}50%{opacity:1}}@keyframes mat-checkbox-fade-out-background{0%,50%{opacity:1}100%{opacity:0}}@keyframes mat-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:22.910259}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1)}100%{stroke-dashoffset:0}}@keyframes mat-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mat-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);stroke-dashoffset:0}to{stroke-dashoffset:-22.910259}}@keyframes mat-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(45deg)}}@keyframes mat-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:0;transform:rotate(45deg)}to{opacity:1;transform:rotate(360deg)}}@keyframes mat-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 0.1);opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:rotate(0deg)}}@keyframes mat-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);opacity:1;transform:rotate(0deg)}to{opacity:0;transform:rotate(315deg)}}@keyframes mat-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;opacity:1;transform:scaleX(1)}32.8%,100%{opacity:0;transform:scaleX(0)}}.mat-checkbox-background,.mat-checkbox-frame{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:2px;box-sizing:border-box;pointer-events:none}.mat-checkbox{display:inline-block;transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);cursor:pointer;-webkit-tap-highlight-color:transparent}._mat-animation-noopable.mat-checkbox{transition:none;animation:none}.mat-checkbox .mat-ripple-element:not(.mat-checkbox-persistent-ripple){opacity:.16}.mat-checkbox-layout{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:inherit;align-items:baseline;vertical-align:middle;display:inline-flex;white-space:nowrap}.mat-checkbox-label{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.mat-checkbox-inner-container{display:inline-block;height:16px;line-height:0;margin:auto;margin-right:8px;order:0;position:relative;vertical-align:middle;white-space:nowrap;width:16px;flex-shrink:0}[dir=rtl] .mat-checkbox-inner-container{margin-left:8px;margin-right:auto}.mat-checkbox-inner-container-no-side-margin{margin-left:0;margin-right:0}.mat-checkbox-frame{background-color:transparent;transition:border-color 90ms cubic-bezier(0, 0, 0.2, 0.1);border-width:2px;border-style:solid}._mat-animation-noopable .mat-checkbox-frame{transition:none}.cdk-high-contrast-active .mat-checkbox.cdk-keyboard-focused .mat-checkbox-frame{border-style:dotted}.mat-checkbox-background{align-items:center;display:inline-flex;justify-content:center;transition:background-color 90ms cubic-bezier(0, 0, 0.2, 0.1),opacity 90ms cubic-bezier(0, 0, 0.2, 0.1)}._mat-animation-noopable .mat-checkbox-background{transition:none}.cdk-high-contrast-active .mat-checkbox .mat-checkbox-background{background:none}.mat-checkbox-persistent-ripple{display:block;width:100%;height:100%;transform:none}.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:.04}.mat-checkbox.cdk-keyboard-focused .mat-checkbox-persistent-ripple{opacity:.12}.mat-checkbox-persistent-ripple,.mat-checkbox.mat-checkbox-disabled .mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{opacity:0}@media(hover: none){.mat-checkbox-inner-container:hover .mat-checkbox-persistent-ripple{display:none}}.mat-checkbox-checkmark{top:0;left:0;right:0;bottom:0;position:absolute;width:100%}.mat-checkbox-checkmark-path{stroke-dashoffset:22.910259;stroke-dasharray:22.910259;stroke-width:2.1333333333px}.cdk-high-contrast-black-on-white .mat-checkbox-checkmark-path{stroke:#000 !important}.mat-checkbox-mixedmark{width:calc(100% - 6px);height:2px;opacity:0;transform:scaleX(0) rotate(0deg);border-radius:2px}.cdk-high-contrast-active .mat-checkbox-mixedmark{height:0;border-top:solid 2px;margin-top:2px}.mat-checkbox-label-before .mat-checkbox-inner-container{order:1;margin-left:8px;margin-right:auto}[dir=rtl] .mat-checkbox-label-before .mat-checkbox-inner-container{margin-left:auto;margin-right:8px}.mat-checkbox-checked .mat-checkbox-checkmark{opacity:1}.mat-checkbox-checked .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-checked .mat-checkbox-mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark{opacity:0;transform:rotate(45deg)}.mat-checkbox-indeterminate .mat-checkbox-checkmark-path{stroke-dashoffset:0}.mat-checkbox-indeterminate .mat-checkbox-mixedmark{opacity:1;transform:scaleX(1) rotate(0deg)}.mat-checkbox-unchecked .mat-checkbox-background{background-color:transparent}.mat-checkbox-disabled{cursor:default}.cdk-high-contrast-active .mat-checkbox-disabled{opacity:.5}.mat-checkbox-anim-unchecked-checked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-checked .mat-checkbox-checkmark-path{animation:180ms linear 0ms mat-checkbox-unchecked-checked-checkmark-path}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-in-background}.mat-checkbox-anim-unchecked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-unchecked-indeterminate-mixedmark}.mat-checkbox-anim-checked-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-checked-unchecked .mat-checkbox-checkmark-path{animation:90ms linear 0ms mat-checkbox-checked-unchecked-checkmark-path}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-checkmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-checkmark}.mat-checkbox-anim-checked-indeterminate .mat-checkbox-mixedmark{animation:90ms linear 0ms mat-checkbox-checked-indeterminate-mixedmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-checkmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-checkmark}.mat-checkbox-anim-indeterminate-checked .mat-checkbox-mixedmark{animation:500ms linear 0ms mat-checkbox-indeterminate-checked-mixedmark}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-background{animation:180ms linear 0ms mat-checkbox-fade-out-background}.mat-checkbox-anim-indeterminate-unchecked .mat-checkbox-mixedmark{animation:300ms linear 0ms mat-checkbox-indeterminate-unchecked-mixedmark}.mat-checkbox-input{bottom:0;left:50%}.mat-checkbox .mat-checkbox-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.FocusMonitor }, { type: ɵngcc0.NgZone }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_CHECKBOX_DEFAULT_OPTIONS]\n }] }]; }, { ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], id: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], name: [{\n type: Input\n }], change: [{\n type: Output\n }], indeterminateChange: [{\n type: Output\n }], required: [{\n type: Input\n }], checked: [{\n type: Input\n }], disabled: [{\n type: Input\n }], indeterminate: [{\n type: Input\n }], ariaDescribedby: [{\n type: Input,\n args: ['aria-describedby']\n }], value: [{\n type: Input\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }], ripple: [{\n type: ViewChild,\n args: [MatRipple]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst MAT_CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatCheckboxRequiredValidator),\n multi: true\n};\n/**\n * Validator for Material checkbox's required attribute in template-driven checkbox.\n * Current CheckboxRequiredValidator only work with `input type=checkbox` and does not\n * work with `mat-checkbox`.\n */\nclass MatCheckboxRequiredValidator extends CheckboxRequiredValidator {\n}\nMatCheckboxRequiredValidator.ɵfac = function MatCheckboxRequiredValidator_Factory(t) { return ɵMatCheckboxRequiredValidator_BaseFactory(t || MatCheckboxRequiredValidator); };\nMatCheckboxRequiredValidator.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatCheckboxRequiredValidator, selectors: [[\"mat-checkbox\", \"required\", \"\", \"formControlName\", \"\"], [\"mat-checkbox\", \"required\", \"\", \"formControl\", \"\"], [\"mat-checkbox\", \"required\", \"\", \"ngModel\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([MAT_CHECKBOX_REQUIRED_VALIDATOR]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵMatCheckboxRequiredValidator_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatCheckboxRequiredValidator);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCheckboxRequiredValidator, [{\n type: Directive,\n args: [{\n selector: `mat-checkbox[required][formControlName],\n mat-checkbox[required][formControl], mat-checkbox[required][ngModel]`,\n providers: [MAT_CHECKBOX_REQUIRED_VALIDATOR]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** This module is used by both original and MDC-based checkbox implementations. */\nclass _MatCheckboxRequiredValidatorModule {\n}\n_MatCheckboxRequiredValidatorModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: _MatCheckboxRequiredValidatorModule });\n_MatCheckboxRequiredValidatorModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function _MatCheckboxRequiredValidatorModule_Factory(t) { return new (t || _MatCheckboxRequiredValidatorModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(_MatCheckboxRequiredValidatorModule, { declarations: [MatCheckboxRequiredValidator], exports: [MatCheckboxRequiredValidator] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatCheckboxRequiredValidatorModule, [{\n type: NgModule,\n args: [{\n exports: [MatCheckboxRequiredValidator],\n declarations: [MatCheckboxRequiredValidator]\n }]\n }], null, null); })();\nclass MatCheckboxModule {\n}\nMatCheckboxModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatCheckboxModule });\nMatCheckboxModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatCheckboxModule_Factory(t) { return new (t || MatCheckboxModule)(); }, imports: [[\n MatRippleModule, MatCommonModule, ObserversModule,\n _MatCheckboxRequiredValidatorModule\n ], MatCommonModule, _MatCheckboxRequiredValidatorModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatCheckboxModule, { declarations: function () { return [MatCheckbox]; }, imports: function () { return [MatRippleModule, MatCommonModule, ObserversModule, _MatCheckboxRequiredValidatorModule]; }, exports: function () { return [MatCheckbox, MatCommonModule, _MatCheckboxRequiredValidatorModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatCheckboxModule, [{\n type: NgModule,\n args: [{\n imports: [\n MatRippleModule, MatCommonModule, ObserversModule,\n _MatCheckboxRequiredValidatorModule\n ],\n exports: [MatCheckbox, MatCommonModule, _MatCheckboxRequiredValidatorModule],\n declarations: [MatCheckbox]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR, MAT_CHECKBOX_DEFAULT_OPTIONS, MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY, MAT_CHECKBOX_REQUIRED_VALIDATOR, MatCheckbox, MatCheckboxChange, MatCheckboxModule, MatCheckboxRequiredValidator, _MatCheckboxRequiredValidatorModule };\n\n//# sourceMappingURL=checkbox.js.map","import { Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, Optional, Inject, ViewChild, Input, NgModule } from '@angular/core';\nimport { mixinColor, mixinDisabled, mixinDisableRipple, MatRipple, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Default color palette for round buttons (mat-fab and mat-mini-fab) */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/a11y';\nimport * as ɵngcc2 from '@angular/material/core';\n\nconst _c0 = [\"mat-button\", \"\"];\nconst _c1 = [\"*\"];\nconst _c2 = \".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:block;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\\n\";\nconst DEFAULT_ROUND_BUTTON_COLOR = 'accent';\n/**\n * List of classes to add to MatButton instances based on host attributes to\n * style as different variants.\n */\nconst BUTTON_HOST_ATTRIBUTES = [\n 'mat-button',\n 'mat-flat-button',\n 'mat-icon-button',\n 'mat-raised-button',\n 'mat-stroked-button',\n 'mat-mini-fab',\n 'mat-fab',\n];\n// Boilerplate for applying mixins to MatButton.\n/** @docs-private */\nclass MatButtonBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatButtonMixinBase = mixinColor(mixinDisabled(mixinDisableRipple(MatButtonBase)));\n/**\n * Material design button.\n */\nclass MatButton extends _MatButtonMixinBase {\n constructor(elementRef, _focusMonitor, _animationMode) {\n super(elementRef);\n this._focusMonitor = _focusMonitor;\n this._animationMode = _animationMode;\n /** Whether the button is round. */\n this.isRoundButton = this._hasHostAttributes('mat-fab', 'mat-mini-fab');\n /** Whether the button is icon button. */\n this.isIconButton = this._hasHostAttributes('mat-icon-button');\n // For each of the variant selectors that is present in the button's host\n // attributes, add the correct corresponding class.\n for (const attr of BUTTON_HOST_ATTRIBUTES) {\n if (this._hasHostAttributes(attr)) {\n this._getHostElement().classList.add(attr);\n }\n }\n // Add a class that applies to all buttons. This makes it easier to target if somebody\n // wants to target all Material buttons. We do it here rather than `host` to ensure that\n // the class is applied to derived classes.\n elementRef.nativeElement.classList.add('mat-button-base');\n if (this.isRoundButton) {\n this.color = DEFAULT_ROUND_BUTTON_COLOR;\n }\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Focuses the button. */\n focus(origin = 'program', options) {\n this._focusMonitor.focusVia(this._getHostElement(), origin, options);\n }\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n /** Gets whether the button has one of the given attributes. */\n _hasHostAttributes(...attributes) {\n return attributes.some(attribute => this._getHostElement().hasAttribute(attribute));\n }\n}\nMatButton.ɵfac = function MatButton_Factory(t) { return new (t || MatButton)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatButton.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatButton, selectors: [[\"button\", \"mat-button\", \"\"], [\"button\", \"mat-raised-button\", \"\"], [\"button\", \"mat-icon-button\", \"\"], [\"button\", \"mat-fab\", \"\"], [\"button\", \"mat-mini-fab\", \"\"], [\"button\", \"mat-stroked-button\", \"\"], [\"button\", \"mat-flat-button\", \"\"]], viewQuery: function MatButton_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(MatRipple, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ripple = _t.first);\n } }, hostAttrs: [1, \"mat-focus-indicator\"], hostVars: 5, hostBindings: function MatButton_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"disabled\", ctx.disabled || null);\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-button-disabled\", ctx.disabled);\n } }, inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", color: \"color\" }, exportAs: [\"matButton\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], attrs: _c0, ngContentSelectors: _c1, decls: 4, vars: 5, consts: [[1, \"mat-button-wrapper\"], [\"matRipple\", \"\", 1, \"mat-button-ripple\", 3, \"matRippleDisabled\", \"matRippleCentered\", \"matRippleTrigger\"], [1, \"mat-button-focus-overlay\"]], template: function MatButton_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"span\", 1);\n ɵngcc0.ɵɵelement(3, \"span\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-button-ripple-round\", ctx.isRoundButton || ctx.isIconButton);\n ɵngcc0.ɵɵproperty(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", ctx.isIconButton)(\"matRippleTrigger\", ctx._getHostElement());\n } }, directives: [ɵngcc2.MatRipple], styles: [_c2], encapsulation: 2, changeDetection: 0 });\nMatButton.ctorParameters = () => [\n { type: ElementRef },\n { type: FocusMonitor },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatButton.propDecorators = {\n ripple: [{ type: ViewChild, args: [MatRipple,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatButton, [{\n type: Component,\n args: [{\n selector: `button[mat-button], button[mat-raised-button], button[mat-icon-button],\n button[mat-fab], button[mat-mini-fab], button[mat-stroked-button],\n button[mat-flat-button]`,\n exportAs: 'matButton',\n host: {\n '[attr.disabled]': 'disabled || null',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n // Add a class for disabled button styling instead of the using attribute\n // selector or pseudo-selector. This allows users to create focusabled\n // disabled buttons without recreating the styles.\n '[class.mat-button-disabled]': 'disabled',\n 'class': 'mat-focus-indicator'\n },\n template: \"\\n\\n\\n\",\n inputs: ['disabled', 'disableRipple', 'color'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:block;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.FocusMonitor }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { ripple: [{\n type: ViewChild,\n args: [MatRipple]\n }] }); })();\n/**\n * Material design anchor button.\n */\nclass MatAnchor extends MatButton {\n constructor(focusMonitor, elementRef, animationMode) {\n super(elementRef, focusMonitor, animationMode);\n }\n _haltDisabledEvents(event) {\n // A disabled button shouldn't apply any actions\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\nMatAnchor.ɵfac = function MatAnchor_Factory(t) { return new (t || MatAnchor)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.FocusMonitor), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8)); };\nMatAnchor.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatAnchor, selectors: [[\"a\", \"mat-button\", \"\"], [\"a\", \"mat-raised-button\", \"\"], [\"a\", \"mat-icon-button\", \"\"], [\"a\", \"mat-fab\", \"\"], [\"a\", \"mat-mini-fab\", \"\"], [\"a\", \"mat-stroked-button\", \"\"], [\"a\", \"mat-flat-button\", \"\"]], hostAttrs: [1, \"mat-focus-indicator\"], hostVars: 7, hostBindings: function MatAnchor_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function MatAnchor_click_HostBindingHandler($event) { return ctx._haltDisabledEvents($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? -1 : ctx.tabIndex || 0)(\"disabled\", ctx.disabled || null)(\"aria-disabled\", ctx.disabled.toString());\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._animationMode === \"NoopAnimations\")(\"mat-button-disabled\", ctx.disabled);\n } }, inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", color: \"color\", tabIndex: \"tabIndex\" }, exportAs: [\"matButton\", \"matAnchor\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], attrs: _c0, ngContentSelectors: _c1, decls: 4, vars: 5, consts: [[1, \"mat-button-wrapper\"], [\"matRipple\", \"\", 1, \"mat-button-ripple\", 3, \"matRippleDisabled\", \"matRippleCentered\", \"matRippleTrigger\"], [1, \"mat-button-focus-overlay\"]], template: function MatAnchor_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"span\", 1);\n ɵngcc0.ɵɵelement(3, \"span\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"mat-button-ripple-round\", ctx.isRoundButton || ctx.isIconButton);\n ɵngcc0.ɵɵproperty(\"matRippleDisabled\", ctx._isRippleDisabled())(\"matRippleCentered\", ctx.isIconButton)(\"matRippleTrigger\", ctx._getHostElement());\n } }, directives: [ɵngcc2.MatRipple], styles: [_c2], encapsulation: 2, changeDetection: 0 });\nMatAnchor.ctorParameters = () => [\n { type: FocusMonitor },\n { type: ElementRef },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }\n];\nMatAnchor.propDecorators = {\n tabIndex: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatAnchor, [{\n type: Component,\n args: [{\n selector: `a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab],\n a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]`,\n exportAs: 'matButton, matAnchor',\n host: {\n // Note that we ignore the user-specified tabindex when it's disabled for\n // consistency with the `mat-button` applied on native buttons where even\n // though they have an index, they're not tabbable.\n '[attr.tabindex]': 'disabled ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || null',\n '[attr.aria-disabled]': 'disabled.toString()',\n '(click)': '_haltDisabledEvents($event)',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n '[class.mat-button-disabled]': 'disabled',\n 'class': 'mat-focus-indicator'\n },\n inputs: ['disabled', 'disableRipple', 'color'],\n template: \"\\n\\n\\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-button .mat-button-focus-overlay,.mat-icon-button .mat-button-focus-overlay{opacity:0}.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:.04}@media(hover: none){.mat-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay,.mat-stroked-button:hover:not(.mat-button-disabled) .mat-button-focus-overlay{opacity:0}}.mat-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-button.mat-button-disabled,.mat-icon-button.mat-button-disabled,.mat-stroked-button.mat-button-disabled,.mat-flat-button.mat-button-disabled{cursor:default}.mat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-button.cdk-program-focused .mat-button-focus-overlay,.mat-icon-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-icon-button.cdk-program-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-stroked-button.cdk-program-focused .mat-button-focus-overlay,.mat-flat-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-flat-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-button::-moz-focus-inner,.mat-icon-button::-moz-focus-inner,.mat-stroked-button::-moz-focus-inner,.mat-flat-button::-moz-focus-inner{border:0}.mat-raised-button{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-raised-button::-moz-focus-inner{border:0}.mat-raised-button.mat-button-disabled{cursor:default}.mat-raised-button.cdk-keyboard-focused .mat-button-focus-overlay,.mat-raised-button.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-raised-button::-moz-focus-inner{border:0}._mat-animation-noopable.mat-raised-button{transition:none;animation:none}.mat-stroked-button{border:1px solid currentColor;padding:0 15px;line-height:34px}.mat-stroked-button .mat-button-ripple.mat-ripple,.mat-stroked-button .mat-button-focus-overlay{top:-1px;left:-1px;right:-1px;bottom:-1px}.mat-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:56px;height:56px;padding:0;flex-shrink:0}.mat-fab::-moz-focus-inner{border:0}.mat-fab.mat-button-disabled{cursor:default}.mat-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-fab{transition:none;animation:none}.mat-fab .mat-button-wrapper{padding:16px 0;display:inline-block;line-height:24px}.mat-mini-fab{box-sizing:border-box;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;display:inline-block;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;margin:0;min-width:64px;line-height:36px;padding:0 16px;border-radius:4px;overflow:visible;transform:translate3d(0, 0, 0);transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);min-width:0;border-radius:50%;width:40px;height:40px;padding:0;flex-shrink:0}.mat-mini-fab::-moz-focus-inner{border:0}.mat-mini-fab.mat-button-disabled{cursor:default}.mat-mini-fab.cdk-keyboard-focused .mat-button-focus-overlay,.mat-mini-fab.cdk-program-focused .mat-button-focus-overlay{opacity:.12}.mat-mini-fab::-moz-focus-inner{border:0}._mat-animation-noopable.mat-mini-fab{transition:none;animation:none}.mat-mini-fab .mat-button-wrapper{padding:8px 0;display:inline-block;line-height:24px}.mat-icon-button{padding:0;min-width:0;width:40px;height:40px;flex-shrink:0;line-height:40px;border-radius:50%}.mat-icon-button i,.mat-icon-button .mat-icon{line-height:24px}.mat-button-ripple.mat-ripple,.mat-button-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-button-ripple.mat-ripple:not(:empty){transform:translateZ(0)}.mat-button-focus-overlay{opacity:0;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1),background-color 200ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-button-focus-overlay{transition:none}.mat-button-ripple-round{border-radius:50%;z-index:1}.mat-button .mat-button-wrapper>*,.mat-flat-button .mat-button-wrapper>*,.mat-stroked-button .mat-button-wrapper>*,.mat-raised-button .mat-button-wrapper>*,.mat-icon-button .mat-button-wrapper>*,.mat-fab .mat-button-wrapper>*,.mat-mini-fab .mat-button-wrapper>*{vertical-align:middle}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button{display:block;font-size:inherit;width:2.5em;height:2.5em}.cdk-high-contrast-active .mat-button,.cdk-high-contrast-active .mat-flat-button,.cdk-high-contrast-active .mat-raised-button,.cdk-high-contrast-active .mat-icon-button,.cdk-high-contrast-active .mat-fab,.cdk-high-contrast-active .mat-mini-fab{outline:solid 1px}.cdk-high-contrast-active .mat-button-base.cdk-keyboard-focused,.cdk-high-contrast-active .mat-button-base.cdk-program-focused{outline:solid 3px}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc1.FocusMonitor }, { type: ɵngcc0.ElementRef }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }]; }, { tabIndex: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatButtonModule {\n}\nMatButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatButtonModule });\nMatButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatButtonModule_Factory(t) { return new (t || MatButtonModule)(); }, imports: [[\n MatRippleModule,\n MatCommonModule,\n ], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatButtonModule, { declarations: function () { return [MatButton, MatAnchor]; }, imports: function () { return [MatRippleModule,\n MatCommonModule]; }, exports: function () { return [MatButton, MatAnchor, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatButtonModule, [{\n type: NgModule,\n args: [{\n imports: [\n MatRippleModule,\n MatCommonModule,\n ],\n exports: [\n MatButton,\n MatAnchor,\n MatCommonModule,\n ],\n declarations: [\n MatButton,\n MatAnchor,\n ]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatAnchor, MatButton, MatButtonModule };\n\n//# sourceMappingURL=button.js.map","import { ApplicationRef, Injectable } from '@angular/core';\nimport { MediaMatcher } from '@angular/cdk/layout';\nimport { WindowService } from '../../services/window.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SharedService {\n public mobileQuery: MediaQueryList;\n public mobileQueryListener: () => void;\n\n constructor(media: MediaMatcher, private ref: ApplicationRef, private win: WindowService) {\n this.mobileQuery = media.matchMedia('(max-width: 959px)');\n this.mobileQueryListener = () => this.ref.tick();\n this.mobileQuery.addEventListener('change', this.mobileQueryListener);\n }\n\n public scrollToTop() {\n this.win.windowRef.scrollTo(0, 0);\n }\n\n public bottomSpace() {\n return this.mobileQuery.matches ? 'mb-40' : 'mb-60';\n }\n\n public mainSpace() {\n return this.mobileQuery.matches ? 'pt-40 mb-40' : 'pt-80 mb-80';\n }\n}\n","function setAccessor(field) {\n return function(value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n\n return this;\n };\n}\n\nfunction getAccessor(field) {\n return function() {\n return this[field];\n };\n}\n\nfunction defineAccessors(fn, fields) {\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i];\n let capitalized = name.charAt(0).toUpperCase() +\n name.substring(1, name.length);\n\n fn[\"set\" + capitalized] = setAccessor(name);\n fn[\"get\" + capitalized] = getAccessor(name);\n }\n}\n\nconst withAccessors = (TBase, names) => {\n const result = class extends TBase {};\n defineAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withAccessors;\n","import { InjectionToken, inject, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, NgZone, Optional, Inject, Input, ViewChild, Output, NgModule } from '@angular/core';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatProgressBar.\n/** @docs-private */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\n\nconst _c0 = [\"primaryValueBar\"];\nclass MatProgressBarBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatProgressBarMixinBase = mixinColor(MatProgressBarBase, 'primary');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = new InjectionToken('mat-progress-bar-location', { providedIn: 'root', factory: MAT_PROGRESS_BAR_LOCATION_FACTORY });\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => _location ? (_location.pathname + _location.search) : ''\n };\n}\n/** Counter used to generate unique IDs for progress bars. */\nlet progressbarId = 0;\n/**\n * `` component.\n */\nclass MatProgressBar extends _MatProgressBarMixinBase {\n constructor(_elementRef, _ngZone, _animationMode, \n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n location) {\n super(_elementRef);\n this._elementRef = _elementRef;\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n this._isNoopAnimation = false;\n this._value = 0;\n this._bufferValue = 0;\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n this.animationEnd = new EventEmitter();\n /** Reference to animation end subscription to be unsubscribed on destroy. */\n this._animationEndSubscription = Subscription.EMPTY;\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n this.mode = 'determinate';\n /** ID of the progress bar. */\n this.progressbarId = `mat-progress-bar-${progressbarId++}`;\n // We need to prefix the SVG reference with the current path, otherwise they won't work\n // in Safari if the page has a `` tag. Note that we need quotes inside the `url()`,\n // because named route URLs can contain parentheses (see #12338). Also we don't use since\n // we can't tell the difference between whether\n // the consumer is using the hash location strategy or not, because `Location` normalizes\n // both `/#/foo/bar` and `/foo/bar` to the same thing.\n const path = location ? location.getPathname().split('#')[0] : '';\n this._rectangleFillValue = `url('${path}#${this.progressbarId}')`;\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n }\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n get value() { return this._value; }\n set value(v) {\n this._value = clamp(coerceNumberProperty(v) || 0);\n }\n /** Buffer value of the progress bar. Defaults to zero. */\n get bufferValue() { return this._bufferValue; }\n set bufferValue(v) { this._bufferValue = clamp(v || 0); }\n /** Gets the current transform value for the progress bar's primary indicator. */\n _primaryTransform() {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.value / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n /**\n * Gets the current transform value for the progress bar's buffer indicator. Only used if the\n * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\n */\n _bufferTransform() {\n if (this.mode === 'buffer') {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.bufferValue / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n return null;\n }\n ngAfterViewInit() {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular((() => {\n const element = this._primaryValueBar.nativeElement;\n this._animationEndSubscription =\n fromEvent(element, 'transitionend')\n .pipe(filter(((e) => e.target === element)))\n .subscribe(() => {\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this._ngZone.run(() => this.animationEnd.next({ value: this.value }));\n }\n });\n }));\n }\n ngOnDestroy() {\n this._animationEndSubscription.unsubscribe();\n }\n}\nMatProgressBar.ɵfac = function MatProgressBar_Factory(t) { return new (t || MatProgressBar)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ANIMATION_MODULE_TYPE, 8), ɵngcc0.ɵɵdirectiveInject(MAT_PROGRESS_BAR_LOCATION, 8)); };\nMatProgressBar.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatProgressBar, selectors: [[\"mat-progress-bar\"]], viewQuery: function MatProgressBar_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._primaryValueBar = _t.first);\n } }, hostAttrs: [\"role\", \"progressbar\", \"aria-valuemin\", \"0\", \"aria-valuemax\", \"100\", 1, \"mat-progress-bar\"], hostVars: 4, hostBindings: function MatProgressBar_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-valuenow\", ctx.mode === \"indeterminate\" || ctx.mode === \"query\" ? null : ctx.value)(\"mode\", ctx.mode);\n ɵngcc0.ɵɵclassProp(\"_mat-animation-noopable\", ctx._isNoopAnimation);\n } }, inputs: { color: \"color\", mode: \"mode\", value: \"value\", bufferValue: \"bufferValue\" }, outputs: { animationEnd: \"animationEnd\" }, exportAs: [\"matProgressBar\"], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 9, vars: 4, consts: [[\"width\", \"100%\", \"height\", \"4\", \"focusable\", \"false\", 1, \"mat-progress-bar-background\", \"mat-progress-bar-element\"], [\"x\", \"4\", \"y\", \"0\", \"width\", \"8\", \"height\", \"4\", \"patternUnits\", \"userSpaceOnUse\", 3, \"id\"], [\"cx\", \"2\", \"cy\", \"2\", \"r\", \"2\"], [\"width\", \"100%\", \"height\", \"100%\"], [1, \"mat-progress-bar-buffer\", \"mat-progress-bar-element\", 3, \"ngStyle\"], [1, \"mat-progress-bar-primary\", \"mat-progress-bar-fill\", \"mat-progress-bar-element\", 3, \"ngStyle\"], [\"primaryValueBar\", \"\"], [1, \"mat-progress-bar-secondary\", \"mat-progress-bar-fill\", \"mat-progress-bar-element\"]], template: function MatProgressBar_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵnamespaceSVG();\n ɵngcc0.ɵɵelementStart(0, \"svg\", 0);\n ɵngcc0.ɵɵelementStart(1, \"defs\");\n ɵngcc0.ɵɵelementStart(2, \"pattern\", 1);\n ɵngcc0.ɵɵelement(3, \"circle\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(4, \"rect\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵnamespaceHTML();\n ɵngcc0.ɵɵelement(5, \"div\", 4);\n ɵngcc0.ɵɵelement(6, \"div\", 5, 6);\n ɵngcc0.ɵɵelement(8, \"div\", 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.progressbarId);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"fill\", ctx._rectangleFillValue);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._bufferTransform());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx._primaryTransform());\n } }, directives: [ɵngcc1.NgStyle], styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatProgressBar.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_PROGRESS_BAR_LOCATION,] }] }\n];\nMatProgressBar.propDecorators = {\n value: [{ type: Input }],\n bufferValue: [{ type: Input }],\n _primaryValueBar: [{ type: ViewChild, args: ['primaryValueBar',] }],\n animationEnd: [{ type: Output }],\n mode: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatProgressBar, [{\n type: Component,\n args: [{\n selector: 'mat-progress-bar',\n exportAs: 'matProgressBar',\n host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': '(mode === \"indeterminate\" || mode === \"query\") ? null : value',\n '[attr.mode]': 'mode',\n 'class': 'mat-progress-bar',\n '[class._mat-animation-noopable]': '_isNoopAnimation'\n },\n inputs: ['color'],\n template: \"\\n\\n \\n \\n \\n \\n \\n \\n\\n
    \\n
    \\n
    \\n\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: String, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_LOCATION]\n }] }]; }, { animationEnd: [{\n type: Output\n }], mode: [{\n type: Input\n }], value: [{\n type: Input\n }], bufferValue: [{\n type: Input\n }], _primaryValueBar: [{\n type: ViewChild,\n args: ['primaryValueBar']\n }] }); })();\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressBarModule {\n}\nMatProgressBarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatProgressBarModule });\nMatProgressBarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatProgressBarModule_Factory(t) { return new (t || MatProgressBarModule)(); }, imports: [[CommonModule, MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatProgressBarModule, { declarations: function () { return [MatProgressBar]; }, imports: function () { return [CommonModule, MatCommonModule]; }, exports: function () { return [MatProgressBar, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatProgressBarModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatProgressBar, MatCommonModule],\n declarations: [MatProgressBar]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n\n//# sourceMappingURL=progress-bar.js.map","export function isPromise(value) {\n return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map","import { InjectionToken, inject, EventEmitter, ɵɵdefineInjectable, ɵɵinject, Injectable, Optional, Inject, Directive, Output, Input, NgModule } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token used to inject the document into Directionality.\n * This is used so that the value can be faked in tests.\n *\n * We can't use the real document in tests because changing the real `dir` causes geometry-based\n * tests in Safari to fail.\n *\n * We also can't re-provide the DOCUMENT token from platform-brower because the unit tests\n * themselves use things like `querySelector` in test code.\n *\n * This token is defined in a separate file from Directionality as a workaround for\n * https://github.com/angular/angular/issues/22559\n *\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nconst DIR_DOCUMENT = new InjectionToken('cdk-dir-doc', {\n providedIn: 'root',\n factory: DIR_DOCUMENT_FACTORY,\n});\n/** @docs-private */\nfunction DIR_DOCUMENT_FACTORY() {\n return inject(DOCUMENT);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The directionality (LTR / RTL) context for the application (or a subtree of it).\n * Exposes the current direction and a stream of direction changes.\n */\nclass Directionality {\n constructor(_document) {\n /** The current 'ltr' or 'rtl' value. */\n this.value = 'ltr';\n /** Stream that emits whenever the 'ltr' / 'rtl' state changes. */\n this.change = new EventEmitter();\n if (_document) {\n // TODO: handle 'auto' value -\n // We still need to account for dir=\"auto\".\n // It looks like HTMLElemenet.dir is also \"auto\" when that's set to the attribute,\n // but getComputedStyle return either \"ltr\" or \"rtl\". avoiding getComputedStyle for now\n const bodyDir = _document.body ? _document.body.dir : null;\n const htmlDir = _document.documentElement ? _document.documentElement.dir : null;\n const value = bodyDir || htmlDir;\n this.value = (value === 'ltr' || value === 'rtl') ? value : 'ltr';\n }\n }\n ngOnDestroy() {\n this.change.complete();\n }\n}\nDirectionality.ɵfac = function Directionality_Factory(t) { return new (t || Directionality)(ɵngcc0.ɵɵinject(DIR_DOCUMENT, 8)); };\nDirectionality.ɵprov = ɵɵdefineInjectable({ factory: function Directionality_Factory() { return new Directionality(ɵɵinject(DIR_DOCUMENT, 8)); }, token: Directionality, providedIn: \"root\" });\nDirectionality.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DIR_DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(Directionality, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DIR_DOCUMENT]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Directive to listen for changes of direction of part of the DOM.\n *\n * Provides itself as Directionality such that descendant directives only need to ever inject\n * Directionality to get the closest direction.\n */\nclass Dir {\n constructor() {\n /** Normalized direction that accounts for invalid/unsupported values. */\n this._dir = 'ltr';\n /** Whether the `value` has been set to its initial value. */\n this._isInitialized = false;\n /** Event emitted when the direction changes. */\n this.change = new EventEmitter();\n }\n /** @docs-private */\n get dir() { return this._dir; }\n set dir(value) {\n const old = this._dir;\n const normalizedValue = value ? value.toLowerCase() : value;\n this._rawDir = value;\n this._dir = (normalizedValue === 'ltr' || normalizedValue === 'rtl') ? normalizedValue : 'ltr';\n if (old !== this._dir && this._isInitialized) {\n this.change.emit(this._dir);\n }\n }\n /** Current layout direction of the element. */\n get value() { return this.dir; }\n /** Initialize once default value has been set. */\n ngAfterContentInit() {\n this._isInitialized = true;\n }\n ngOnDestroy() {\n this.change.complete();\n }\n}\nDir.ɵfac = function Dir_Factory(t) { return new (t || Dir)(); };\nDir.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Dir, selectors: [[\"\", \"dir\", \"\"]], hostVars: 1, hostBindings: function Dir_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx._rawDir);\n } }, inputs: { dir: \"dir\" }, outputs: { change: \"dirChange\" }, exportAs: [\"dir\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: Directionality, useExisting: Dir }])] });\nDir.propDecorators = {\n change: [{ type: Output, args: ['dirChange',] }],\n dir: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(Dir, [{\n type: Directive,\n args: [{\n selector: '[dir]',\n providers: [{ provide: Directionality, useExisting: Dir }],\n host: { '[attr.dir]': '_rawDir' },\n exportAs: 'dir'\n }]\n }], function () { return []; }, { change: [{\n type: Output,\n args: ['dirChange']\n }], dir: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass BidiModule {\n}\nBidiModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: BidiModule });\nBidiModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function BidiModule_Factory(t) { return new (t || BidiModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(BidiModule, { declarations: [Dir], exports: [Dir] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BidiModule, [{\n type: NgModule,\n args: [{\n exports: [Dir],\n declarations: [Dir]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BidiModule, DIR_DOCUMENT, Dir, Directionality, DIR_DOCUMENT_FACTORY as ɵangular_material_src_cdk_bidi_bidi_a };\n\n//# sourceMappingURL=bidi.js.map","import BaseSurface from './core/surface';\nimport SurfaceFactory from './surface-factory';\n\nclass Surface extends BaseSurface {\n static get support() {\n return SurfaceFactory.support;\n }\n\n static create(element, options) {\n return SurfaceFactory.current.create(element, options);\n }\n}\n\nexport default Surface;\n\n","/* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\nconst literals = {\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n 1000 : \"m\"\n};\n\nexport default function arabicToRoman(n) {\n const values = [ 1000,\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\n\n let roman = \"\";\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n}","import { Observable } from '../Observable';\nimport { isArray } from '../util/isArray';\nimport { map } from '../operators/map';\nimport { isObject } from '../util/isObject';\nimport { from } from './from';\nexport function forkJoin(...sources) {\n if (sources.length === 1) {\n const first = sources[0];\n if (isArray(first)) {\n return forkJoinInternal(first, null);\n }\n if (isObject(first) && Object.getPrototypeOf(first) === Object.prototype) {\n const keys = Object.keys(first);\n return forkJoinInternal(keys.map(key => first[key]), keys);\n }\n }\n if (typeof sources[sources.length - 1] === 'function') {\n const resultSelector = sources.pop();\n sources = (sources.length === 1 && isArray(sources[0])) ? sources[0] : sources;\n return forkJoinInternal(sources, null).pipe(map((args) => resultSelector(...args)));\n }\n return forkJoinInternal(sources, null);\n}\nfunction forkJoinInternal(sources, keys) {\n return new Observable(subscriber => {\n const len = sources.length;\n if (len === 0) {\n subscriber.complete();\n return;\n }\n const values = new Array(len);\n let completed = 0;\n let emitted = 0;\n for (let i = 0; i < len; i++) {\n const source = from(sources[i]);\n let hasValue = false;\n subscriber.add(source.subscribe({\n next: value => {\n if (!hasValue) {\n hasValue = true;\n emitted++;\n }\n values[i] = value;\n },\n error: err => subscriber.error(err),\n complete: () => {\n completed++;\n if (completed === len || !hasValue) {\n if (emitted === len) {\n subscriber.next(keys ?\n keys.reduce((result, key, i) => (result[key] = values[i], result), {}) :\n values);\n }\n subscriber.complete();\n }\n }\n }));\n }\n });\n}\n//# sourceMappingURL=forkJoin.js.map","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"crnd\";","import { Overlay, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { InjectionToken, Directive, EventEmitter, ChangeDetectorRef, NgZone, ElementRef, Optional, Inject, Self, Attribute, ViewChild, Input, Output, Component, ViewEncapsulation, ChangeDetectionStrategy, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { mixinDisableRipple, mixinTabIndex, mixinDisabled, mixinErrorState, ErrorStateMatcher, _countGroupLabelsBeforeOption, _getOptionScrollPosition, MAT_OPTION_PARENT_COMPONENT, MatOption, MAT_OPTGROUP, MatOptionModule, MatCommonModule } from '@angular/material/core';\nimport { MatFormField, MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { ViewportRuler, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { ActiveDescendantKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW, ENTER, SPACE, hasModifierKey, A } from '@angular/cdk/keycodes';\nimport { NgForm, FormGroupDirective, NgControl } from '@angular/forms';\nimport { Subject, defer, merge } from 'rxjs';\nimport { startWith, switchMap, take, filter, map, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { trigger, transition, query, animateChild, state, style, animate } from '@angular/animations';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The following are all the animations for the mat-select component, with each\n * const containing the metadata for one animation.\n *\n * The values below match the implementation of the AngularJS Material mat-select animation.\n * @docs-private\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/cdk/scrolling';\nimport * as ɵngcc2 from '@angular/material/core';\nimport * as ɵngcc3 from '@angular/cdk/bidi';\nimport * as ɵngcc4 from '@angular/forms';\nimport * as ɵngcc5 from '@angular/cdk/a11y';\nimport * as ɵngcc6 from '@angular/material/form-field';\nimport * as ɵngcc7 from '@angular/cdk/overlay';\nimport * as ɵngcc8 from '@angular/common';\n\nconst _c0 = [\"trigger\"];\nconst _c1 = [\"panel\"];\nfunction MatSelect_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 8);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.placeholder || \"\\u00A0\");\n} }\nfunction MatSelect_span_5_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r5.triggerValue || \"\\u00A0\");\n} }\nfunction MatSelect_span_5_ng_content_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngSwitchCase\", \"true\"]);\n} }\nfunction MatSelect_span_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵtemplate(1, MatSelect_span_5_span_1_Template, 2, 1, \"span\", 10);\n ɵngcc0.ɵɵtemplate(2, MatSelect_span_5_ng_content_2_Template, 1, 0, \"ng-content\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngSwitch\", !!ctx_r3.customTrigger);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n} }\nfunction MatSelect_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 12);\n ɵngcc0.ɵɵelementStart(1, \"div\", 13, 14);\n ɵngcc0.ɵɵlistener(\"@transformPanel.done\", function MatSelect_ng_template_8_Template_div_animation_transformPanel_done_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8._panelDoneAnimatingStream.next($event.toState); })(\"keydown\", function MatSelect_ng_template_8_Template_div_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10._handleKeydown($event); });\n ɵngcc0.ɵɵprojection(3, 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@transformPanelWrap\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassMapInterpolate1(\"mat-select-panel \", ctx_r4._getPanelTheme(), \"\");\n ɵngcc0.ɵɵstyleProp(\"transform-origin\", ctx_r4._transformOrigin)(\"font-size\", ctx_r4._triggerFontSize, \"px\");\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.panelClass)(\"@transformPanel\", ctx_r4.multiple ? \"showing-multiple\" : \"showing\");\n ɵngcc0.ɵɵattribute(\"id\", ctx_r4.id + \"-panel\")(\"aria-multiselectable\", ctx_r4.multiple)(\"aria-label\", ctx_r4.ariaLabel || null)(\"aria-labelledby\", ctx_r4._getPanelAriaLabelledby());\n} }\nconst _c2 = [[[\"mat-select-trigger\"]], \"*\"];\nconst _c3 = [\"mat-select-trigger\", \"*\"];\nconst matSelectAnimations = {\n /**\n * This animation ensures the select's overlay panel animation (transformPanel) is called when\n * closing the select.\n * This is needed due to https://github.com/angular/angular/issues/23302\n */\n transformPanelWrap: trigger('transformPanelWrap', [\n transition('* => void', query('@transformPanel', [animateChild()], { optional: true }))\n ]),\n /**\n * This animation transforms the select's overlay panel on and off the page.\n *\n * When the panel is attached to the DOM, it expands its width by the amount of padding, scales it\n * up to 100% on the Y axis, fades in its border, and translates slightly up and to the\n * side to ensure the option text correctly overlaps the trigger text.\n *\n * When the panel is removed from the DOM, it simply fades out linearly.\n */\n transformPanel: trigger('transformPanel', [\n state('void', style({\n transform: 'scaleY(0.8)',\n minWidth: '100%',\n opacity: 0\n })),\n state('showing', style({\n opacity: 1,\n minWidth: 'calc(100% + 32px)',\n transform: 'scaleY(1)'\n })),\n state('showing-multiple', style({\n opacity: 1,\n minWidth: 'calc(100% + 64px)',\n transform: 'scaleY(1)'\n })),\n transition('void => *', animate('120ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void', animate('100ms 25ms linear', style({ opacity: 0 })))\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Returns an exception to be thrown when attempting to change a select's `multiple` option\n * after initialization.\n * @docs-private\n */\nfunction getMatSelectDynamicMultipleError() {\n return Error('Cannot change `multiple` mode of select after initialization.');\n}\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value to a select\n * in `multiple` mode. Note that `undefined` and `null` are still valid values to allow for\n * resetting the value.\n * @docs-private\n */\nfunction getMatSelectNonArrayValueError() {\n return Error('Value must be an array in multiple-selection mode.');\n}\n/**\n * Returns an exception to be thrown when assigning a non-function value to the comparator\n * used to determine if a value corresponds to an option. Note that whether the function\n * actually takes two values and returns a boolean is not checked.\n */\nfunction getMatSelectNonFunctionValueError() {\n return Error('`compareWith` must be a function.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet nextUniqueId = 0;\n/**\n * The following style constants are necessary to save here in order\n * to properly calculate the alignment of the selected option over\n * the trigger element.\n */\n/**\n * The max height of the select's overlay panel.\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_PANEL_MAX_HEIGHT = 256;\n/**\n * The panel's padding on the x-axis.\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_PANEL_PADDING_X = 16;\n/**\n * The panel's x axis padding if it is indented (e.g. there is an option group).\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_PANEL_INDENT_PADDING_X = SELECT_PANEL_PADDING_X * 2;\n/**\n * The height of the select items in `em` units.\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_ITEM_HEIGHT_EM = 3;\n// TODO(josephperrott): Revert to a constant after 2018 spec updates are fully merged.\n/**\n * Distance between the panel edge and the option text in\n * multi-selection mode.\n *\n * Calculated as:\n * (SELECT_PANEL_PADDING_X * 1.5) + 16 = 40\n * The padding is multiplied by 1.5 because the checkbox's margin is half the padding.\n * The checkbox width is 16px.\n *\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_MULTIPLE_PANEL_PADDING_X = SELECT_PANEL_PADDING_X * 1.5 + 16;\n/**\n * The select panel will only \"fit\" inside the viewport if it is positioned at\n * this value or more away from the viewport boundary.\n *\n * @deprecated To be turned into a private variable.\n * @breaking-change 12.0.0\n */\nconst SELECT_PANEL_VIEWPORT_PADDING = 8;\n/** Injection token that determines the scroll handling while a select is open. */\nconst MAT_SELECT_SCROLL_STRATEGY = new InjectionToken('mat-select-scroll-strategy');\n/** @docs-private */\nfunction MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {\n return () => overlay.scrollStrategies.reposition();\n}\n/** Injection token that can be used to provide the default options the select module. */\nconst MAT_SELECT_CONFIG = new InjectionToken('MAT_SELECT_CONFIG');\n/** @docs-private */\nconst MAT_SELECT_SCROLL_STRATEGY_PROVIDER = {\n provide: MAT_SELECT_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n/** Change event object that is emitted when the select value has changed. */\nclass MatSelectChange {\n constructor(\n /** Reference to the select that emitted the change event. */\n source, \n /** Current value of the select that emitted the event. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n// Boilerplate for applying mixins to MatSelect.\n/** @docs-private */\nclass MatSelectBase {\n constructor(_elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl) {\n this._elementRef = _elementRef;\n this._defaultErrorStateMatcher = _defaultErrorStateMatcher;\n this._parentForm = _parentForm;\n this._parentFormGroup = _parentFormGroup;\n this.ngControl = ngControl;\n }\n}\nconst _MatSelectMixinBase = mixinDisableRipple(mixinTabIndex(mixinDisabled(mixinErrorState(MatSelectBase))));\n/**\n * Injection token that can be used to reference instances of `MatSelectTrigger`. It serves as\n * alternative token to the actual `MatSelectTrigger` class which could cause unnecessary\n * retention of the class and its directive metadata.\n */\nconst MAT_SELECT_TRIGGER = new InjectionToken('MatSelectTrigger');\n/**\n * Allows the user to customize the trigger that is displayed when the select has a value.\n */\nclass MatSelectTrigger {\n}\nMatSelectTrigger.ɵfac = function MatSelectTrigger_Factory(t) { return new (t || MatSelectTrigger)(); };\nMatSelectTrigger.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MatSelectTrigger, selectors: [[\"mat-select-trigger\"]], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }])] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSelectTrigger, [{\n type: Directive,\n args: [{\n selector: 'mat-select-trigger',\n providers: [{ provide: MAT_SELECT_TRIGGER, useExisting: MatSelectTrigger }]\n }]\n }], null, null); })();\n/** Base class with all of the `MatSelect` functionality. */\nclass _MatSelectBase extends _MatSelectMixinBase {\n constructor(_viewportRuler, _changeDetectorRef, _ngZone, _defaultErrorStateMatcher, elementRef, _dir, _parentForm, _parentFormGroup, _parentFormField, ngControl, tabIndex, scrollStrategyFactory, _liveAnnouncer, _defaultOptions) {\n var _a, _b, _c, _d, _e;\n super(elementRef, _defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);\n this._viewportRuler = _viewportRuler;\n this._changeDetectorRef = _changeDetectorRef;\n this._ngZone = _ngZone;\n this._dir = _dir;\n this._parentFormField = _parentFormField;\n this.ngControl = ngControl;\n this._liveAnnouncer = _liveAnnouncer;\n this._defaultOptions = _defaultOptions;\n /** Whether or not the overlay panel is open. */\n this._panelOpen = false;\n /** Comparison function to specify which option is displayed. Defaults to object equality. */\n this._compareWith = (o1, o2) => o1 === o2;\n /** Unique id for this input. */\n this._uid = `mat-select-${nextUniqueId++}`;\n /** Current `ariar-labelledby` value for the select trigger. */\n this._triggerAriaLabelledBy = null;\n /** Emits whenever the component is destroyed. */\n this._destroy = new Subject();\n /** `View -> model callback called when value changes` */\n this._onChange = () => { };\n /** `View -> model callback called when select has been touched` */\n this._onTouched = () => { };\n /** ID for the DOM node containing the select's value. */\n this._valueId = `mat-select-value-${nextUniqueId++}`;\n /** Emits when the panel element is finished transforming in. */\n this._panelDoneAnimatingStream = new Subject();\n this._overlayPanelClass = ((_a = this._defaultOptions) === null || _a === void 0 ? void 0 : _a.overlayPanelClass) || '';\n this._focused = false;\n /** A name for this control that can be used by `mat-form-field`. */\n this.controlType = 'mat-select';\n this._required = false;\n this._multiple = false;\n this._disableOptionCentering = (_c = (_b = this._defaultOptions) === null || _b === void 0 ? void 0 : _b.disableOptionCentering) !== null && _c !== void 0 ? _c : false;\n /** Aria label of the select. If not specified, the placeholder will be used as label. */\n this.ariaLabel = '';\n this._typeaheadDebounceInterval = (_e = (_d = this._defaultOptions) === null || _d === void 0 ? void 0 : _d.typeaheadDebounceInterval) !== null && _e !== void 0 ? _e : 0;\n /** Combined stream of all of the child options' change events. */\n this.optionSelectionChanges = defer(() => {\n const options = this.options;\n if (options) {\n return options.changes.pipe(startWith(options), switchMap(() => merge(...options.map(option => option.onSelectionChange))));\n }\n return this._ngZone.onStable\n .pipe(take(1), switchMap(() => this.optionSelectionChanges));\n });\n /** Event emitted when the select panel has been toggled. */\n this.openedChange = new EventEmitter();\n /** Event emitted when the select has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the select has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the selected value has been changed by the user. */\n this.selectionChange = new EventEmitter();\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n this._scrollStrategyFactory = scrollStrategyFactory;\n this._scrollStrategy = this._scrollStrategyFactory();\n this.tabIndex = parseInt(tabIndex) || 0;\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n /** Whether the select is focused. */\n get focused() {\n return this._focused || this._panelOpen;\n }\n /** Placeholder to be shown if no value has been selected. */\n get placeholder() { return this._placeholder; }\n set placeholder(value) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n /** Whether the component is required. */\n get required() { return this._required; }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n /** Whether the user should be allowed to select multiple options. */\n get multiple() { return this._multiple; }\n set multiple(value) {\n if (this._selectionModel && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectDynamicMultipleError();\n }\n this._multiple = coerceBooleanProperty(value);\n }\n /** Whether to center the active option over the trigger. */\n get disableOptionCentering() { return this._disableOptionCentering; }\n set disableOptionCentering(value) {\n this._disableOptionCentering = coerceBooleanProperty(value);\n }\n /**\n * Function to compare the option values with the selected values. The first argument\n * is a value from an option. The second is a value from the selection. A boolean\n * should be returned.\n */\n get compareWith() { return this._compareWith; }\n set compareWith(fn) {\n if (typeof fn !== 'function' && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonFunctionValueError();\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n /** Value of the select control. */\n get value() { return this._value; }\n set value(newValue) {\n if (newValue !== this._value) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n this._value = newValue;\n }\n }\n /** Time to wait in milliseconds after the last keystroke before moving focus to an item. */\n get typeaheadDebounceInterval() { return this._typeaheadDebounceInterval; }\n set typeaheadDebounceInterval(value) {\n this._typeaheadDebounceInterval = coerceNumberProperty(value);\n }\n /** Unique id of the element. */\n get id() { return this._id; }\n set id(value) {\n this._id = value || this._uid;\n this.stateChanges.next();\n }\n ngOnInit() {\n this._selectionModel = new SelectionModel(this.multiple);\n this.stateChanges.next();\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this._panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntil(this._destroy))\n .subscribe(() => this._panelDoneAnimating(this.panelOpen));\n }\n ngAfterContentInit() {\n this._initKeyManager();\n this._selectionModel.changed.pipe(takeUntil(this._destroy)).subscribe(event => {\n event.added.forEach(option => option.select());\n event.removed.forEach(option => option.deselect());\n });\n this.options.changes.pipe(startWith(null), takeUntil(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n ngDoCheck() {\n const newAriaLabelledby = this._getTriggerAriaLabelledby();\n // We have to manage setting the `aria-labelledby` ourselves, because part of its value\n // is computed as a result of a content query which can cause this binding to trigger a\n // \"changed after checked\" error.\n if (newAriaLabelledby !== this._triggerAriaLabelledBy) {\n const element = this._elementRef.nativeElement;\n this._triggerAriaLabelledBy = newAriaLabelledby;\n if (newAriaLabelledby) {\n element.setAttribute('aria-labelledby', newAriaLabelledby);\n }\n else {\n element.removeAttribute('aria-labelledby');\n }\n }\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n ngOnChanges(changes) {\n // Updating the disabled state is handled by `mixinDisabled`, but we need to additionally let\n // the parent form field know to run change detection when the disabled state changes.\n if (changes['disabled']) {\n this.stateChanges.next();\n }\n if (changes['typeaheadDebounceInterval'] && this._keyManager) {\n this._keyManager.withTypeAhead(this._typeaheadDebounceInterval);\n }\n }\n ngOnDestroy() {\n this._destroy.next();\n this._destroy.complete();\n this.stateChanges.complete();\n }\n /** Toggles the overlay panel open or closed. */\n toggle() {\n this.panelOpen ? this.close() : this.open();\n }\n /** Opens the overlay panel. */\n open() {\n if (this._canOpen()) {\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Closes the overlay panel and focuses the host element. */\n close() {\n if (this._panelOpen) {\n this._panelOpen = false;\n this._keyManager.withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this._onTouched();\n }\n }\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n /** Whether or not the overlay panel is open. */\n get panelOpen() {\n return this._panelOpen;\n }\n /** The currently selected option. */\n get selected() {\n return this.multiple ? this._selectionModel.selected : this._selectionModel.selected[0];\n }\n /** The value displayed in the trigger. */\n get triggerValue() {\n if (this.empty) {\n return '';\n }\n if (this._multiple) {\n const selectedOptions = this._selectionModel.selected.map(option => option.viewValue);\n if (this._isRtl()) {\n selectedOptions.reverse();\n }\n // TODO(crisbeto): delimiter should be configurable for proper localization.\n return selectedOptions.join(', ');\n }\n return this._selectionModel.selected[0].viewValue;\n }\n /** Whether the element is in RTL mode. */\n _isRtl() {\n return this._dir ? this._dir.value === 'rtl' : false;\n }\n /** Handles all keydown events on the select. */\n _handleKeydown(event) {\n if (!this.disabled) {\n this.panelOpen ? this._handleOpenKeydown(event) : this._handleClosedKeydown(event);\n }\n }\n /** Handles keyboard events while the select is closed. */\n _handleClosedKeydown(event) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n // Open the select on ALT + arrow key to match the native \n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n }\n else if (!isTyping && (keyCode === ENTER || keyCode === SPACE) && manager.activeItem &&\n !hasModifierKey(event)) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n }\n else if (!isTyping && this._multiple && keyCode === A && event.ctrlKey) {\n event.preventDefault();\n const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);\n this.options.forEach(option => {\n if (!option.disabled) {\n hasDeselectedOptions ? option.select() : option.deselect();\n }\n });\n }\n else {\n const previouslyFocusedIndex = manager.activeItemIndex;\n manager.onKeydown(event);\n if (this._multiple && isArrowKey && event.shiftKey && manager.activeItem &&\n manager.activeItemIndex !== previouslyFocusedIndex) {\n manager.activeItem._selectViaInteraction();\n }\n }\n }\n _onFocus() {\n if (!this.disabled) {\n this._focused = true;\n this.stateChanges.next();\n }\n }\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n _onBlur() {\n this._focused = false;\n if (!this.disabled && !this.panelOpen) {\n this._onTouched();\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n }\n /**\n * Callback that is invoked when the overlay panel has been attached.\n */\n _onAttached() {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n /** Returns the theme to be used on the panel. */\n _getPanelTheme() {\n return this._parentFormField ? `mat-${this._parentFormField.color}` : '';\n }\n /** Whether the select has a value. */\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n _initializeSelection() {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value);\n this.stateChanges.next();\n });\n }\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n _setSelectionByValue(value) {\n this._selectionModel.selected.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n if (this.multiple && value) {\n if (!Array.isArray(value) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getMatSelectNonArrayValueError();\n }\n value.forEach((currentValue) => this._selectValue(currentValue));\n this._sortValues();\n }\n else {\n const correspondingOption = this._selectValue(value);\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManager.updateActiveItem(correspondingOption);\n }\n else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n }\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n _selectValue(value) {\n const correspondingOption = this.options.find((option) => {\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n }\n catch (error) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n return correspondingOption;\n }\n /** Sets up a key manager to listen to keyboard events on the overlay panel. */\n _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager(this.options)\n .withTypeAhead(this._typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._isRtl() ? 'rtl' : 'ltr')\n .withHomeAndEnd()\n .withAllowedModifierKeys(['shiftKey']);\n this._keyManager.tabOut.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this.panelOpen) {\n // Select the active item when tabbing away. This is consistent with how the native\n // select behaves. Note that we only want to do this in single selection mode.\n if (!this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n // Restore focus to the trigger before closing. Ensures that the focus\n // position won't be lost if the user got focus into the overlay.\n this.focus();\n this.close();\n }\n });\n this._keyManager.change.pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this._panelOpen && this.panel) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n else if (!this._panelOpen && !this.multiple && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n /** Drops current option subscriptions and IDs and resets from scratch. */\n _resetOptions() {\n const changedOrDestroyed = merge(this.options.changes, this._destroy);\n this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe(event => {\n this._onSelect(event.source, event.isUserInput);\n if (event.isUserInput && !this.multiple && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n // Listen to changes in the internal state of the options and react accordingly.\n // Handles cases like the labels of the selected options changing.\n merge(...this.options.map(option => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n });\n }\n /** Invoked when an option is clicked. */\n _onSelect(option, isUserInput) {\n const wasSelected = this._selectionModel.isSelected(option);\n if (option.value == null && !this._multiple) {\n option.deselect();\n this._selectionModel.clear();\n if (this.value != null) {\n this._propagateChanges(option.value);\n }\n }\n else {\n if (wasSelected !== option.selected) {\n option.selected ? this._selectionModel.select(option) :\n this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManager.setActiveItem(option);\n }\n if (this.multiple) {\n this._sortValues();\n if (isUserInput) {\n // In case the user selected the option with their mouse, we\n // want to restore focus back to the trigger, in order to\n // prevent the select keyboard controls from clashing with\n // the ones from `mat-option`.\n this.focus();\n }\n }\n }\n if (wasSelected !== this._selectionModel.isSelected(option)) {\n this._propagateChanges();\n }\n this.stateChanges.next();\n }\n /** Sorts the selected values in the selected based on their order in the panel. */\n _sortValues() {\n if (this.multiple) {\n const options = this.options.toArray();\n this._selectionModel.sort((a, b) => {\n return this.sortComparator ? this.sortComparator(a, b, options) :\n options.indexOf(a) - options.indexOf(b);\n });\n this.stateChanges.next();\n }\n }\n /** Emits change event to set the model value. */\n _propagateChanges(fallbackValue) {\n let valueToEmit = null;\n if (this.multiple) {\n valueToEmit = this.selected.map(option => option.value);\n }\n else {\n valueToEmit = this.selected ? this.selected.value : fallbackValue;\n }\n this._value = valueToEmit;\n this.valueChange.emit(valueToEmit);\n this._onChange(valueToEmit);\n this.selectionChange.emit(this._getChangeEvent(valueToEmit));\n this._changeDetectorRef.markForCheck();\n }\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n _highlightCorrectOption() {\n if (this._keyManager) {\n if (this.empty) {\n this._keyManager.setFirstItemActive();\n }\n else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n }\n /** Whether the panel is allowed to open. */\n _canOpen() {\n var _a;\n return !this._panelOpen && !this.disabled && ((_a = this.options) === null || _a === void 0 ? void 0 : _a.length) > 0;\n }\n /** Focuses the select element. */\n focus(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Gets the aria-labelledby for the select panel. */\n _getPanelAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n const labelId = this._getLabelId();\n return this.ariaLabelledby ? labelId + ' ' + this.ariaLabelledby : labelId;\n }\n /** Determines the `aria-activedescendant` to be set on the host. */\n _getAriaActiveDescendant() {\n if (this.panelOpen && this._keyManager && this._keyManager.activeItem) {\n return this._keyManager.activeItem.id;\n }\n return null;\n }\n /** Gets the ID of the element that is labelling the select. */\n _getLabelId() {\n var _a;\n return ((_a = this._parentFormField) === null || _a === void 0 ? void 0 : _a.getLabelId()) || '';\n }\n /** Gets the aria-labelledby of the select component trigger. */\n _getTriggerAriaLabelledby() {\n if (this.ariaLabel) {\n return null;\n }\n let value = this._getLabelId() + ' ' + this._valueId;\n if (this.ariaLabelledby) {\n value += ' ' + this.ariaLabelledby;\n }\n return value;\n }\n /** Called when the overlay panel is done animating. */\n _panelDoneAnimating(isOpen) {\n this.openedChange.emit(isOpen);\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n setDescribedByIds(ids) {\n this._ariaDescribedby = ids.join(' ');\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n this.open();\n }\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n get shouldLabelFloat() {\n return this._panelOpen || !this.empty;\n }\n}\n_MatSelectBase.ɵfac = function _MatSelectBase_Factory(t) { return new (t || _MatSelectBase)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.ViewportRuler), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.ErrorStateMatcher), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Directionality, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.NgForm, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.FormGroupDirective, 8), ɵngcc0.ɵɵdirectiveInject(MAT_FORM_FIELD, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.NgControl, 10), ɵngcc0.ɵɵinjectAttribute('tabindex'), ɵngcc0.ɵɵdirectiveInject(MAT_SELECT_SCROLL_STRATEGY), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.LiveAnnouncer), ɵngcc0.ɵɵdirectiveInject(MAT_SELECT_CONFIG, 8)); };\n_MatSelectBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: _MatSelectBase, viewQuery: function _MatSelectBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(_c1, true);\n ɵngcc0.ɵɵviewQuery(CdkConnectedOverlay, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.trigger = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.panel = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overlayDir = _t.first);\n } }, inputs: { ariaLabel: [\"aria-label\", \"ariaLabel\"], id: \"id\", placeholder: \"placeholder\", required: \"required\", multiple: \"multiple\", disableOptionCentering: \"disableOptionCentering\", compareWith: \"compareWith\", value: \"value\", typeaheadDebounceInterval: \"typeaheadDebounceInterval\", panelClass: \"panelClass\", ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], errorStateMatcher: \"errorStateMatcher\", sortComparator: \"sortComparator\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", _closedStream: \"closed\", selectionChange: \"selectionChange\", valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\n_MatSelectBase.ctorParameters = () => [\n { type: ViewportRuler },\n { type: ChangeDetectorRef },\n { type: NgZone },\n { type: ErrorStateMatcher },\n { type: ElementRef },\n { type: Directionality, decorators: [{ type: Optional }] },\n { type: NgForm, decorators: [{ type: Optional }] },\n { type: FormGroupDirective, decorators: [{ type: Optional }] },\n { type: MatFormField, decorators: [{ type: Optional }, { type: Inject, args: [MAT_FORM_FIELD,] }] },\n { type: NgControl, decorators: [{ type: Self }, { type: Optional }] },\n { type: String, decorators: [{ type: Attribute, args: ['tabindex',] }] },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_SELECT_SCROLL_STRATEGY,] }] },\n { type: LiveAnnouncer },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_SELECT_CONFIG,] }] }\n];\n_MatSelectBase.propDecorators = {\n trigger: [{ type: ViewChild, args: ['trigger',] }],\n panel: [{ type: ViewChild, args: ['panel',] }],\n overlayDir: [{ type: ViewChild, args: [CdkConnectedOverlay,] }],\n panelClass: [{ type: Input }],\n placeholder: [{ type: Input }],\n required: [{ type: Input }],\n multiple: [{ type: Input }],\n disableOptionCentering: [{ type: Input }],\n compareWith: [{ type: Input }],\n value: [{ type: Input }],\n ariaLabel: [{ type: Input, args: ['aria-label',] }],\n ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],\n errorStateMatcher: [{ type: Input }],\n typeaheadDebounceInterval: [{ type: Input }],\n sortComparator: [{ type: Input }],\n id: [{ type: Input }],\n openedChange: [{ type: Output }],\n _openedStream: [{ type: Output, args: ['opened',] }],\n _closedStream: [{ type: Output, args: ['closed',] }],\n selectionChange: [{ type: Output }],\n valueChange: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(_MatSelectBase, [{\n type: Directive\n }], function () { return [{ type: ɵngcc1.ViewportRuler }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc2.ErrorStateMatcher }, { type: ɵngcc0.ElementRef }, { type: ɵngcc3.Directionality, decorators: [{\n type: Optional\n }] }, { type: ɵngcc4.NgForm, decorators: [{\n type: Optional\n }] }, { type: ɵngcc4.FormGroupDirective, decorators: [{\n type: Optional\n }] }, { type: ɵngcc6.MatFormField, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_FORM_FIELD]\n }] }, { type: ɵngcc4.NgControl, decorators: [{\n type: Self\n }, {\n type: Optional\n }] }, { type: String, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SELECT_SCROLL_STRATEGY]\n }] }, { type: ɵngcc5.LiveAnnouncer }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_SELECT_CONFIG]\n }] }]; }, { ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], id: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], required: [{\n type: Input\n }], multiple: [{\n type: Input\n }], disableOptionCentering: [{\n type: Input\n }], compareWith: [{\n type: Input\n }], value: [{\n type: Input\n }], typeaheadDebounceInterval: [{\n type: Input\n }], trigger: [{\n type: ViewChild,\n args: ['trigger']\n }], panel: [{\n type: ViewChild,\n args: ['panel']\n }], overlayDir: [{\n type: ViewChild,\n args: [CdkConnectedOverlay]\n }], panelClass: [{\n type: Input\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], errorStateMatcher: [{\n type: Input\n }], sortComparator: [{\n type: Input\n }] }); })();\nclass MatSelect extends _MatSelectBase {\n constructor() {\n super(...arguments);\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n this._scrollTop = 0;\n /** The cached font-size of the trigger element. */\n this._triggerFontSize = 0;\n /** The value of the select panel's transform-origin property. */\n this._transformOrigin = 'top';\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n this._offsetY = 0;\n this._positions = [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ];\n }\n /**\n * Calculates the scroll position of the select's overlay panel.\n *\n * Attempts to center the selected option in the panel. If the option is\n * too high or too low in the panel to be scrolled to the center, it clamps the\n * scroll position to the min or max scroll positions respectively.\n */\n _calculateOverlayScroll(selectedIndex, scrollBuffer, maxScroll) {\n const itemHeight = this._getItemHeight();\n const optionOffsetFromScrollTop = itemHeight * selectedIndex;\n const halfOptionHeight = itemHeight / 2;\n // Starts at the optionOffsetFromScrollTop, which scrolls the option to the top of the\n // scroll container, then subtracts the scroll buffer to scroll the option down to\n // the center of the overlay panel. Half the option height must be re-added to the\n // scrollTop so the option is centered based on its middle, not its top edge.\n const optimalScrollPosition = optionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n return Math.min(Math.max(0, optimalScrollPosition), maxScroll);\n }\n ngOnInit() {\n super.ngOnInit();\n this._viewportRuler.change().pipe(takeUntil(this._destroy)).subscribe(() => {\n if (this.panelOpen) {\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n this._changeDetectorRef.markForCheck();\n }\n });\n }\n open() {\n if (super._canOpen()) {\n super.open();\n this._triggerRect = this.trigger.nativeElement.getBoundingClientRect();\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this._triggerFontSize =\n parseInt(getComputedStyle(this.trigger.nativeElement).fontSize || '0');\n this._calculateOverlayPosition();\n // Set the font size on the panel element once it exists.\n this._ngZone.onStable.pipe(take(1)).subscribe(() => {\n if (this._triggerFontSize && this.overlayDir.overlayRef &&\n this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this._triggerFontSize}px`;\n }\n });\n }\n }\n /** Scrolls the active option into view. */\n _scrollOptionIntoView(index) {\n const labelCount = _countGroupLabelsBeforeOption(index, this.options, this.optionGroups);\n const itemHeight = this._getItemHeight();\n this.panel.nativeElement.scrollTop = _getOptionScrollPosition((index + labelCount) * itemHeight, itemHeight, this.panel.nativeElement.scrollTop, SELECT_PANEL_MAX_HEIGHT);\n }\n _positioningSettled() {\n this._calculateOverlayOffsetX();\n this.panel.nativeElement.scrollTop = this._scrollTop;\n }\n _panelDoneAnimating(isOpen) {\n if (this.panelOpen) {\n this._scrollTop = 0;\n }\n else {\n this.overlayDir.offsetX = 0;\n this._changeDetectorRef.markForCheck();\n }\n super._panelDoneAnimating(isOpen);\n }\n _getChangeEvent(value) {\n return new MatSelectChange(this, value);\n }\n /**\n * Sets the x-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text when\n * the panel opens. Will change based on LTR or RTL text direction. Note that the offset\n * can't be calculated until the panel has been attached, because we need to know the\n * content width in order to constrain the panel within the viewport.\n */\n _calculateOverlayOffsetX() {\n const overlayRect = this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();\n const viewportSize = this._viewportRuler.getViewportSize();\n const isRtl = this._isRtl();\n const paddingWidth = this.multiple ? SELECT_MULTIPLE_PANEL_PADDING_X + SELECT_PANEL_PADDING_X :\n SELECT_PANEL_PADDING_X * 2;\n let offsetX;\n // Adjust the offset, depending on the option padding.\n if (this.multiple) {\n offsetX = SELECT_MULTIPLE_PANEL_PADDING_X;\n }\n else {\n let selected = this._selectionModel.selected[0] || this.options.first;\n offsetX = selected && selected.group ? SELECT_PANEL_INDENT_PADDING_X : SELECT_PANEL_PADDING_X;\n }\n // Invert the offset in LTR.\n if (!isRtl) {\n offsetX *= -1;\n }\n // Determine how much the select overflows on each side.\n const leftOverflow = 0 - (overlayRect.left + offsetX - (isRtl ? paddingWidth : 0));\n const rightOverflow = overlayRect.right + offsetX - viewportSize.width\n + (isRtl ? 0 : paddingWidth);\n // If the element overflows on either side, reduce the offset to allow it to fit.\n if (leftOverflow > 0) {\n offsetX += leftOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n else if (rightOverflow > 0) {\n offsetX -= rightOverflow + SELECT_PANEL_VIEWPORT_PADDING;\n }\n // Set the offset directly in order to avoid having to go through change detection and\n // potentially triggering \"changed after it was checked\" errors. Round the value to avoid\n // blurry content in some browsers.\n this.overlayDir.offsetX = Math.round(offsetX);\n this.overlayDir.overlayRef.updatePosition();\n }\n /**\n * Calculates the y-offset of the select's overlay panel in relation to the\n * top start corner of the trigger. It has to be adjusted in order for the\n * selected option to be aligned over the trigger when the panel opens.\n */\n _calculateOverlayOffsetY(selectedIndex, scrollBuffer, maxScroll) {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const maxOptionsDisplayed = Math.floor(SELECT_PANEL_MAX_HEIGHT / itemHeight);\n let optionOffsetFromPanelTop;\n // Disable offset if requested by user by returning 0 as value to offset\n if (this.disableOptionCentering) {\n return 0;\n }\n if (this._scrollTop === 0) {\n optionOffsetFromPanelTop = selectedIndex * itemHeight;\n }\n else if (this._scrollTop === maxScroll) {\n const firstDisplayedIndex = this._getItemCount() - maxOptionsDisplayed;\n const selectedDisplayIndex = selectedIndex - firstDisplayedIndex;\n // The first item is partially out of the viewport. Therefore we need to calculate what\n // portion of it is shown in the viewport and account for it in our offset.\n let partialItemHeight = itemHeight - (this._getItemCount() * itemHeight - SELECT_PANEL_MAX_HEIGHT) % itemHeight;\n // Because the panel height is longer than the height of the options alone,\n // there is always extra padding at the top or bottom of the panel. When\n // scrolled to the very bottom, this padding is at the top of the panel and\n // must be added to the offset.\n optionOffsetFromPanelTop = selectedDisplayIndex * itemHeight + partialItemHeight;\n }\n else {\n // If the option was scrolled to the middle of the panel using a scroll buffer,\n // its offset will be the scroll buffer minus the half height that was added to\n // center it.\n optionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\n }\n // The final offset is the option's offset from the top, adjusted for the height difference,\n // multiplied by -1 to ensure that the overlay moves in the correct direction up the page.\n // The value is rounded to prevent some browsers from blurring the content.\n return Math.round(optionOffsetFromPanelTop * -1 - optionHeightAdjustment);\n }\n /**\n * Checks that the attempted overlay position will fit within the viewport.\n * If it will not fit, tries to adjust the scroll position and the associated\n * y-offset so the panel can open fully on-screen. If it still won't fit,\n * sets the offset back to 0 to allow the fallback position to take over.\n */\n _checkOverlayWithinViewport(maxScroll) {\n const itemHeight = this._getItemHeight();\n const viewportSize = this._viewportRuler.getViewportSize();\n const topSpaceAvailable = this._triggerRect.top - SELECT_PANEL_VIEWPORT_PADDING;\n const bottomSpaceAvailable = viewportSize.height - this._triggerRect.bottom - SELECT_PANEL_VIEWPORT_PADDING;\n const panelHeightTop = Math.abs(this._offsetY);\n const totalPanelHeight = Math.min(this._getItemCount() * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const panelHeightBottom = totalPanelHeight - panelHeightTop - this._triggerRect.height;\n if (panelHeightBottom > bottomSpaceAvailable) {\n this._adjustPanelUp(panelHeightBottom, bottomSpaceAvailable);\n }\n else if (panelHeightTop > topSpaceAvailable) {\n this._adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll);\n }\n else {\n this._transformOrigin = this._getOriginBasedOnOption();\n }\n }\n /** Adjusts the overlay panel up to fit in the viewport. */\n _adjustPanelUp(panelHeightBottom, bottomSpaceAvailable) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceBelowViewport = Math.round(panelHeightBottom - bottomSpaceAvailable);\n // Scrolls the panel up by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel up into the viewport.\n this._scrollTop -= distanceBelowViewport;\n this._offsetY -= distanceBelowViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n // If the panel is scrolled to the very top, it won't be able to fit the panel\n // by scrolling, so set the offset to 0 to allow the fallback position to take\n // effect.\n if (this._scrollTop <= 0) {\n this._scrollTop = 0;\n this._offsetY = 0;\n this._transformOrigin = `50% bottom 0px`;\n }\n }\n /** Adjusts the overlay panel down to fit in the viewport. */\n _adjustPanelDown(panelHeightTop, topSpaceAvailable, maxScroll) {\n // Browsers ignore fractional scroll offsets, so we need to round.\n const distanceAboveViewport = Math.round(panelHeightTop - topSpaceAvailable);\n // Scrolls the panel down by the distance it was extending past the boundary, then\n // adjusts the offset by that amount to move the panel down into the viewport.\n this._scrollTop += distanceAboveViewport;\n this._offsetY += distanceAboveViewport;\n this._transformOrigin = this._getOriginBasedOnOption();\n // If the panel is scrolled to the very bottom, it won't be able to fit the\n // panel by scrolling, so set the offset to 0 to allow the fallback position\n // to take effect.\n if (this._scrollTop >= maxScroll) {\n this._scrollTop = maxScroll;\n this._offsetY = 0;\n this._transformOrigin = `50% top 0px`;\n return;\n }\n }\n /** Calculates the scroll position and x- and y-offsets of the overlay panel. */\n _calculateOverlayPosition() {\n const itemHeight = this._getItemHeight();\n const items = this._getItemCount();\n const panelHeight = Math.min(items * itemHeight, SELECT_PANEL_MAX_HEIGHT);\n const scrollContainerHeight = items * itemHeight;\n // The farthest the panel can be scrolled before it hits the bottom\n const maxScroll = scrollContainerHeight - panelHeight;\n // If no value is selected we open the popup to the first item.\n let selectedOptionOffset;\n if (this.empty) {\n selectedOptionOffset = 0;\n }\n else {\n selectedOptionOffset =\n Math.max(this.options.toArray().indexOf(this._selectionModel.selected[0]), 0);\n }\n selectedOptionOffset += _countGroupLabelsBeforeOption(selectedOptionOffset, this.options, this.optionGroups);\n // We must maintain a scroll buffer so the selected option will be scrolled to the\n // center of the overlay panel rather than the top.\n const scrollBuffer = panelHeight / 2;\n this._scrollTop = this._calculateOverlayScroll(selectedOptionOffset, scrollBuffer, maxScroll);\n this._offsetY = this._calculateOverlayOffsetY(selectedOptionOffset, scrollBuffer, maxScroll);\n this._checkOverlayWithinViewport(maxScroll);\n }\n /** Sets the transform origin point based on the selected option. */\n _getOriginBasedOnOption() {\n const itemHeight = this._getItemHeight();\n const optionHeightAdjustment = (itemHeight - this._triggerRect.height) / 2;\n const originY = Math.abs(this._offsetY) - optionHeightAdjustment + itemHeight / 2;\n return `50% ${originY}px 0px`;\n }\n /** Calculates the height of the select's options. */\n _getItemHeight() {\n return this._triggerFontSize * SELECT_ITEM_HEIGHT_EM;\n }\n /** Calculates the amount of items in the select. This includes options and group labels. */\n _getItemCount() {\n return this.options.length + this.optionGroups.length;\n }\n}\nMatSelect.ɵfac = function MatSelect_Factory(t) { return ɵMatSelect_BaseFactory(t || MatSelect); };\nMatSelect.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSelect, selectors: [[\"mat-select\"]], contentQueries: function MatSelect_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_SELECT_TRIGGER, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MatOption, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MAT_OPTGROUP, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.customTrigger = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.options = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionGroups = _t);\n } }, hostAttrs: [\"role\", \"combobox\", \"aria-autocomplete\", \"none\", \"aria-haspopup\", \"true\", 1, \"mat-select\"], hostVars: 20, hostBindings: function MatSelect_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function MatSelect_keydown_HostBindingHandler($event) { return ctx._handleKeydown($event); })(\"focus\", function MatSelect_focus_HostBindingHandler() { return ctx._onFocus(); })(\"blur\", function MatSelect_blur_HostBindingHandler() { return ctx._onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"tabindex\", ctx.tabIndex)(\"aria-controls\", ctx.panelOpen ? ctx.id + \"-panel\" : null)(\"aria-expanded\", ctx.panelOpen)(\"aria-label\", ctx.ariaLabel || null)(\"aria-required\", ctx.required.toString())(\"aria-disabled\", ctx.disabled.toString())(\"aria-invalid\", ctx.errorState)(\"aria-describedby\", ctx._ariaDescribedby || null)(\"aria-activedescendant\", ctx._getAriaActiveDescendant());\n ɵngcc0.ɵɵclassProp(\"mat-select-disabled\", ctx.disabled)(\"mat-select-invalid\", ctx.errorState)(\"mat-select-required\", ctx.required)(\"mat-select-empty\", ctx.empty)(\"mat-select-multiple\", ctx.multiple);\n } }, inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, exportAs: [\"matSelect\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c3, decls: 9, vars: 12, consts: [[\"cdk-overlay-origin\", \"\", 1, \"mat-select-trigger\", 3, \"click\"], [\"origin\", \"cdkOverlayOrigin\", \"trigger\", \"\"], [1, \"mat-select-value\", 3, \"ngSwitch\"], [\"class\", \"mat-select-placeholder\", 4, \"ngSwitchCase\"], [\"class\", \"mat-select-value-text\", 3, \"ngSwitch\", 4, \"ngSwitchCase\"], [1, \"mat-select-arrow-wrapper\"], [1, \"mat-select-arrow\"], [\"cdk-connected-overlay\", \"\", \"cdkConnectedOverlayLockPosition\", \"\", \"cdkConnectedOverlayHasBackdrop\", \"\", \"cdkConnectedOverlayBackdropClass\", \"cdk-overlay-transparent-backdrop\", 3, \"cdkConnectedOverlayPanelClass\", \"cdkConnectedOverlayScrollStrategy\", \"cdkConnectedOverlayOrigin\", \"cdkConnectedOverlayOpen\", \"cdkConnectedOverlayPositions\", \"cdkConnectedOverlayMinWidth\", \"cdkConnectedOverlayOffsetY\", \"backdropClick\", \"attach\", \"detach\"], [1, \"mat-select-placeholder\"], [1, \"mat-select-value-text\", 3, \"ngSwitch\"], [4, \"ngSwitchDefault\"], [4, \"ngSwitchCase\"], [1, \"mat-select-panel-wrap\"], [\"role\", \"listbox\", \"tabindex\", \"-1\", 3, \"ngClass\", \"keydown\"], [\"panel\", \"\"]], template: function MatSelect_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c2);\n ɵngcc0.ɵɵelementStart(0, \"div\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function MatSelect_Template_div_click_0_listener() { return ctx.toggle(); });\n ɵngcc0.ɵɵelementStart(3, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, MatSelect_span_4_Template, 2, 1, \"span\", 3);\n ɵngcc0.ɵɵtemplate(5, MatSelect_span_5_Template, 3, 2, \"span\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\", 5);\n ɵngcc0.ɵɵelement(7, \"div\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, MatSelect_ng_template_8_Template, 4, 14, \"ng-template\", 7);\n ɵngcc0.ɵɵlistener(\"backdropClick\", function MatSelect_Template_ng_template_backdropClick_8_listener() { return ctx.close(); })(\"attach\", function MatSelect_Template_ng_template_attach_8_listener() { return ctx._onAttached(); })(\"detach\", function MatSelect_Template_ng_template_detach_8_listener() { return ctx.close(); });\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵattribute(\"aria-owns\", ctx.panelOpen ? ctx.id + \"-panel\" : null);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.empty);\n ɵngcc0.ɵɵattribute(\"id\", ctx._valueId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"cdkConnectedOverlayPanelClass\", ctx._overlayPanelClass)(\"cdkConnectedOverlayScrollStrategy\", ctx._scrollStrategy)(\"cdkConnectedOverlayOrigin\", _r0)(\"cdkConnectedOverlayOpen\", ctx.panelOpen)(\"cdkConnectedOverlayPositions\", ctx._positions)(\"cdkConnectedOverlayMinWidth\", ctx._triggerRect == null ? null : ctx._triggerRect.width)(\"cdkConnectedOverlayOffsetY\", ctx._offsetY);\n } }, directives: [ɵngcc7.CdkOverlayOrigin, ɵngcc8.NgSwitch, ɵngcc8.NgSwitchCase, ɵngcc7.CdkConnectedOverlay, ɵngcc8.NgSwitchDefault, ɵngcc8.NgClass], styles: [\".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-table;cursor:pointer;position:relative;box-sizing:border-box}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-select-value{display:table-cell;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{display:table-cell;vertical-align:middle}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;margin:0 4px}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}\\n\"], encapsulation: 2, data: { animation: [\n matSelectAnimations.transformPanelWrap,\n matSelectAnimations.transformPanel\n ] }, changeDetection: 0 });\nMatSelect.propDecorators = {\n options: [{ type: ContentChildren, args: [MatOption, { descendants: true },] }],\n optionGroups: [{ type: ContentChildren, args: [MAT_OPTGROUP, { descendants: true },] }],\n customTrigger: [{ type: ContentChild, args: [MAT_SELECT_TRIGGER,] }]\n};\nconst ɵMatSelect_BaseFactory = /*@__PURE__*/ ɵngcc0.ɵɵgetInheritedFactory(MatSelect);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSelect, [{\n type: Component,\n args: [{\n selector: 'mat-select',\n exportAs: 'matSelect',\n template: \"\\n
    \\n
    \\n {{placeholder || '\\\\u00A0'}}\\n \\n {{triggerValue || '\\\\u00A0'}}\\n \\n \\n
    \\n\\n
    \\n
    \\n\\n\\n
    \\n \\n \\n
    \\n \\n\\n\",\n inputs: ['disabled', 'disableRipple', 'tabIndex'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'combobox',\n 'aria-autocomplete': 'none',\n // TODO(crisbeto): the value for aria-haspopup should be `listbox`, but currently it's difficult\n // to sync into Google, because of an outdated automated a11y check which flags it as an invalid\n // value. At some point we should try to switch it back to being `listbox`.\n 'aria-haspopup': 'true',\n 'class': 'mat-select',\n '[attr.id]': 'id',\n '[attr.tabindex]': 'tabIndex',\n '[attr.aria-controls]': 'panelOpen ? id + \"-panel\" : null',\n '[attr.aria-expanded]': 'panelOpen',\n '[attr.aria-label]': 'ariaLabel || null',\n '[attr.aria-required]': 'required.toString()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.aria-invalid]': 'errorState',\n '[attr.aria-describedby]': '_ariaDescribedby || null',\n '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n '[class.mat-select-disabled]': 'disabled',\n '[class.mat-select-invalid]': 'errorState',\n '[class.mat-select-required]': 'required',\n '[class.mat-select-empty]': 'empty',\n '[class.mat-select-multiple]': 'multiple',\n '(keydown)': '_handleKeydown($event)',\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()'\n },\n animations: [\n matSelectAnimations.transformPanelWrap,\n matSelectAnimations.transformPanel\n ],\n providers: [\n { provide: MatFormFieldControl, useExisting: MatSelect },\n { provide: MAT_OPTION_PARENT_COMPONENT, useExisting: MatSelect }\n ],\n styles: [\".mat-select{display:inline-block;width:100%;outline:none}.mat-select-trigger{display:inline-table;cursor:pointer;position:relative;box-sizing:border-box}.mat-select-disabled .mat-select-trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.mat-select-value{display:table-cell;max-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mat-select-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-select-arrow-wrapper{display:table-cell;vertical-align:middle}.mat-form-field-appearance-fill .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(-25%)}.mat-form-field-appearance-standard.mat-form-field-has-label .mat-select:not(.mat-select-empty) .mat-select-arrow-wrapper{transform:translateY(-50%)}.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable.mat-form-field-appearance-standard .mat-select.mat-select-empty .mat-select-arrow-wrapper{transition:none}.mat-select-arrow{width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid;margin:0 4px}.mat-select-panel-wrap{flex-basis:100%}.mat-select-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;padding-top:0;padding-bottom:0;max-height:256px;min-width:100%;border-radius:4px;outline:0}.cdk-high-contrast-active .mat-select-panel{outline:solid 1px}.mat-select-panel .mat-optgroup-label,.mat-select-panel .mat-option{font-size:inherit;line-height:3em;height:3em}.mat-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-form-field-flex{cursor:pointer}.mat-form-field-type-mat-select .mat-form-field-label{width:calc(100% - 18px)}.mat-select-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}._mat-animation-noopable .mat-select-placeholder{transition:none}.mat-form-field-hide-placeholder .mat-select-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}\\n\"]\n }]\n }], null, { options: [{\n type: ContentChildren,\n args: [MatOption, { descendants: true }]\n }], optionGroups: [{\n type: ContentChildren,\n args: [MAT_OPTGROUP, { descendants: true }]\n }], customTrigger: [{\n type: ContentChild,\n args: [MAT_SELECT_TRIGGER]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSelectModule {\n}\nMatSelectModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSelectModule });\nMatSelectModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSelectModule_Factory(t) { return new (t || MatSelectModule)(); }, providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [[\n CommonModule,\n OverlayModule,\n MatOptionModule,\n MatCommonModule,\n ], CdkScrollableModule,\n MatFormFieldModule,\n MatOptionModule,\n MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSelectModule, { declarations: function () { return [MatSelect, MatSelectTrigger]; }, imports: function () { return [CommonModule,\n OverlayModule,\n MatOptionModule,\n MatCommonModule]; }, exports: function () { return [CdkScrollableModule,\n MatFormFieldModule, MatSelect, MatSelectTrigger, MatOptionModule,\n MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSelectModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n OverlayModule,\n MatOptionModule,\n MatCommonModule,\n ],\n exports: [\n CdkScrollableModule,\n MatFormFieldModule,\n MatSelect,\n MatSelectTrigger,\n MatOptionModule,\n MatCommonModule\n ],\n declarations: [MatSelect, MatSelectTrigger],\n providers: [MAT_SELECT_SCROLL_STRATEGY_PROVIDER]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SELECT_CONFIG, MAT_SELECT_SCROLL_STRATEGY, MAT_SELECT_SCROLL_STRATEGY_PROVIDER, MAT_SELECT_SCROLL_STRATEGY_PROVIDER_FACTORY, MAT_SELECT_TRIGGER, MatSelect, MatSelectChange, MatSelectModule, MatSelectTrigger, SELECT_ITEM_HEIGHT_EM, SELECT_MULTIPLE_PANEL_PADDING_X, SELECT_PANEL_INDENT_PADDING_X, SELECT_PANEL_MAX_HEIGHT, SELECT_PANEL_PADDING_X, SELECT_PANEL_VIEWPORT_PADDING, _MatSelectBase, matSelectAnimations };\n\n//# sourceMappingURL=select.js.map","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { publishReplay, refCount, map } from 'rxjs/operators';\nimport { Bondcoin } from '../models/Bondcoin';\nimport { Country } from '../models/Country';\n\n@Injectable()\nexport class RefDataService {\n constructor(private httpClient: HttpClient) { }\n public getRefData(field: string) {\n return this.httpClient.get<(string | Bondcoin | Country)[]>(`api/reference/${field}`).pipe(\n map(res => res && res.sort(this.sortFunction)),\n publishReplay(1),\n refCount()\n );\n }\n private sortFunction = (a: string | Bondcoin | Country, b: string | Bondcoin | Country) => {\n const aVal = (typeof a === 'string') ? a : (!!a['Code'] ? a['Code'] : a['name']);\n const bVal = (typeof b === 'string') ? b : (!!b['Code'] ? b['Code'] : b['name']);\n if (aVal < bVal) {\n return -1;\n }\n if (aVal > bVal) {\n return 1;\n }\n return 0;\n };\n}\n","import { ReplaySubject } from '../ReplaySubject';\nimport { multicast } from './multicast';\nexport function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {\n if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {\n scheduler = selectorOrScheduler;\n }\n const selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;\n const subject = new ReplaySubject(bufferSize, windowTime, scheduler);\n return (source) => multicast(() => subject, selector)(source);\n}\n//# sourceMappingURL=publishReplay.js.map","import defined from './defined';\n\nexport default function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n}","import { OverlayModule, OverlayConfig, Overlay } from '@angular/cdk/overlay';\nimport { BasePortalOutlet, CdkPortalOutlet, PortalModule, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, NgZone, ElementRef, ChangeDetectorRef, ViewChild, NgModule, Injector, TemplateRef, ɵɵdefineInjectable, ɵɵinject, INJECTOR, Injectable, Optional, SkipSelf } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { Subject } from 'rxjs';\nimport { Platform } from '@angular/cdk/platform';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { Breakpoints, BreakpointObserver } from '@angular/cdk/layout';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to access the data that was passed in to a snack bar. */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from '@angular/material/button';\nimport * as ɵngcc3 from '@angular/cdk/platform';\nimport * as ɵngcc4 from '@angular/cdk/portal';\nimport * as ɵngcc5 from '@angular/cdk/overlay';\nimport * as ɵngcc6 from '@angular/cdk/a11y';\nimport * as ɵngcc7 from '@angular/cdk/layout';\n\nfunction SimpleSnackBar_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r2 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 1);\n ɵngcc0.ɵɵelementStart(1, \"button\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function SimpleSnackBar_div_2_Template_button_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r2); const ctx_r1 = ɵngcc0.ɵɵnextContext(); return ctx_r1.action(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.data.action);\n} }\nfunction MatSnackBarContainer_ng_template_1_Template(rf, ctx) { }\nconst MAT_SNACK_BAR_DATA = new InjectionToken('MatSnackBarData');\n/**\n * Configuration used when opening a snack-bar.\n */\nclass MatSnackBarConfig {\n constructor() {\n /** The politeness level for the MatAriaLiveAnnouncer announcement. */\n this.politeness = 'assertive';\n /**\n * Message to be announced by the LiveAnnouncer. When opening a snackbar without a custom\n * component or template, the announcement message will default to the specified message.\n */\n this.announcementMessage = '';\n /** The length of time in milliseconds to wait before automatically dismissing the snack bar. */\n this.duration = 0;\n /** Data being injected into the child component. */\n this.data = null;\n /** The horizontal position to place the snack bar. */\n this.horizontalPosition = 'center';\n /** The vertical position to place the snack bar. */\n this.verticalPosition = 'bottom';\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Maximum amount of milliseconds that can be passed into setTimeout. */\nconst MAX_TIMEOUT = Math.pow(2, 31) - 1;\n/**\n * Reference to a snack bar dispatched from the snack bar service.\n */\nclass MatSnackBarRef {\n constructor(containerInstance, _overlayRef) {\n this._overlayRef = _overlayRef;\n /** Subject for notifying the user that the snack bar has been dismissed. */\n this._afterDismissed = new Subject();\n /** Subject for notifying the user that the snack bar has opened and appeared. */\n this._afterOpened = new Subject();\n /** Subject for notifying the user that the snack bar action was called. */\n this._onAction = new Subject();\n /** Whether the snack bar was dismissed using the action button. */\n this._dismissedByAction = false;\n this.containerInstance = containerInstance;\n // Dismiss snackbar on action.\n this.onAction().subscribe(() => this.dismiss());\n containerInstance._onExit.subscribe(() => this._finishDismiss());\n }\n /** Dismisses the snack bar. */\n dismiss() {\n if (!this._afterDismissed.closed) {\n this.containerInstance.exit();\n }\n clearTimeout(this._durationTimeoutId);\n }\n /** Marks the snackbar action clicked. */\n dismissWithAction() {\n if (!this._onAction.closed) {\n this._dismissedByAction = true;\n this._onAction.next();\n this._onAction.complete();\n }\n }\n /**\n * Marks the snackbar action clicked.\n * @deprecated Use `dismissWithAction` instead.\n * @breaking-change 8.0.0\n */\n closeWithAction() {\n this.dismissWithAction();\n }\n /** Dismisses the snack bar after some duration */\n _dismissAfter(duration) {\n // Note that we need to cap the duration to the maximum value for setTimeout, because\n // it'll revert to 1 if somebody passes in something greater (e.g. `Infinity`). See #17234.\n this._durationTimeoutId = setTimeout(() => this.dismiss(), Math.min(duration, MAX_TIMEOUT));\n }\n /** Marks the snackbar as opened */\n _open() {\n if (!this._afterOpened.closed) {\n this._afterOpened.next();\n this._afterOpened.complete();\n }\n }\n /** Cleans up the DOM after closing. */\n _finishDismiss() {\n this._overlayRef.dispose();\n if (!this._onAction.closed) {\n this._onAction.complete();\n }\n this._afterDismissed.next({ dismissedByAction: this._dismissedByAction });\n this._afterDismissed.complete();\n this._dismissedByAction = false;\n }\n /** Gets an observable that is notified when the snack bar is finished closing. */\n afterDismissed() {\n return this._afterDismissed;\n }\n /** Gets an observable that is notified when the snack bar has opened and appeared. */\n afterOpened() {\n return this.containerInstance._onEnter;\n }\n /** Gets an observable that is notified when the snack bar action is called. */\n onAction() {\n return this._onAction;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A component used to open as the default snack bar, matching material spec.\n * This should only be used internally by the snack bar service.\n */\nclass SimpleSnackBar {\n constructor(snackBarRef, data) {\n this.snackBarRef = snackBarRef;\n this.data = data;\n }\n /** Performs the action on the snack bar. */\n action() {\n this.snackBarRef.dismissWithAction();\n }\n /** If the action button should be shown. */\n get hasAction() {\n return !!this.data.action;\n }\n}\nSimpleSnackBar.ɵfac = function SimpleSnackBar_Factory(t) { return new (t || SimpleSnackBar)(ɵngcc0.ɵɵdirectiveInject(MatSnackBarRef), ɵngcc0.ɵɵdirectiveInject(MAT_SNACK_BAR_DATA)); };\nSimpleSnackBar.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SimpleSnackBar, selectors: [[\"simple-snack-bar\"]], hostAttrs: [1, \"mat-simple-snackbar\"], decls: 3, vars: 2, consts: [[\"class\", \"mat-simple-snackbar-action\", 4, \"ngIf\"], [1, \"mat-simple-snackbar-action\"], [\"mat-button\", \"\", 3, \"click\"]], template: function SimpleSnackBar_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, SimpleSnackBar_div_2_Template, 3, 1, \"div\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.data.message);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasAction);\n } }, directives: [ɵngcc1.NgIf, ɵngcc2.MatButton], styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"], encapsulation: 2, changeDetection: 0 });\nSimpleSnackBar.ctorParameters = () => [\n { type: MatSnackBarRef },\n { type: undefined, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DATA,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SimpleSnackBar, [{\n type: Component,\n args: [{\n selector: 'simple-snack-bar',\n template: \"{{data.message}}\\n
    \\n \\n
    \\n\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'mat-simple-snackbar'\n },\n styles: [\".mat-simple-snackbar{display:flex;justify-content:space-between;align-items:center;line-height:20px;opacity:1}.mat-simple-snackbar-action{flex-shrink:0;margin:-8px -8px -8px 8px}.mat-simple-snackbar-action button{max-height:36px;min-width:0}[dir=rtl] .mat-simple-snackbar-action{margin-left:-8px;margin-right:8px}\\n\"]\n }]\n }], function () { return [{ type: MatSnackBarRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SNACK_BAR_DATA]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material snack bar.\n * @docs-private\n */\nconst matSnackBarAnimations = {\n /** Animation that shows and hides a snack bar. */\n snackBarState: trigger('state', [\n state('void, hidden', style({\n transform: 'scale(0.8)',\n opacity: 0,\n })),\n state('visible', style({\n transform: 'scale(1)',\n opacity: 1,\n })),\n transition('* => visible', animate('150ms cubic-bezier(0, 0, 0.2, 1)')),\n transition('* => void, * => hidden', animate('75ms cubic-bezier(0.4, 0.0, 1, 1)', style({\n opacity: 0\n }))),\n ])\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Internal component that wraps user-provided snack bar content.\n * @docs-private\n */\nclass MatSnackBarContainer extends BasePortalOutlet {\n constructor(_ngZone, _elementRef, _changeDetectorRef, _platform, \n /** The snack bar configuration. */\n snackBarConfig) {\n super();\n this._ngZone = _ngZone;\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._platform = _platform;\n this.snackBarConfig = snackBarConfig;\n /** The number of milliseconds to wait before announcing the snack bar's content. */\n this._announceDelay = 150;\n /** Whether the component has been destroyed. */\n this._destroyed = false;\n /** Subject for notifying that the snack bar has announced to screen readers. */\n this._onAnnounce = new Subject();\n /** Subject for notifying that the snack bar has exited from view. */\n this._onExit = new Subject();\n /** Subject for notifying that the snack bar has finished entering the view. */\n this._onEnter = new Subject();\n /** The state of the snack bar animations. */\n this._animationState = 'void';\n /**\n * Attaches a DOM portal to the snack bar container.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachDomPortal(portal);\n };\n // Use aria-live rather than a live role like 'alert' or 'status'\n // because NVDA and JAWS have show inconsistent behavior with live roles.\n if (snackBarConfig.politeness === 'assertive' && !snackBarConfig.announcementMessage) {\n this._live = 'assertive';\n }\n else if (snackBarConfig.politeness === 'off') {\n this._live = 'off';\n }\n else {\n this._live = 'polite';\n }\n }\n /** Attach a component portal as content to this snack bar container. */\n attachComponentPortal(portal) {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachComponentPortal(portal);\n }\n /** Attach a template portal as content to this snack bar container. */\n attachTemplatePortal(portal) {\n this._assertNotAttached();\n this._applySnackBarClasses();\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n /** Handle end of animations, updating the state of the snackbar. */\n onAnimationEnd(event) {\n const { fromState, toState } = event;\n if ((toState === 'void' && fromState !== 'void') || toState === 'hidden') {\n this._completeExit();\n }\n if (toState === 'visible') {\n // Note: we shouldn't use `this` inside the zone callback,\n // because it can cause a memory leak.\n const onEnter = this._onEnter;\n this._ngZone.run(() => {\n onEnter.next();\n onEnter.complete();\n });\n }\n }\n /** Begin animation of snack bar entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n this._screenReaderAnnounce();\n }\n }\n /** Begin animation of the snack bar exiting from view. */\n exit() {\n // Note: this one transitions to `hidden`, rather than `void`, in order to handle the case\n // where multiple snack bars are opened in quick succession (e.g. two consecutive calls to\n // `MatSnackBar.open`).\n this._animationState = 'hidden';\n // Mark this element with an 'exit' attribute to indicate that the snackbar has\n // been dismissed and will soon be removed from the DOM. This is used by the snackbar\n // test harness.\n this._elementRef.nativeElement.setAttribute('mat-exit', '');\n // If the snack bar hasn't been announced by the time it exits it wouldn't have been open\n // long enough to visually read it either, so clear the timeout for announcing.\n clearTimeout(this._announceTimeoutId);\n return this._onExit;\n }\n /** Makes sure the exit callbacks have been invoked when the element is destroyed. */\n ngOnDestroy() {\n this._destroyed = true;\n this._completeExit();\n }\n /**\n * Waits for the zone to settle before removing the element. Helps prevent\n * errors where we end up removing an element which is in the middle of an animation.\n */\n _completeExit() {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._onExit.next();\n this._onExit.complete();\n });\n }\n /** Applies the various positioning and user-configured CSS classes to the snack bar. */\n _applySnackBarClasses() {\n const element = this._elementRef.nativeElement;\n const panelClasses = this.snackBarConfig.panelClass;\n if (panelClasses) {\n if (Array.isArray(panelClasses)) {\n // Note that we can't use a spread here, because IE doesn't support multiple arguments.\n panelClasses.forEach(cssClass => element.classList.add(cssClass));\n }\n else {\n element.classList.add(panelClasses);\n }\n }\n if (this.snackBarConfig.horizontalPosition === 'center') {\n element.classList.add('mat-snack-bar-center');\n }\n if (this.snackBarConfig.verticalPosition === 'top') {\n element.classList.add('mat-snack-bar-top');\n }\n }\n /** Asserts that no content is already attached to the container. */\n _assertNotAttached() {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempting to attach snack bar content after content is already attached');\n }\n }\n /**\n * Starts a timeout to move the snack bar content to the live region so screen readers will\n * announce it.\n */\n _screenReaderAnnounce() {\n if (!this._announceTimeoutId) {\n this._ngZone.runOutsideAngular(() => {\n this._announceTimeoutId = setTimeout(() => {\n const inertElement = this._elementRef.nativeElement.querySelector('[aria-hidden]');\n const liveElement = this._elementRef.nativeElement.querySelector('[aria-live]');\n if (inertElement && liveElement) {\n // If an element in the snack bar content is focused before being moved\n // track it and restore focus after moving to the live region.\n let focusedElement = null;\n if (this._platform.isBrowser &&\n document.activeElement instanceof HTMLElement &&\n inertElement.contains(document.activeElement)) {\n focusedElement = document.activeElement;\n }\n inertElement.removeAttribute('aria-hidden');\n liveElement.appendChild(inertElement);\n focusedElement === null || focusedElement === void 0 ? void 0 : focusedElement.focus();\n this._onAnnounce.next();\n this._onAnnounce.complete();\n }\n }, this._announceDelay);\n });\n }\n }\n}\nMatSnackBarContainer.ɵfac = function MatSnackBarContainer_Factory(t) { return new (t || MatSnackBarContainer)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.Platform), ɵngcc0.ɵɵdirectiveInject(MatSnackBarConfig)); };\nMatSnackBarContainer.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatSnackBarContainer, selectors: [[\"snack-bar-container\"]], viewQuery: function MatSnackBarContainer_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(CdkPortalOutlet, true);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._portalOutlet = _t.first);\n } }, hostAttrs: [1, \"mat-snack-bar-container\"], hostVars: 1, hostBindings: function MatSnackBarContainer_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵsyntheticHostListener(\"@state.done\", function MatSnackBarContainer_animation_state_done_HostBindingHandler($event) { return ctx.onAnimationEnd($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵsyntheticHostProperty(\"@state\", ctx._animationState);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 1, consts: [[\"aria-hidden\", \"true\"], [\"cdkPortalOutlet\", \"\"]], template: function MatSnackBarContainer_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵtemplate(1, MatSnackBarContainer_ng_template_1_Template, 0, 0, \"ng-template\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"div\");\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"aria-live\", ctx._live);\n } }, directives: [ɵngcc4.CdkPortalOutlet], styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"], encapsulation: 2, data: { animation: [matSnackBarAnimations.snackBarState] } });\nMatSnackBarContainer.ctorParameters = () => [\n { type: NgZone },\n { type: ElementRef },\n { type: ChangeDetectorRef },\n { type: Platform },\n { type: MatSnackBarConfig }\n];\nMatSnackBarContainer.propDecorators = {\n _portalOutlet: [{ type: ViewChild, args: [CdkPortalOutlet, { static: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSnackBarContainer, [{\n type: Component,\n args: [{\n selector: 'snack-bar-container',\n template: \"\\n
    \\n \\n
    \\n\\n\\n
    \\n\",\n // In Ivy embedded views will be change detected from their declaration place, rather than\n // where they were stamped out. This means that we can't have the snack bar container be OnPush,\n // because it might cause snack bars that were opened from a template not to be out of date.\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n animations: [matSnackBarAnimations.snackBarState],\n host: {\n 'class': 'mat-snack-bar-container',\n '[@state]': '_animationState',\n '(@state.done)': 'onAnimationEnd($event)'\n },\n styles: [\".mat-snack-bar-container{border-radius:4px;box-sizing:border-box;display:block;margin:24px;max-width:33vw;min-width:344px;padding:14px 16px;min-height:48px;transform-origin:center}.cdk-high-contrast-active .mat-snack-bar-container{border:solid 1px}.mat-snack-bar-handset{width:100%}.mat-snack-bar-handset .mat-snack-bar-container{margin:8px;max-width:100%;min-width:0;width:100%}\\n\"]\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc3.Platform }, { type: MatSnackBarConfig }]; }, { _portalOutlet: [{\n type: ViewChild,\n args: [CdkPortalOutlet, { static: true }]\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSnackBarModule {\n}\nMatSnackBarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatSnackBarModule });\nMatSnackBarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatSnackBarModule_Factory(t) { return new (t || MatSnackBarModule)(); }, imports: [[\n OverlayModule,\n PortalModule,\n CommonModule,\n MatButtonModule,\n MatCommonModule,\n ], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatSnackBarModule, { declarations: function () { return [MatSnackBarContainer, SimpleSnackBar]; }, imports: function () { return [OverlayModule,\n PortalModule,\n CommonModule,\n MatButtonModule,\n MatCommonModule]; }, exports: function () { return [MatSnackBarContainer, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSnackBarModule, [{\n type: NgModule,\n args: [{\n imports: [\n OverlayModule,\n PortalModule,\n CommonModule,\n MatButtonModule,\n MatCommonModule,\n ],\n exports: [MatSnackBarContainer, MatCommonModule],\n declarations: [MatSnackBarContainer, SimpleSnackBar],\n entryComponents: [MatSnackBarContainer, SimpleSnackBar]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to specify default snack bar. */\nconst MAT_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken('mat-snack-bar-default-options', {\n providedIn: 'root',\n factory: MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY() {\n return new MatSnackBarConfig();\n}\n/**\n * Service to dispatch Material Design snack bar messages.\n */\nclass MatSnackBar {\n constructor(_overlay, _live, _injector, _breakpointObserver, _parentSnackBar, _defaultConfig) {\n this._overlay = _overlay;\n this._live = _live;\n this._injector = _injector;\n this._breakpointObserver = _breakpointObserver;\n this._parentSnackBar = _parentSnackBar;\n this._defaultConfig = _defaultConfig;\n /**\n * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).\n * If there is a parent snack-bar service, all operations should delegate to that parent\n * via `_openedSnackBarRef`.\n */\n this._snackBarRefAtThisLevel = null;\n /** The component that should be rendered as the snack bar's simple component. */\n this.simpleSnackBarComponent = SimpleSnackBar;\n /** The container component that attaches the provided template or component. */\n this.snackBarContainerComponent = MatSnackBarContainer;\n /** The CSS class to applie for handset mode. */\n this.handsetCssClass = 'mat-snack-bar-handset';\n }\n /** Reference to the currently opened snackbar at *any* level. */\n get _openedSnackBarRef() {\n const parent = this._parentSnackBar;\n return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;\n }\n set _openedSnackBarRef(value) {\n if (this._parentSnackBar) {\n this._parentSnackBar._openedSnackBarRef = value;\n }\n else {\n this._snackBarRefAtThisLevel = value;\n }\n }\n /**\n * Creates and dispatches a snack bar with a custom component for the content, removing any\n * currently opened snack bars.\n *\n * @param component Component to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromComponent(component, config) {\n return this._attach(component, config);\n }\n /**\n * Creates and dispatches a snack bar with a custom template for the content, removing any\n * currently opened snack bars.\n *\n * @param template Template to be instantiated.\n * @param config Extra configuration for the snack bar.\n */\n openFromTemplate(template, config) {\n return this._attach(template, config);\n }\n /**\n * Opens a snackbar with a message and an optional action.\n * @param message The message to show in the snackbar.\n * @param action The label for the snackbar action.\n * @param config Additional configuration options for the snackbar.\n */\n open(message, action = '', config) {\n const _config = Object.assign(Object.assign({}, this._defaultConfig), config);\n // Since the user doesn't have access to the component, we can\n // override the data to pass in our own message and action.\n _config.data = { message, action };\n // Since the snack bar has `role=\"alert\"`, we don't\n // want to announce the same message twice.\n if (_config.announcementMessage === message) {\n _config.announcementMessage = undefined;\n }\n return this.openFromComponent(this.simpleSnackBarComponent, _config);\n }\n /**\n * Dismisses the currently-visible snack bar.\n */\n dismiss() {\n if (this._openedSnackBarRef) {\n this._openedSnackBarRef.dismiss();\n }\n }\n ngOnDestroy() {\n // Only dismiss the snack bar at the current level on destroy.\n if (this._snackBarRefAtThisLevel) {\n this._snackBarRefAtThisLevel.dismiss();\n }\n }\n /**\n * Attaches the snack bar container component to the overlay.\n */\n _attachSnackBarContainer(overlayRef, config) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: MatSnackBarConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);\n const containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.snackBarConfig = config;\n return containerRef.instance;\n }\n /**\n * Places a new component or a template as the content of the snack bar container.\n */\n _attach(content, userConfig) {\n const config = Object.assign(Object.assign(Object.assign({}, new MatSnackBarConfig()), this._defaultConfig), userConfig);\n const overlayRef = this._createOverlay(config);\n const container = this._attachSnackBarContainer(overlayRef, config);\n const snackBarRef = new MatSnackBarRef(container, overlayRef);\n if (content instanceof TemplateRef) {\n const portal = new TemplatePortal(content, null, {\n $implicit: config.data,\n snackBarRef\n });\n snackBarRef.instance = container.attachTemplatePortal(portal);\n }\n else {\n const injector = this._createInjector(config, snackBarRef);\n const portal = new ComponentPortal(content, undefined, injector);\n const contentRef = container.attachComponentPortal(portal);\n // We can't pass this via the injector, because the injector is created earlier.\n snackBarRef.instance = contentRef.instance;\n }\n // Subscribe to the breakpoint observer and attach the mat-snack-bar-handset class as\n // appropriate. This class is applied to the overlay element because the overlay must expand to\n // fill the width of the screen for full width snackbars.\n this._breakpointObserver.observe(Breakpoints.HandsetPortrait).pipe(takeUntil(overlayRef.detachments())).subscribe(state => {\n const classList = overlayRef.overlayElement.classList;\n state.matches ? classList.add(this.handsetCssClass) : classList.remove(this.handsetCssClass);\n });\n if (config.announcementMessage) {\n // Wait until the snack bar contents have been announced then deliver this message.\n container._onAnnounce.subscribe(() => {\n this._live.announce(config.announcementMessage, config.politeness);\n });\n }\n this._animateSnackBar(snackBarRef, config);\n this._openedSnackBarRef = snackBarRef;\n return this._openedSnackBarRef;\n }\n /** Animates the old snack bar out and the new one in. */\n _animateSnackBar(snackBarRef, config) {\n // When the snackbar is dismissed, clear the reference to it.\n snackBarRef.afterDismissed().subscribe(() => {\n // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.\n if (this._openedSnackBarRef == snackBarRef) {\n this._openedSnackBarRef = null;\n }\n if (config.announcementMessage) {\n this._live.clear();\n }\n });\n if (this._openedSnackBarRef) {\n // If a snack bar is already in view, dismiss it and enter the\n // new snack bar after exit animation is complete.\n this._openedSnackBarRef.afterDismissed().subscribe(() => {\n snackBarRef.containerInstance.enter();\n });\n this._openedSnackBarRef.dismiss();\n }\n else {\n // If no snack bar is in view, enter the new snack bar.\n snackBarRef.containerInstance.enter();\n }\n // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.\n if (config.duration && config.duration > 0) {\n snackBarRef.afterOpened().subscribe(() => snackBarRef._dismissAfter(config.duration));\n }\n }\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified snack bar config.\n */\n _createOverlay(config) {\n const overlayConfig = new OverlayConfig();\n overlayConfig.direction = config.direction;\n let positionStrategy = this._overlay.position().global();\n // Set horizontal position.\n const isRtl = config.direction === 'rtl';\n const isLeft = (config.horizontalPosition === 'left' ||\n (config.horizontalPosition === 'start' && !isRtl) ||\n (config.horizontalPosition === 'end' && isRtl));\n const isRight = !isLeft && config.horizontalPosition !== 'center';\n if (isLeft) {\n positionStrategy.left('0');\n }\n else if (isRight) {\n positionStrategy.right('0');\n }\n else {\n positionStrategy.centerHorizontally();\n }\n // Set horizontal position.\n if (config.verticalPosition === 'top') {\n positionStrategy.top('0');\n }\n else {\n positionStrategy.bottom('0');\n }\n overlayConfig.positionStrategy = positionStrategy;\n return this._overlay.create(overlayConfig);\n }\n /**\n * Creates an injector to be used inside of a snack bar component.\n * @param config Config that was used to create the snack bar.\n * @param snackBarRef Reference to the snack bar.\n */\n _createInjector(config, snackBarRef) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n return Injector.create({\n parent: userInjector || this._injector,\n providers: [\n { provide: MatSnackBarRef, useValue: snackBarRef },\n { provide: MAT_SNACK_BAR_DATA, useValue: config.data }\n ]\n });\n }\n}\nMatSnackBar.ɵfac = function MatSnackBar_Factory(t) { return new (t || MatSnackBar)(ɵngcc0.ɵɵinject(ɵngcc5.Overlay), ɵngcc0.ɵɵinject(ɵngcc6.LiveAnnouncer), ɵngcc0.ɵɵinject(ɵngcc0.Injector), ɵngcc0.ɵɵinject(ɵngcc7.BreakpointObserver), ɵngcc0.ɵɵinject(MatSnackBar, 12), ɵngcc0.ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS)); };\nMatSnackBar.ɵprov = ɵɵdefineInjectable({ factory: function MatSnackBar_Factory() { return new MatSnackBar(ɵɵinject(Overlay), ɵɵinject(LiveAnnouncer), ɵɵinject(INJECTOR), ɵɵinject(BreakpointObserver), ɵɵinject(MatSnackBar, 12), ɵɵinject(MAT_SNACK_BAR_DEFAULT_OPTIONS)); }, token: MatSnackBar, providedIn: MatSnackBarModule });\nMatSnackBar.ctorParameters = () => [\n { type: Overlay },\n { type: LiveAnnouncer },\n { type: Injector },\n { type: BreakpointObserver },\n { type: MatSnackBar, decorators: [{ type: Optional }, { type: SkipSelf }] },\n { type: MatSnackBarConfig, decorators: [{ type: Inject, args: [MAT_SNACK_BAR_DEFAULT_OPTIONS,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatSnackBar, [{\n type: Injectable,\n args: [{ providedIn: MatSnackBarModule }]\n }], function () { return [{ type: ɵngcc5.Overlay }, { type: ɵngcc6.LiveAnnouncer }, { type: ɵngcc0.Injector }, { type: ɵngcc7.BreakpointObserver }, { type: MatSnackBar, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: MatSnackBarConfig, decorators: [{\n type: Inject,\n args: [MAT_SNACK_BAR_DEFAULT_OPTIONS]\n }] }]; }, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SNACK_BAR_DATA, MAT_SNACK_BAR_DEFAULT_OPTIONS, MAT_SNACK_BAR_DEFAULT_OPTIONS_FACTORY, MatSnackBar, MatSnackBarConfig, MatSnackBarContainer, MatSnackBarModule, MatSnackBarRef, SimpleSnackBar, matSnackBarAnimations };\n\n//# sourceMappingURL=snack-bar.js.map","export default function createPromise() {\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = (data) => {\n promise._state = \"resolved\";\n resolve(data);\n return promise;\n };\n rejectFn = (data) => {\n promise._state = \"rejected\";\n reject(data);\n\n return promise;\n };\n });\n promise._state = \"pending\";\n promise.resolve = resolveFn;\n promise.reject = rejectFn;\n promise.state = () => promise._state;\n\n return promise;\n}\n","\nexport default function alignStartReverse(size, rect, align, axis, sizeField) {\n let start;\n if (align === \"start\") {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === \"end\") {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n\n return start;\n}","import Group from './group';\nimport Size from '../geometry/size';\nimport Rect from '../geometry/rect';\nimport Point from '../geometry/point';\nimport createTransform from '../geometry/transform';\nimport translateToPoint from '../alignment/translate-to-point';\nimport alignStart from '../alignment/align-start';\nimport alignStartReverse from '../alignment/align-start-reverse';\n\nconst DEFAULT_OPTIONS = {\n alignContent: \"start\",\n justifyContent: \"start\",\n alignItems: \"start\",\n spacing: 0,\n orientation: \"horizontal\",\n lineSpacing: 0,\n wrap: true,\n revers: false\n};\n\nconst forEach = (elements, callback) => {\n elements.forEach(callback);\n};\n\nconst forEachReverse = (elements, callback) => {\n const length = elements.length;\n\n for (let idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n};\n\nclass Layout extends Group {\n\n constructor(rect, options) {\n super(Object.assign({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n\n rect(value) {\n if (value) {\n this._rect = value;\n return this;\n }\n\n return this._rect;\n }\n\n _initMap() {\n const options = this.options;\n const fieldMap = this._fieldMap;\n if (options.orientation === \"horizontal\") {\n fieldMap.sizeField = \"width\";\n fieldMap.groupsSizeField = \"height\";\n fieldMap.groupAxis = \"x\";\n fieldMap.groupsAxis = \"y\";\n } else {\n fieldMap.sizeField = \"height\";\n fieldMap.groupsSizeField = \"width\";\n fieldMap.groupAxis = \"y\";\n fieldMap.groupsAxis = \"x\";\n }\n\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n }\n\n reflow() {\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n\n if (this.options.transform) {\n this.transform(null);\n }\n\n const options = this.options;\n const rect = this._rect;\n const { groups, groupsSize } = this._initGroups();\n const { sizeField, groupsSizeField, groupAxis, groupsAxis } = this._fieldMap;\n const groupOrigin = new Point();\n const elementOrigin = new Point();\n const size = new Size();\n let groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n let elementStart, group, groupBox;\n\n const arrangeElements = (bbox, idx) => {\n const element = group.elements[idx];\n\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n\n for (let groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this.forEach(group.bboxes, arrangeElements);\n\n groupStart += group.lineSize + options.lineSpacing;\n }\n\n if (!options.wrap && group.size > rect.size[sizeField]) {\n const scale = rect.size[sizeField] / groupBox.size[sizeField];\n const scaledStart = groupBox.topLeft().scale(scale, scale);\n const scaledSize = groupBox.size[groupsSizeField] * scale;\n const newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n const transform = createTransform();\n if (groupAxis === \"x\") {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n\n this.transform(transform);\n }\n }\n\n _initGroups() {\n const { options, children } = this;\n const { lineSpacing, wrap, spacing } = options;\n const sizeField = this._fieldMap.sizeField;\n let group = this._newGroup();\n const groups = [];\n const addGroup = function() {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n let groupsSize = -lineSpacing;\n\n for (let idx = 0; idx < children.length; idx++) {\n let element = children[idx];\n let bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this._addToGroup(group, bbox, element);\n addGroup();\n group = this._newGroup();\n } else {\n addGroup();\n group = this._newGroup();\n this._addToGroup(group, bbox, element);\n }\n } else {\n this._addToGroup(group, bbox, element);\n }\n }\n }\n\n if (group.bboxes.length) {\n addGroup();\n }\n\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n }\n\n _addToGroup(group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n }\n\n _newGroup() {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n}\n\nexport default Layout;","import { map } from './map';\nimport { from } from '../observable/from';\nimport { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';\nexport function switchMap(project, resultSelector) {\n if (typeof resultSelector === 'function') {\n return (source) => source.pipe(switchMap((a, i) => from(project(a, i)).pipe(map((b, ii) => resultSelector(a, b, i, ii)))));\n }\n return (source) => source.lift(new SwitchMapOperator(project));\n}\nclass SwitchMapOperator {\n constructor(project) {\n this.project = project;\n }\n call(subscriber, source) {\n return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));\n }\n}\nclass SwitchMapSubscriber extends SimpleOuterSubscriber {\n constructor(destination, project) {\n super(destination);\n this.project = project;\n this.index = 0;\n }\n _next(value) {\n let result;\n const index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (error) {\n this.destination.error(error);\n return;\n }\n this._innerSub(result);\n }\n _innerSub(result) {\n const innerSubscription = this.innerSubscription;\n if (innerSubscription) {\n innerSubscription.unsubscribe();\n }\n const innerSubscriber = new SimpleInnerSubscriber(this);\n const destination = this.destination;\n destination.add(innerSubscriber);\n this.innerSubscription = innerSubscribe(result, innerSubscriber);\n if (this.innerSubscription !== innerSubscriber) {\n destination.add(this.innerSubscription);\n }\n }\n _complete() {\n const { innerSubscription } = this;\n if (!innerSubscription || innerSubscription.closed) {\n super._complete();\n }\n this.unsubscribe();\n }\n _unsubscribe() {\n this.innerSubscription = undefined;\n }\n notifyComplete() {\n this.innerSubscription = undefined;\n if (this.isStopped) {\n super._complete();\n }\n }\n notifyNext(innerValue) {\n this.destination.next(innerValue);\n }\n}\n//# sourceMappingURL=switchMap.js.map","import RootNode from './root-node';\nimport { Group } from '../shapes';\nimport { transform } from '../geometry';\nimport { SVG_NS } from './constants';\n\nexport default function exportGroup(group) {\n const root = new RootNode({\n skipBaseHref: true\n });\n const bbox = group.clippedBBox();\n let rootGroup = group;\n\n if (bbox) {\n const origin = bbox.getOrigin();\n const exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n\n root.load([ rootGroup ]);\n\n const svg = `${ root.render() }`;\n\n root.destroy();\n\n return svg;\n}","import { AsyncAction } from './AsyncAction';\nexport class AnimationFrameAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(() => scheduler.flush(null)));\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n if (scheduler.actions.length === 0) {\n cancelAnimationFrame(id);\n scheduler.scheduled = undefined;\n }\n return undefined;\n }\n}\n//# sourceMappingURL=AnimationFrameAction.js.map","import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport const animationFrame = animationFrameScheduler;\n//# sourceMappingURL=animationFrame.js.map","import { AsyncScheduler } from './AsyncScheduler';\nexport class AnimationFrameScheduler extends AsyncScheduler {\n flush(action) {\n this.active = true;\n this.scheduled = undefined;\n const { actions } = this;\n let error;\n let index = -1;\n let count = actions.length;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n this.active = false;\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n//# sourceMappingURL=AnimationFrameScheduler.js.map","import { createPromise, encodeBase64 } from '../util';\nimport exportGroup from './export-group';\n\nexport default function exportSVG(group, options) {\n let svg = exportGroup(group);\n\n if (!options || !options.raw) {\n svg = \"data:image/svg+xml;base64,\" + encodeBase64(svg);\n }\n\n return createPromise().resolve(svg);\n}\n","import stackElements from './stack-elements';\nimport createStackElements from './create-stack-elements';\n\nexport default function stack(elements) {\n stackElements(createStackElements(elements), \"x\", \"y\", \"width\");\n}","import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from '@angular/material/core';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport * as ɵngcc0 from '@angular/core';\nclass MatDivider {\n constructor() {\n this._vertical = false;\n this._inset = false;\n }\n /** Whether the divider is vertically aligned. */\n get vertical() { return this._vertical; }\n set vertical(value) { this._vertical = coerceBooleanProperty(value); }\n /** Whether the divider is an inset divider. */\n get inset() { return this._inset; }\n set inset(value) { this._inset = coerceBooleanProperty(value); }\n}\nMatDivider.ɵfac = function MatDivider_Factory(t) { return new (t || MatDivider)(); };\nMatDivider.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MatDivider, selectors: [[\"mat-divider\"]], hostAttrs: [\"role\", \"separator\", 1, \"mat-divider\"], hostVars: 7, hostBindings: function MatDivider_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n ɵngcc0.ɵɵclassProp(\"mat-divider-vertical\", ctx.vertical)(\"mat-divider-horizontal\", !ctx.vertical)(\"mat-divider-inset\", ctx.inset);\n } }, inputs: { vertical: \"vertical\", inset: \"inset\" }, decls: 0, vars: 0, template: function MatDivider_Template(rf, ctx) { }, styles: [\".mat-divider{display:block;margin:0;border-top-width:1px;border-top-style:solid}.mat-divider.mat-divider-vertical{border-top:0;border-right-width:1px;border-right-style:solid}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\\n\"], encapsulation: 2, changeDetection: 0 });\nMatDivider.propDecorators = {\n vertical: [{ type: Input }],\n inset: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDivider, [{\n type: Component,\n args: [{\n selector: 'mat-divider',\n host: {\n 'role': 'separator',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-divider-vertical]': 'vertical',\n '[class.mat-divider-horizontal]': '!vertical',\n '[class.mat-divider-inset]': 'inset',\n 'class': 'mat-divider'\n },\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\".mat-divider{display:block;margin:0;border-top-width:1px;border-top-style:solid}.mat-divider.mat-divider-vertical{border-top:0;border-right-width:1px;border-right-style:solid}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\\n\"]\n }]\n }], function () { return []; }, { vertical: [{\n type: Input\n }], inset: [{\n type: Input\n }] }); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatDividerModule {\n}\nMatDividerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MatDividerModule });\nMatDividerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MatDividerModule_Factory(t) { return new (t || MatDividerModule)(); }, imports: [[MatCommonModule], MatCommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MatDividerModule, { declarations: function () { return [MatDivider]; }, imports: function () { return [MatCommonModule]; }, exports: function () { return [MatDivider, MatCommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MatDividerModule, [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatDivider, MatCommonModule],\n declarations: [MatDivider]\n }]\n }], null, null); })();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatDivider, MatDividerModule };\n\n//# sourceMappingURL=divider.js.map","import { PRECISION } from '../constants';\n\nimport { round } from '../../util';\n\nexport default function close(a, b, tolerance = PRECISION) {\n return round(Math.abs(a - b), tolerance) === 0;\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeFunction from \"@babel/runtime/helpers/esm/isNativeFunction\";\nimport construct from \"@babel/runtime/helpers/esm/construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","/**\n * @license Angular v11.0.4\n * (c) 2010-2020 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { Subject, Subscription, Observable, merge as merge$1 } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n for (let key in objWithPropertyToExtract) {\n if (objWithPropertyToExtract[key] === getClosureSafeProperty) {\n return key;\n }\n }\n throw Error('Could not find renamed property on target object.');\n}\n/**\n * Sets properties on a target object from a source object, but only if\n * the property doesn't already exist on the target object.\n * @param target The target to set properties on\n * @param source The source of the property keys and values to set\n */\nfunction fillProperties(target, source) {\n for (const key in source) {\n if (source.hasOwnProperty(key) && !target.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction stringify(token) {\n if (typeof token === 'string') {\n return token;\n }\n if (Array.isArray(token)) {\n return '[' + token.map(stringify).join(', ') + ']';\n }\n if (token == null) {\n return '' + token;\n }\n if (token.overriddenName) {\n return `${token.overriddenName}`;\n }\n if (token.name) {\n return `${token.name}`;\n }\n const res = token.toString();\n if (res == null) {\n return '' + res;\n }\n const newLineIndex = res.indexOf('\\n');\n return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n}\n/**\n * Concatenates two strings with separator, allocating new strings only when necessary.\n *\n * @param before before string.\n * @param separator separator string.\n * @param after after string.\n * @returns concatenated string.\n */\nfunction concatStringsWithSpace(before, after) {\n return (before == null || before === '') ?\n (after === null ? '' : after) :\n ((after == null || after === '') ? before : before + ' ' + after);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst __forward_ref__ = getClosureSafeProperty({ __forward_ref__: getClosureSafeProperty });\n/**\n * Allows to refer to references which are not yet defined.\n *\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\n * DI is declared, but not yet defined. It is also used when the `token` which we use when creating\n * a query is not yet defined.\n *\n * @usageNotes\n * ### Example\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\n * @publicApi\n */\nfunction forwardRef(forwardRefFn) {\n forwardRefFn.__forward_ref__ = forwardRef;\n forwardRefFn.toString = function () {\n return stringify(this());\n };\n return forwardRefFn;\n}\n/**\n * Lazily retrieves the reference value from a forwardRef.\n *\n * Acts as the identity function when given a non-forward-ref value.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\n *\n * @see `forwardRef`\n * @publicApi\n */\nfunction resolveForwardRef(type) {\n return isForwardRef(type) ? type() : type;\n}\n/** Checks whether a function is wrapped by a `forwardRef`. */\nfunction isForwardRef(fn) {\n return typeof fn === 'function' && fn.hasOwnProperty(__forward_ref__) &&\n fn.__forward_ref__ === forwardRef;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction assertNumber(actual, msg) {\n if (!(typeof actual === 'number')) {\n throwError(msg, typeof actual, 'number', '===');\n }\n}\nfunction assertNumberInRange(actual, minInclusive, maxInclusive) {\n assertNumber(actual, 'Expected a number');\n assertLessThanOrEqual(actual, maxInclusive, 'Expected number to be less than or equal to');\n assertGreaterThanOrEqual(actual, minInclusive, 'Expected number to be greater than or equal to');\n}\nfunction assertString(actual, msg) {\n if (!(typeof actual === 'string')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'string', '===');\n }\n}\nfunction assertFunction(actual, msg) {\n if (!(typeof actual === 'function')) {\n throwError(msg, actual === null ? 'null' : typeof actual, 'function', '===');\n }\n}\nfunction assertEqual(actual, expected, msg) {\n if (!(actual == expected)) {\n throwError(msg, actual, expected, '==');\n }\n}\nfunction assertNotEqual(actual, expected, msg) {\n if (!(actual != expected)) {\n throwError(msg, actual, expected, '!=');\n }\n}\nfunction assertSame(actual, expected, msg) {\n if (!(actual === expected)) {\n throwError(msg, actual, expected, '===');\n }\n}\nfunction assertNotSame(actual, expected, msg) {\n if (!(actual !== expected)) {\n throwError(msg, actual, expected, '!==');\n }\n}\nfunction assertLessThan(actual, expected, msg) {\n if (!(actual < expected)) {\n throwError(msg, actual, expected, '<');\n }\n}\nfunction assertLessThanOrEqual(actual, expected, msg) {\n if (!(actual <= expected)) {\n throwError(msg, actual, expected, '<=');\n }\n}\nfunction assertGreaterThan(actual, expected, msg) {\n if (!(actual > expected)) {\n throwError(msg, actual, expected, '>');\n }\n}\nfunction assertGreaterThanOrEqual(actual, expected, msg) {\n if (!(actual >= expected)) {\n throwError(msg, actual, expected, '>=');\n }\n}\nfunction assertNotDefined(actual, msg) {\n if (actual != null) {\n throwError(msg, actual, null, '==');\n }\n}\nfunction assertDefined(actual, msg) {\n if (actual == null) {\n throwError(msg, actual, null, '!=');\n }\n}\nfunction throwError(msg, actual, expected, comparison) {\n throw new Error(`ASSERTION ERROR: ${msg}` +\n (comparison == null ? '' : ` [Expected=> ${expected} ${comparison} ${actual} <=Actual]`));\n}\nfunction assertDomNode(node) {\n // If we're in a worker, `Node` will not be defined.\n if (!(typeof Node !== 'undefined' && node instanceof Node) &&\n !(typeof node === 'object' && node != null &&\n node.constructor.name === 'WebWorkerRenderNode')) {\n throwError(`The provided value must be an instance of a DOM Node but got ${stringify(node)}`);\n }\n}\nfunction assertIndexInRange(arr, index) {\n assertDefined(arr, 'Array must be defined.');\n const maxLen = arr.length;\n if (index < 0 || index >= maxLen) {\n throwError(`Index expected to be less than ${maxLen} but got ${index}`);\n }\n}\nfunction assertOneOf(value, ...validValues) {\n if (validValues.indexOf(value) !== -1)\n return true;\n throwError(`Expected value to be one of ${JSON.stringify(validValues)} but was ${JSON.stringify(value)}.`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Construct an `InjectableDef` which defines how a token will be constructed by the DI system, and\n * in which injectors (if any) it will be available.\n *\n * This should be assigned to a static `ɵprov` field on a type, which will then be an\n * `InjectableType`.\n *\n * Options:\n * * `providedIn` determines which injectors will include the injectable, by either associating it\n * with an `@NgModule` or other `InjectorType`, or by specifying that this injectable should be\n * provided in the `'root'` injector, which will be the application-level injector in most apps.\n * * `factory` gives the zero argument function which will create an instance of the injectable.\n * The factory can call `inject` to access the `Injector` and request injection of dependencies.\n *\n * @codeGenApi\n * @publicApi This instruction has been emitted by ViewEngine for some time and is deployed to npm.\n */\nfunction ɵɵdefineInjectable(opts) {\n return {\n token: opts.token,\n providedIn: opts.providedIn || null,\n factory: opts.factory,\n value: undefined,\n };\n}\n/**\n * @deprecated in v8, delete after v10. This API should be used only by generated code, and that\n * code should now use ɵɵdefineInjectable instead.\n * @publicApi\n */\nconst defineInjectable = ɵɵdefineInjectable;\n/**\n * Construct an `InjectorDef` which configures an injector.\n *\n * This should be assigned to a static injector def (`ɵinj`) field on a type, which will then be an\n * `InjectorType`.\n *\n * Options:\n *\n * * `factory`: an `InjectorType` is an instantiable type, so a zero argument `factory` function to\n * create the type must be provided. If that factory function needs to inject arguments, it can\n * use the `inject` function.\n * * `providers`: an optional array of providers to add to the injector. Each provider must\n * either have a factory or point to a type which has a `ɵprov` static property (the\n * type must be an `InjectableType`).\n * * `imports`: an optional array of imports of other `InjectorType`s or `InjectorTypeWithModule`s\n * whose providers will also be added to the injector. Locally provided types will override\n * providers from imports.\n *\n * @codeGenApi\n */\nfunction ɵɵdefineInjector(options) {\n return {\n factory: options.factory,\n providers: options.providers || [],\n imports: options.imports || [],\n };\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` in a way which is immune to accidentally reading\n * inherited value.\n *\n * @param type A type which may have its own (non-inherited) `ɵprov`.\n */\nfunction getInjectableDef(type) {\n return getOwnDefinition(type, NG_PROV_DEF) || getOwnDefinition(type, NG_INJECTABLE_DEF);\n}\n/**\n * Return definition only if it is defined directly on `type` and is not inherited from a base\n * class of `type`.\n */\nfunction getOwnDefinition(type, field) {\n return type.hasOwnProperty(field) ? type[field] : null;\n}\n/**\n * Read the injectable def (`ɵprov`) for `type` or read the `ɵprov` from one of its ancestors.\n *\n * @param type A type which may have `ɵprov`, via inheritance.\n *\n * @deprecated Will be removed in a future version of Angular, where an error will occur in the\n * scenario if we find the `ɵprov` on an ancestor only.\n */\nfunction getInheritedInjectableDef(type) {\n const def = type && (type[NG_PROV_DEF] || type[NG_INJECTABLE_DEF]);\n if (def) {\n const typeName = getTypeName(type);\n // TODO(FW-1307): Re-add ngDevMode when closure can handle it\n // ngDevMode &&\n console.warn(`DEPRECATED: DI is instantiating a token \"${typeName}\" that inherits its @Injectable decorator but does not provide one itself.\\n` +\n `This will become an error in a future version of Angular. Please add @Injectable() to the \"${typeName}\" class.`);\n return def;\n }\n else {\n return null;\n }\n}\n/** Gets the name of a type, accounting for some cross-browser differences. */\nfunction getTypeName(type) {\n // `Function.prototype.name` behaves differently between IE and other browsers. In most browsers\n // it'll always return the name of the function itself, no matter how many other functions it\n // inherits from. On IE the function doesn't have its own `name` property, but it takes it from\n // the lowest level in the prototype chain. E.g. if we have `class Foo extends Parent` most\n // browsers will evaluate `Foo.name` to `Foo` while IE will return `Parent`. We work around\n // the issue by converting the function to a string and parsing its name out that way via a regex.\n if (type.hasOwnProperty('name')) {\n return type.name;\n }\n const match = ('' + type).match(/^function\\s*([^\\s(]+)/);\n return match === null ? '' : match[1];\n}\n/**\n * Read the injector def type in a way which is immune to accidentally reading inherited value.\n *\n * @param type type which may have an injector def (`ɵinj`)\n */\nfunction getInjectorDef(type) {\n return type && (type.hasOwnProperty(NG_INJ_DEF) || type.hasOwnProperty(NG_INJECTOR_DEF)) ?\n type[NG_INJ_DEF] :\n null;\n}\nconst NG_PROV_DEF = getClosureSafeProperty({ ɵprov: getClosureSafeProperty });\nconst NG_INJ_DEF = getClosureSafeProperty({ ɵinj: getClosureSafeProperty });\n// We need to keep these around so we can read off old defs if new defs are unavailable\nconst NG_INJECTABLE_DEF = getClosureSafeProperty({ ngInjectableDef: getClosureSafeProperty });\nconst NG_INJECTOR_DEF = getClosureSafeProperty({ ngInjectorDef: getClosureSafeProperty });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection flags for DI.\n *\n * @publicApi\n */\nvar InjectFlags;\n(function (InjectFlags) {\n // TODO(alxhub): make this 'const' when ngc no longer writes exports of it into ngfactory files.\n /** Check self and check parent injector if needed */\n InjectFlags[InjectFlags[\"Default\"] = 0] = \"Default\";\n /**\n * Specifies that an injector should retrieve a dependency from any injector until reaching the\n * host element of the current component. (Only used with Element Injector)\n */\n InjectFlags[InjectFlags[\"Host\"] = 1] = \"Host\";\n /** Don't ascend to ancestors of the node requesting injection. */\n InjectFlags[InjectFlags[\"Self\"] = 2] = \"Self\";\n /** Skip the node that is requesting injection. */\n InjectFlags[InjectFlags[\"SkipSelf\"] = 4] = \"SkipSelf\";\n /** Inject `defaultValue` instead if token not found. */\n InjectFlags[InjectFlags[\"Optional\"] = 8] = \"Optional\";\n})(InjectFlags || (InjectFlags = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Current implementation of inject.\n *\n * By default, it is `injectInjectorOnly`, which makes it `Injector`-only aware. It can be changed\n * to `directiveInject`, which brings in the `NodeInjector` system of ivy. It is designed this\n * way for two reasons:\n * 1. `Injector` should not depend on ivy logic.\n * 2. To maintain tree shake-ability we don't want to bring in unnecessary code.\n */\nlet _injectImplementation;\nfunction getInjectImplementation() {\n return _injectImplementation;\n}\n/**\n * Sets the current inject implementation.\n */\nfunction setInjectImplementation(impl) {\n const previous = _injectImplementation;\n _injectImplementation = impl;\n return previous;\n}\n/**\n * Injects `root` tokens in limp mode.\n *\n * If no injector exists, we can still inject tree-shakable providers which have `providedIn` set to\n * `\"root\"`. This is known as the limp mode injection. In such case the value is stored in the\n * `InjectableDef`.\n */\nfunction injectRootLimpMode(token, notFoundValue, flags) {\n const injectableDef = getInjectableDef(token);\n if (injectableDef && injectableDef.providedIn == 'root') {\n return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() :\n injectableDef.value;\n }\n if (flags & InjectFlags.Optional)\n return null;\n if (notFoundValue !== undefined)\n return notFoundValue;\n throw new Error(`Injector: NOT_FOUND [${stringify(token)}]`);\n}\n/**\n * Assert that `_injectImplementation` is not `fn`.\n *\n * This is useful, to prevent infinite recursion.\n *\n * @param fn Function which it should not equal to\n */\nfunction assertInjectImplementationNotEqual(fn) {\n ngDevMode &&\n assertNotEqual(_injectImplementation, fn, 'Calling ɵɵinject would cause infinite recursion');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Convince closure compiler that the wrapped function has no side-effects.\n *\n * Closure compiler always assumes that `toString` has no side-effects. We use this quirk to\n * allow us to execute a function but have closure compiler mark the call as no-side-effects.\n * It is important that the return value for the `noSideEffects` function be assigned\n * to something which is retained otherwise the call to `noSideEffects` will be removed by closure\n * compiler.\n */\nfunction noSideEffects(fn) {\n return { toString: fn }.toString();\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The strategy that the default change detector uses to detect changes.\n * When set, takes effect the next time change detection is triggered.\n *\n * @see {@link ChangeDetectorRef#usage-notes Change detection usage}\n *\n * @publicApi\n */\nvar ChangeDetectionStrategy;\n(function (ChangeDetectionStrategy) {\n /**\n * Use the `CheckOnce` strategy, meaning that automatic change detection is deactivated\n * until reactivated by setting the strategy to `Default` (`CheckAlways`).\n * Change detection can still be explicitly invoked.\n * This strategy applies to all child directives and cannot be overridden.\n */\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 0] = \"OnPush\";\n /**\n * Use the default `CheckAlways` strategy, in which change detection is automatic until\n * explicitly deactivated.\n */\n ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 1] = \"Default\";\n})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));\n/**\n * Defines the possible states of the default change detector.\n * @see `ChangeDetectorRef`\n */\nvar ChangeDetectorStatus;\n(function (ChangeDetectorStatus) {\n /**\n * A state in which, after calling `detectChanges()`, the change detector\n * state becomes `Checked`, and must be explicitly invoked or reactivated.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"CheckOnce\"] = 0] = \"CheckOnce\";\n /**\n * A state in which change detection is skipped until the change detector mode\n * becomes `CheckOnce`.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Checked\"] = 1] = \"Checked\";\n /**\n * A state in which change detection continues automatically until explicitly\n * deactivated.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"CheckAlways\"] = 2] = \"CheckAlways\";\n /**\n * A state in which a change detector sub tree is not a part of the main tree and\n * should be skipped.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Detached\"] = 3] = \"Detached\";\n /**\n * Indicates that the change detector encountered an error checking a binding\n * or calling a directive lifecycle method and is now in an inconsistent state. Change\n * detectors in this state do not detect changes.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Errored\"] = 4] = \"Errored\";\n /**\n * Indicates that the change detector has been destroyed.\n */\n ChangeDetectorStatus[ChangeDetectorStatus[\"Destroyed\"] = 5] = \"Destroyed\";\n})(ChangeDetectorStatus || (ChangeDetectorStatus = {}));\n/**\n * Reports whether a given strategy is currently the default for change detection.\n * @param changeDetectionStrategy The strategy to check.\n * @returns True if the given strategy is the current default, false otherwise.\n * @see `ChangeDetectorStatus`\n * @see `ChangeDetectorRef`\n */\nfunction isDefaultChangeDetectionStrategy(changeDetectionStrategy) {\n return changeDetectionStrategy == null ||\n changeDetectionStrategy === ChangeDetectionStrategy.Default;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Defines template and style encapsulation options available for Component's {@link Component}.\n *\n * See {@link Component#encapsulation encapsulation}.\n *\n * @usageNotes\n * ### Example\n *\n * {@example core/ts/metadata/encapsulation.ts region='longform'}\n *\n * @publicApi\n */\nvar ViewEncapsulation;\n(function (ViewEncapsulation) {\n /**\n * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host\n * Element and pre-processing the style rules provided via {@link Component#styles styles} or\n * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all\n * selectors.\n *\n * This is the default option.\n */\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n /**\n * Don't provide any template or style encapsulation.\n */\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n /**\n * Use Shadow DOM to encapsulate styles.\n *\n * For the DOM this means using modern [Shadow\n * DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\n * creating a ShadowRoot for Component's Host Element.\n */\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation || (ViewEncapsulation = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst __globalThis = typeof globalThis !== 'undefined' && globalThis;\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\n// Always use __globalThis if available, which is the spec-defined global variable across all\n// environments, then fallback to __global first, because in Node tests both __global and\n// __window may be defined and _global should be __global in that case.\nconst _global = __globalThis || __global || __window || __self;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction ngDevModeResetPerfCounters() {\n const locationString = typeof location !== 'undefined' ? location.toString() : '';\n const newCounters = {\n namedConstructors: locationString.indexOf('ngDevMode=namedConstructors') != -1,\n firstCreatePass: 0,\n tNode: 0,\n tView: 0,\n rendererCreateTextNode: 0,\n rendererSetText: 0,\n rendererCreateElement: 0,\n rendererAddEventListener: 0,\n rendererSetAttribute: 0,\n rendererRemoveAttribute: 0,\n rendererSetProperty: 0,\n rendererSetClassName: 0,\n rendererAddClass: 0,\n rendererRemoveClass: 0,\n rendererSetStyle: 0,\n rendererRemoveStyle: 0,\n rendererDestroy: 0,\n rendererDestroyNode: 0,\n rendererMoveNode: 0,\n rendererRemoveNode: 0,\n rendererAppendChild: 0,\n rendererInsertBefore: 0,\n rendererCreateComment: 0,\n };\n // Make sure to refer to ngDevMode as ['ngDevMode'] for closure.\n const allowNgDevModeTrue = locationString.indexOf('ngDevMode=false') === -1;\n _global['ngDevMode'] = allowNgDevModeTrue && newCounters;\n return newCounters;\n}\n/**\n * This function checks to see if the `ngDevMode` has been set. If yes,\n * then we honor it, otherwise we default to dev mode with additional checks.\n *\n * The idea is that unless we are doing production build where we explicitly\n * set `ngDevMode == false` we should be helping the developer by providing\n * as much early warning and errors as possible.\n *\n * `ɵɵdefineComponent` is guaranteed to have been called before any component template functions\n * (and thus Ivy instructions), so a single initialization there is sufficient to ensure ngDevMode\n * is defined for the entire instruction set.\n *\n * When checking `ngDevMode` on toplevel, always init it before referencing it\n * (e.g. `((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode())`), otherwise you can\n * get a `ReferenceError` like in https://github.com/angular/angular/issues/31595.\n *\n * Details on possible values for `ngDevMode` can be found on its docstring.\n *\n * NOTE:\n * - changes to the `ngDevMode` name must be synced with `compiler-cli/src/tooling.ts`.\n */\nfunction initNgDevMode() {\n // The below checks are to ensure that calling `initNgDevMode` multiple times does not\n // reset the counters.\n // If the `ngDevMode` is not an object, then it means we have not created the perf counters\n // yet.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (typeof ngDevMode !== 'object') {\n ngDevModeResetPerfCounters();\n }\n return typeof ngDevMode !== 'undefined' && !!ngDevMode;\n }\n return false;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This file contains reuseable \"empty\" symbols that can be used as default return values\n * in different parts of the rendering code. Because the same symbols are returned, this\n * allows for identity checks against these values to be consistently used by the framework\n * code.\n */\nconst EMPTY_OBJ = {};\nconst EMPTY_ARRAY = [];\n// freezing the values prevents any code from accidentally inserting new values in\nif ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) {\n // These property accesses can be ignored because ngDevMode will be set to false\n // when optimizing code and the whole if statement will be dropped.\n // tslint:disable-next-line:no-toplevel-property-access\n Object.freeze(EMPTY_OBJ);\n // tslint:disable-next-line:no-toplevel-property-access\n Object.freeze(EMPTY_ARRAY);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NG_COMP_DEF = getClosureSafeProperty({ ɵcmp: getClosureSafeProperty });\nconst NG_DIR_DEF = getClosureSafeProperty({ ɵdir: getClosureSafeProperty });\nconst NG_PIPE_DEF = getClosureSafeProperty({ ɵpipe: getClosureSafeProperty });\nconst NG_MOD_DEF = getClosureSafeProperty({ ɵmod: getClosureSafeProperty });\nconst NG_LOC_ID_DEF = getClosureSafeProperty({ ɵloc: getClosureSafeProperty });\nconst NG_FACTORY_DEF = getClosureSafeProperty({ ɵfac: getClosureSafeProperty });\n/**\n * If a directive is diPublic, bloomAdd sets a property on the type with this constant as\n * the key and the directive's unique ID as the value. This allows us to map directives to their\n * bloom filter bit for DI.\n */\n// TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified.\nconst NG_ELEMENT_ID = getClosureSafeProperty({ __NG_ELEMENT_ID__: getClosureSafeProperty });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet _renderCompCount = 0;\n/**\n * Create a component definition object.\n *\n *\n * # Example\n * ```\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static ɵcmp = defineComponent({\n * ...\n * });\n * }\n * ```\n * @codeGenApi\n */\nfunction ɵɵdefineComponent(componentDefinition) {\n return noSideEffects(() => {\n // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent.\n // See the `initNgDevMode` docstring for more information.\n (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode();\n const type = componentDefinition.type;\n const typePrototype = type.prototype;\n const declaredInputs = {};\n const def = {\n type: type,\n providersResolver: null,\n decls: componentDefinition.decls,\n vars: componentDefinition.vars,\n factory: null,\n template: componentDefinition.template || null,\n consts: componentDefinition.consts || null,\n ngContentSelectors: componentDefinition.ngContentSelectors,\n hostBindings: componentDefinition.hostBindings || null,\n hostVars: componentDefinition.hostVars || 0,\n hostAttrs: componentDefinition.hostAttrs || null,\n contentQueries: componentDefinition.contentQueries || null,\n declaredInputs: declaredInputs,\n inputs: null,\n outputs: null,\n exportAs: componentDefinition.exportAs || null,\n onPush: componentDefinition.changeDetection === ChangeDetectionStrategy.OnPush,\n directiveDefs: null,\n pipeDefs: null,\n selectors: componentDefinition.selectors || EMPTY_ARRAY,\n viewQuery: componentDefinition.viewQuery || null,\n features: componentDefinition.features || null,\n data: componentDefinition.data || {},\n // TODO(misko): convert ViewEncapsulation into const enum so that it can be used\n // directly in the next line. Also `None` should be 0 not 2.\n encapsulation: componentDefinition.encapsulation || ViewEncapsulation.Emulated,\n id: 'c',\n styles: componentDefinition.styles || EMPTY_ARRAY,\n _: null,\n setInput: null,\n schemas: componentDefinition.schemas || null,\n tView: null,\n };\n const directiveTypes = componentDefinition.directives;\n const feature = componentDefinition.features;\n const pipeTypes = componentDefinition.pipes;\n def.id += _renderCompCount++;\n def.inputs = invertObject(componentDefinition.inputs, declaredInputs),\n def.outputs = invertObject(componentDefinition.outputs),\n feature && feature.forEach((fn) => fn(def));\n def.directiveDefs = directiveTypes ?\n () => (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes)\n .map(extractDirectiveDef) :\n null;\n def.pipeDefs = pipeTypes ?\n () => (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef) :\n null;\n return def;\n });\n}\n/**\n * Generated next to NgModules to monkey-patch directive and pipe references onto a component's\n * definition, when generating a direct reference in the component file would otherwise create an\n * import cycle.\n *\n * See [this explanation](https://hackmd.io/Odw80D0pR6yfsOjg_7XCJg?view) for more details.\n *\n * @codeGenApi\n */\nfunction ɵɵsetComponentScope(type, directives, pipes) {\n const def = type.ɵcmp;\n def.directiveDefs = () => directives.map(extractDirectiveDef);\n def.pipeDefs = () => pipes.map(extractPipeDef);\n}\nfunction extractDirectiveDef(type) {\n const def = getComponentDef(type) || getDirectiveDef(type);\n if (ngDevMode && !def) {\n throw new Error(`'${type.name}' is neither 'ComponentType' or 'DirectiveType'.`);\n }\n return def;\n}\nfunction extractPipeDef(type) {\n const def = getPipeDef(type);\n if (ngDevMode && !def) {\n throw new Error(`'${type.name}' is not a 'PipeType'.`);\n }\n return def;\n}\nconst autoRegisterModuleById = {};\n/**\n * @codeGenApi\n */\nfunction ɵɵdefineNgModule(def) {\n const res = {\n type: def.type,\n bootstrap: def.bootstrap || EMPTY_ARRAY,\n declarations: def.declarations || EMPTY_ARRAY,\n imports: def.imports || EMPTY_ARRAY,\n exports: def.exports || EMPTY_ARRAY,\n transitiveCompileScopes: null,\n schemas: def.schemas || null,\n id: def.id || null,\n };\n if (def.id != null) {\n noSideEffects(() => {\n autoRegisterModuleById[def.id] = def.type;\n });\n }\n return res;\n}\n/**\n * Adds the module metadata that is necessary to compute the module's transitive scope to an\n * existing module definition.\n *\n * Scope metadata of modules is not used in production builds, so calls to this function can be\n * marked pure to tree-shake it from the bundle, allowing for all referenced declarations\n * to become eligible for tree-shaking as well.\n *\n * @codeGenApi\n */\nfunction ɵɵsetNgModuleScope(type, scope) {\n return noSideEffects(() => {\n const ngModuleDef = getNgModuleDef(type, true);\n ngModuleDef.declarations = scope.declarations || EMPTY_ARRAY;\n ngModuleDef.imports = scope.imports || EMPTY_ARRAY;\n ngModuleDef.exports = scope.exports || EMPTY_ARRAY;\n });\n}\n/**\n * Inverts an inputs or outputs lookup such that the keys, which were the\n * minified keys, are part of the values, and the values are parsed so that\n * the publicName of the property is the new key\n *\n * e.g. for\n *\n * ```\n * class Comp {\n * @Input()\n * propName1: string;\n *\n * @Input('publicName2')\n * declaredPropName2: number;\n * }\n * ```\n *\n * will be serialized as\n *\n * ```\n * {\n * propName1: 'propName1',\n * declaredPropName2: ['publicName2', 'declaredPropName2'],\n * }\n * ```\n *\n * which is than translated by the minifier as:\n *\n * ```\n * {\n * minifiedPropName1: 'propName1',\n * minifiedPropName2: ['publicName2', 'declaredPropName2'],\n * }\n * ```\n *\n * becomes: (public name => minifiedName)\n *\n * ```\n * {\n * 'propName1': 'minifiedPropName1',\n * 'publicName2': 'minifiedPropName2',\n * }\n * ```\n *\n * Optionally the function can take `secondary` which will result in: (public name => declared name)\n *\n * ```\n * {\n * 'propName1': 'propName1',\n * 'publicName2': 'declaredPropName2',\n * }\n * ```\n *\n\n */\nfunction invertObject(obj, secondary) {\n if (obj == null)\n return EMPTY_OBJ;\n const newLookup = {};\n for (const minifiedKey in obj) {\n if (obj.hasOwnProperty(minifiedKey)) {\n let publicName = obj[minifiedKey];\n let declaredName = publicName;\n if (Array.isArray(publicName)) {\n declaredName = publicName[1];\n publicName = publicName[0];\n }\n newLookup[publicName] = minifiedKey;\n if (secondary) {\n (secondary[publicName] = declaredName);\n }\n }\n }\n return newLookup;\n}\n/**\n * Create a directive definition object.\n *\n * # Example\n * ```ts\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static ɵdir = ɵɵdefineDirective({\n * ...\n * });\n * }\n * ```\n *\n * @codeGenApi\n */\nconst ɵɵdefineDirective = ɵɵdefineComponent;\n/**\n * Create a pipe definition object.\n *\n * # Example\n * ```\n * class MyPipe implements PipeTransform {\n * // Generated by Angular Template Compiler\n * static ɵpipe = definePipe({\n * ...\n * });\n * }\n * ```\n * @param pipeDef Pipe definition generated by the compiler\n *\n * @codeGenApi\n */\nfunction ɵɵdefinePipe(pipeDef) {\n return {\n type: pipeDef.type,\n name: pipeDef.name,\n factory: null,\n pure: pipeDef.pure !== false,\n onDestroy: pipeDef.type.prototype.ngOnDestroy || null\n };\n}\n/**\n * The following getter methods retrieve the definition from the type. Currently the retrieval\n * honors inheritance, but in the future we may change the rule to require that definitions are\n * explicit. This would require some sort of migration strategy.\n */\nfunction getComponentDef(type) {\n return type[NG_COMP_DEF] || null;\n}\nfunction getDirectiveDef(type) {\n return type[NG_DIR_DEF] || null;\n}\nfunction getPipeDef(type) {\n return type[NG_PIPE_DEF] || null;\n}\nfunction getNgModuleDef(type, throwNotFound) {\n const ngModuleDef = type[NG_MOD_DEF] || null;\n if (!ngModuleDef && throwNotFound === true) {\n throw new Error(`Type ${stringify(type)} does not have 'ɵmod' property.`);\n }\n return ngModuleDef;\n}\nfunction getNgLocaleIdDef(type) {\n return type[NG_LOC_ID_DEF] || null;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Below are constants for LView indices to help us look up LView members\n// without having to remember the specific indices.\n// Uglify will inline these when minifying so there shouldn't be a cost.\nconst HOST = 0;\nconst TVIEW = 1;\nconst FLAGS = 2;\nconst PARENT = 3;\nconst NEXT = 4;\nconst TRANSPLANTED_VIEWS_TO_REFRESH = 5;\nconst T_HOST = 6;\nconst CLEANUP = 7;\nconst CONTEXT = 8;\nconst INJECTOR = 9;\nconst RENDERER_FACTORY = 10;\nconst RENDERER = 11;\nconst SANITIZER = 12;\nconst CHILD_HEAD = 13;\nconst CHILD_TAIL = 14;\n// FIXME(misko): Investigate if the three declarations aren't all same thing.\nconst DECLARATION_VIEW = 15;\nconst DECLARATION_COMPONENT_VIEW = 16;\nconst DECLARATION_LCONTAINER = 17;\nconst PREORDER_HOOK_FLAGS = 18;\nconst QUERIES = 19;\n/**\n * Size of LView's header. Necessary to adjust for it when setting slots.\n *\n * IMPORTANT: `HEADER_OFFSET` should only be referred to the in the `ɵɵ*` instructions to translate\n * instruction index into `LView` index. All other indexes should be in the `LView` index space and\n * there should be no need to refer to `HEADER_OFFSET` anywhere else.\n */\nconst HEADER_OFFSET = 20;\n/**\n * Converts `TViewType` into human readable text.\n * Make sure this matches with `TViewType`\n */\nconst TViewTypeAsString = [\n 'Root',\n 'Component',\n 'Embedded',\n];\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Special location which allows easy identification of type. If we have an array which was\n * retrieved from the `LView` and that array has `true` at `TYPE` location, we know it is\n * `LContainer`.\n */\nconst TYPE = 1;\n/**\n * Below are constants for LContainer indices to help us look up LContainer members\n * without having to remember the specific indices.\n * Uglify will inline these when minifying so there shouldn't be a cost.\n */\n/**\n * Flag to signify that this `LContainer` may have transplanted views which need to be change\n * detected. (see: `LView[DECLARATION_COMPONENT_VIEW])`.\n *\n * This flag, once set, is never unset for the `LContainer`. This means that when unset we can skip\n * a lot of work in `refreshEmbeddedViews`. But when set we still need to verify\n * that the `MOVED_VIEWS` are transplanted and on-push.\n */\nconst HAS_TRANSPLANTED_VIEWS = 2;\n// PARENT, NEXT, TRANSPLANTED_VIEWS_TO_REFRESH are indices 3, 4, and 5\n// As we already have these constants in LView, we don't need to re-create them.\n// T_HOST is index 6\n// We already have this constants in LView, we don't need to re-create it.\nconst NATIVE = 7;\nconst VIEW_REFS = 8;\nconst MOVED_VIEWS = 9;\n/**\n * Size of LContainer's header. Represents the index after which all views in the\n * container will be inserted. We need to keep a record of current views so we know\n * which views are already in the DOM (and don't need to be re-added) and so we can\n * remove views from the DOM when they are no longer required.\n */\nconst CONTAINER_HEADER_OFFSET = 10;\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$1 = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * True if `value` is `LView`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLView(value) {\n return Array.isArray(value) && typeof value[TYPE] === 'object';\n}\n/**\n * True if `value` is `LContainer`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction isLContainer(value) {\n return Array.isArray(value) && value[TYPE] === true;\n}\nfunction isContentQueryHost(tNode) {\n return (tNode.flags & 8 /* hasContentQuery */) !== 0;\n}\nfunction isComponentHost(tNode) {\n return (tNode.flags & 2 /* isComponentHost */) === 2 /* isComponentHost */;\n}\nfunction isDirectiveHost(tNode) {\n return (tNode.flags & 1 /* isDirectiveHost */) === 1 /* isDirectiveHost */;\n}\nfunction isComponentDef(def) {\n return def.template !== null;\n}\nfunction isRootView(target) {\n return (target[FLAGS] & 512 /* IsRoot */) !== 0;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// [Assert functions do not constraint type when they are guarded by a truthy\n// expression.](https://github.com/microsoft/TypeScript/issues/37295)\nfunction assertTNodeForLView(tNode, lView) {\n assertTNodeForTView(tNode, lView[TVIEW]);\n}\nfunction assertTNodeForTView(tNode, tView) {\n assertTNode(tNode);\n tNode.hasOwnProperty('tView_') &&\n assertEqual(tNode.tView_, tView, 'This TNode does not belong to this TView.');\n}\nfunction assertTNode(tNode) {\n assertDefined(tNode, 'TNode must be defined');\n if (!(tNode && typeof tNode === 'object' && tNode.hasOwnProperty('directiveStylingLast'))) {\n throwError('Not of type TNode, got: ' + tNode);\n }\n}\nfunction assertTIcu(tIcu) {\n assertDefined(tIcu, 'Expected TIcu to be defined');\n if (!(typeof tIcu.currentCaseLViewIndex === 'number')) {\n throwError('Object is not of TIcu type.');\n }\n}\nfunction assertComponentType(actual, msg = 'Type passed in is not ComponentType, it does not have \\'ɵcmp\\' property.') {\n if (!getComponentDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertNgModuleType(actual, msg = 'Type passed in is not NgModuleType, it does not have \\'ɵmod\\' property.') {\n if (!getNgModuleDef(actual)) {\n throwError(msg);\n }\n}\nfunction assertCurrentTNodeIsParent(isParent) {\n assertEqual(isParent, true, 'currentTNode should be a parent');\n}\nfunction assertHasParent(tNode) {\n assertDefined(tNode, 'currentTNode should exist!');\n assertDefined(tNode.parent, 'currentTNode should have a parent');\n}\nfunction assertDataNext(lView, index, arr) {\n if (arr == null)\n arr = lView;\n assertEqual(arr.length, index, `index ${index} expected to be at the end of arr (length ${arr.length})`);\n}\nfunction assertLContainer(value) {\n assertDefined(value, 'LContainer must be defined');\n assertEqual(isLContainer(value), true, 'Expecting LContainer');\n}\nfunction assertLViewOrUndefined(value) {\n value && assertEqual(isLView(value), true, 'Expecting LView or undefined or null');\n}\nfunction assertLView(value) {\n assertDefined(value, 'LView must be defined');\n assertEqual(isLView(value), true, 'Expecting LView');\n}\nfunction assertFirstCreatePass(tView, errMessage) {\n assertEqual(tView.firstCreatePass, true, errMessage || 'Should only be called in first create pass.');\n}\nfunction assertFirstUpdatePass(tView, errMessage) {\n assertEqual(tView.firstUpdatePass, true, errMessage || 'Should only be called in first update pass.');\n}\n/**\n * This is a basic sanity check that an object is probably a directive def. DirectiveDef is\n * an interface, so we can't do a direct instanceof check.\n */\nfunction assertDirectiveDef(obj) {\n if (obj.type === undefined || obj.selectors == undefined || obj.inputs === undefined) {\n throwError(`Expected a DirectiveDef/ComponentDef and this object does not seem to have the expected shape.`);\n }\n}\nfunction assertIndexInDeclRange(lView, index) {\n const tView = lView[1];\n assertBetween(HEADER_OFFSET, tView.bindingStartIndex, index);\n}\nfunction assertIndexInVarsRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.bindingStartIndex, tView.expandoStartIndex, index);\n}\nfunction assertIndexInExpandoRange(lView, index) {\n const tView = lView[1];\n assertBetween(tView.expandoStartIndex, lView.length, index);\n}\nfunction assertBetween(lower, upper, index) {\n if (!(lower <= index && index < upper)) {\n throwError(`Index out of range (expecting ${lower} <= ${index} < ${upper})`);\n }\n}\n/**\n * This is a basic sanity check that the `injectorIndex` seems to point to what looks like a\n * NodeInjector data structure.\n *\n * @param lView `LView` which should be checked.\n * @param injectorIndex index into the `LView` where the `NodeInjector` is expected.\n */\nfunction assertNodeInjector(lView, injectorIndex) {\n assertIndexInExpandoRange(lView, injectorIndex);\n assertIndexInExpandoRange(lView, injectorIndex + 8 /* PARENT */);\n assertNumber(lView[injectorIndex + 0], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 1], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 2], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 3], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 4], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 5], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 6], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 7], 'injectorIndex should point to a bloom filter');\n assertNumber(lView[injectorIndex + 8 /* PARENT */], 'injectorIndex should point to parent injector');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getFactoryDef(type, throwNotFound) {\n const hasFactoryDef = type.hasOwnProperty(NG_FACTORY_DEF);\n if (!hasFactoryDef && throwNotFound === true && ngDevMode) {\n throw new Error(`Type ${stringify(type)} does not have 'ɵfac' property.`);\n }\n return hasFactoryDef ? type[NG_FACTORY_DEF] : null;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass RuntimeError extends Error {\n constructor(code, message) {\n super(formatRuntimeError(code, message));\n this.code = code;\n }\n}\n/** Called to format a runtime error */\nfunction formatRuntimeError(code, message) {\n const fullCode = code ? `NG0${code}: ` : '';\n return `${fullCode}${message}`;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used for stringify render output in Ivy.\n * Important! This function is very performance-sensitive and we should\n * be extra careful not to introduce megamorphic reads in it.\n * Check `core/test/render3/perf/render_stringify` for benchmarks and alternate implementations.\n */\nfunction renderStringify(value) {\n if (typeof value === 'string')\n return value;\n if (value == null)\n return '';\n // Use `String` so that it invokes the `toString` method of the value. Note that this\n // appears to be faster than calling `value.toString` (see `render_stringify` benchmark).\n return String(value);\n}\n/**\n * Used to stringify a value so that it can be displayed in an error message.\n * Important! This function contains a megamorphic read and should only be\n * used for error messages.\n */\nfunction stringifyForError(value) {\n if (typeof value === 'function')\n return value.name || value.toString();\n if (typeof value === 'object' && value != null && typeof value.type === 'function') {\n return value.type.name || value.type.toString();\n }\n return renderStringify(value);\n}\n\n/** Called when directives inject each other (creating a circular dependency) */\nfunction throwCyclicDependencyError(token, path) {\n const depPath = path ? `. Dependency path: ${path.join(' > ')} > ${token}` : '';\n throw new RuntimeError(\"200\" /* CYCLIC_DI_DEPENDENCY */, `Circular dependency in DI detected for ${token}${depPath}`);\n}\nfunction throwMixedMultiProviderError() {\n throw new Error(`Cannot mix multi providers and regular providers`);\n}\nfunction throwInvalidProviderError(ngModuleType, providers, provider) {\n let ngModuleDetail = '';\n if (ngModuleType && providers) {\n const providerDetail = providers.map(v => v == provider ? '?' + provider + '?' : '...');\n ngModuleDetail =\n ` - only instances of Provider and Type are allowed, got: [${providerDetail.join(', ')}]`;\n }\n throw new Error(`Invalid provider for the NgModule '${stringify(ngModuleType)}'` + ngModuleDetail);\n}\n/** Throws an error when a token is not found in DI. */\nfunction throwProviderNotFoundError(token, injectorName) {\n const injectorDetails = injectorName ? ` in ${injectorName}` : '';\n throw new RuntimeError(\"201\" /* PROVIDER_NOT_FOUND */, `No provider for ${stringifyForError(token)} found${injectorDetails}`);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Represents a basic change from a previous to a new value for a single\n * property on a directive instance. Passed as a value in a\n * {@link SimpleChanges} object to the `ngOnChanges` hook.\n *\n * @see `OnChanges`\n *\n * @publicApi\n */\nclass SimpleChange {\n constructor(previousValue, currentValue, firstChange) {\n this.previousValue = previousValue;\n this.currentValue = currentValue;\n this.firstChange = firstChange;\n }\n /**\n * Check whether the new value is the first value assigned.\n */\n isFirstChange() {\n return this.firstChange;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The NgOnChangesFeature decorates a component with support for the ngOnChanges\n * lifecycle hook, so it should be included in any component that implements\n * that hook.\n *\n * If the component or directive uses inheritance, the NgOnChangesFeature MUST\n * be included as a feature AFTER {@link InheritDefinitionFeature}, otherwise\n * inherited properties will not be propagated to the ngOnChanges lifecycle\n * hook.\n *\n * Example usage:\n *\n * ```\n * static ɵcmp = defineComponent({\n * ...\n * inputs: {name: 'publicName'},\n * features: [NgOnChangesFeature]\n * });\n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵNgOnChangesFeature() {\n return NgOnChangesFeatureImpl;\n}\nfunction NgOnChangesFeatureImpl(definition) {\n if (definition.type.prototype.ngOnChanges) {\n definition.setInput = ngOnChangesSetInput;\n }\n return rememberChangeHistoryAndInvokeOnChangesHook;\n}\n// This option ensures that the ngOnChanges lifecycle hook will be inherited\n// from superclasses (in InheritDefinitionFeature).\n/** @nocollapse */\n// tslint:disable-next-line:no-toplevel-property-access\nɵɵNgOnChangesFeature.ngInherit = true;\n/**\n * This is a synthetic lifecycle hook which gets inserted into `TView.preOrderHooks` to simulate\n * `ngOnChanges`.\n *\n * The hook reads the `NgSimpleChangesStore` data from the component instance and if changes are\n * found it invokes `ngOnChanges` on the component instance.\n *\n * @param this Component instance. Because this function gets inserted into `TView.preOrderHooks`,\n * it is guaranteed to be called with component instance.\n */\nfunction rememberChangeHistoryAndInvokeOnChangesHook() {\n const simpleChangesStore = getSimpleChangesStore(this);\n const current = simpleChangesStore === null || simpleChangesStore === void 0 ? void 0 : simpleChangesStore.current;\n if (current) {\n const previous = simpleChangesStore.previous;\n if (previous === EMPTY_OBJ) {\n simpleChangesStore.previous = current;\n }\n else {\n // New changes are copied to the previous store, so that we don't lose history for inputs\n // which were not changed this time\n for (let key in current) {\n previous[key] = current[key];\n }\n }\n simpleChangesStore.current = null;\n this.ngOnChanges(current);\n }\n}\nfunction ngOnChangesSetInput(instance, value, publicName, privateName) {\n const simpleChangesStore = getSimpleChangesStore(instance) ||\n setSimpleChangesStore(instance, { previous: EMPTY_OBJ, current: null });\n const current = simpleChangesStore.current || (simpleChangesStore.current = {});\n const previous = simpleChangesStore.previous;\n const declaredName = this.declaredInputs[publicName];\n const previousChange = previous[declaredName];\n current[declaredName] = new SimpleChange(previousChange && previousChange.currentValue, value, previous === EMPTY_OBJ);\n instance[privateName] = value;\n}\nconst SIMPLE_CHANGES_STORE = '__ngSimpleChanges__';\nfunction getSimpleChangesStore(instance) {\n return instance[SIMPLE_CHANGES_STORE] || null;\n}\nfunction setSimpleChangesStore(instance, store) {\n return instance[SIMPLE_CHANGES_STORE] = store;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nconst MATH_ML_NAMESPACE = 'http://www.w3.org/1998/MathML/';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This property will be monkey-patched on elements, components and directives\n */\nconst MONKEY_PATCH_KEY_NAME = '__ngContext__';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Most of the use of `document` in Angular is from within the DI system so it is possible to simply\n * inject the `DOCUMENT` token and are done.\n *\n * Ivy is special because it does not rely upon the DI and must get hold of the document some other\n * way.\n *\n * The solution is to define `getDocument()` and `setDocument()` top-level functions for ivy.\n * Wherever ivy needs the global document, it calls `getDocument()` instead.\n *\n * When running ivy outside of a browser environment, it is necessary to call `setDocument()` to\n * tell ivy what the global `document` is.\n *\n * Angular does this for us in each of the standard platforms (`Browser`, `Server`, and `WebWorker`)\n * by calling `setDocument()` when providing the `DOCUMENT` token.\n */\nlet DOCUMENT = undefined;\n/**\n * Tell ivy what the `document` is for this platform.\n *\n * It is only necessary to call this if the current platform is not a browser.\n *\n * @param document The object representing the global `document` in this environment.\n */\nfunction setDocument(document) {\n DOCUMENT = document;\n}\n/**\n * Access the object that represents the `document` for this platform.\n *\n * Ivy calls this whenever it needs to access the `document` object.\n * For example to create the renderer or to do sanitization.\n */\nfunction getDocument() {\n if (DOCUMENT !== undefined) {\n return DOCUMENT;\n }\n else if (typeof document !== 'undefined') {\n return document;\n }\n // No \"document\" can be found. This should only happen if we are running ivy outside Angular and\n // the current platform is not a browser. Since this is not a supported scenario at the moment\n // this should not happen in Angular apps.\n // Once we support running ivy outside of Angular we will need to publish `setDocument()` as a\n // public API. Meanwhile we just return `undefined` and let the application fail.\n return undefined;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO: cleanup once the code is merged in angular/angular\nvar RendererStyleFlags3;\n(function (RendererStyleFlags3) {\n RendererStyleFlags3[RendererStyleFlags3[\"Important\"] = 1] = \"Important\";\n RendererStyleFlags3[RendererStyleFlags3[\"DashCase\"] = 2] = \"DashCase\";\n})(RendererStyleFlags3 || (RendererStyleFlags3 = {}));\n/** Returns whether the `renderer` is a `ProceduralRenderer3` */\nfunction isProceduralRenderer(renderer) {\n return !!(renderer.listen);\n}\nconst ɵ0 = (hostElement, rendererType) => {\n return getDocument();\n};\nconst domRendererFactory3 = {\n createRenderer: ɵ0\n};\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$2 = 1;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`)\n * in same location in `LView`. This is because we don't want to pre-allocate space for it\n * because the storage is sparse. This file contains utilities for dealing with such data types.\n *\n * How do we know what is stored at a given location in `LView`.\n * - `Array.isArray(value) === false` => `RNode` (The normal storage value)\n * - `Array.isArray(value) === true` => then the `value[0]` represents the wrapped value.\n * - `typeof value[TYPE] === 'object'` => `LView`\n * - This happens when we have a component at a given location\n * - `typeof value[TYPE] === true` => `LContainer`\n * - This happens when we have `LContainer` binding at a given location.\n *\n *\n * NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient.\n */\n/**\n * Returns `RNode`.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapRNode(value) {\n while (Array.isArray(value)) {\n value = value[HOST];\n }\n return value;\n}\n/**\n * Returns `LView` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLView(value) {\n while (Array.isArray(value)) {\n // This check is same as `isLView()` but we don't call at as we don't want to call\n // `Array.isArray()` twice and give JITer more work for inlining.\n if (typeof value[TYPE] === 'object')\n return value;\n value = value[HOST];\n }\n return null;\n}\n/**\n * Returns `LContainer` or `null` if not found.\n * @param value wrapped value of `RNode`, `LView`, `LContainer`\n */\nfunction unwrapLContainer(value) {\n while (Array.isArray(value)) {\n // This check is same as `isLContainer()` but we don't call at as we don't want to call\n // `Array.isArray()` twice and give JITer more work for inlining.\n if (value[TYPE] === true)\n return value;\n value = value[HOST];\n }\n return null;\n}\n/**\n * Retrieves an element value from the provided `viewData`, by unwrapping\n * from any containers, component views, or style contexts.\n */\nfunction getNativeByIndex(index, lView) {\n ngDevMode && assertIndexInRange(lView, index);\n ngDevMode && assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Expected to be past HEADER_OFFSET');\n return unwrapRNode(lView[index]);\n}\n/**\n * Retrieve an `RNode` for a given `TNode` and `LView`.\n *\n * This function guarantees in dev mode to retrieve a non-null `RNode`.\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNode(tNode, lView) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n ngDevMode && assertIndexInRange(lView, tNode.index);\n const node = unwrapRNode(lView[tNode.index]);\n ngDevMode && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);\n return node;\n}\n/**\n * Retrieve an `RNode` or `null` for a given `TNode` and `LView`.\n *\n * Some `TNode`s don't have associated `RNode`s. For example `Projection`\n *\n * @param tNode\n * @param lView\n */\nfunction getNativeByTNodeOrNull(tNode, lView) {\n const index = tNode === null ? -1 : tNode.index;\n if (index !== -1) {\n ngDevMode && assertTNodeForLView(tNode, lView);\n const node = unwrapRNode(lView[index]);\n ngDevMode && node !== null && !isProceduralRenderer(lView[RENDERER]) && assertDomNode(node);\n return node;\n }\n return null;\n}\n// fixme(misko): The return Type should be `TNode|null`\nfunction getTNode(tView, index) {\n ngDevMode && assertGreaterThan(index, -1, 'wrong index for TNode');\n ngDevMode && assertLessThan(index, tView.data.length, 'wrong index for TNode');\n const tNode = tView.data[index];\n ngDevMode && tNode !== null && assertTNode(tNode);\n return tNode;\n}\n/** Retrieves a value from any `LView` or `TData`. */\nfunction load(view, index) {\n ngDevMode && assertIndexInRange(view, index);\n return view[index];\n}\nfunction getComponentLViewByIndex(nodeIndex, hostView) {\n // Could be an LView or an LContainer. If LContainer, unwrap to find LView.\n ngDevMode && assertIndexInRange(hostView, nodeIndex);\n const slotValue = hostView[nodeIndex];\n const lView = isLView(slotValue) ? slotValue : slotValue[HOST];\n return lView;\n}\n/**\n * Returns the monkey-patch value data present on the target (which could be\n * a component, directive or a DOM node).\n */\nfunction readPatchedData(target) {\n ngDevMode && assertDefined(target, 'Target expected');\n return target[MONKEY_PATCH_KEY_NAME] || null;\n}\nfunction readPatchedLView(target) {\n const value = readPatchedData(target);\n if (value) {\n return Array.isArray(value) ? value : value.lView;\n }\n return null;\n}\n/** Checks whether a given view is in creation mode */\nfunction isCreationMode(view) {\n return (view[FLAGS] & 4 /* CreationMode */) === 4 /* CreationMode */;\n}\n/**\n * Returns a boolean for whether the view is attached to the change detection tree.\n *\n * Note: This determines whether a view should be checked, not whether it's inserted\n * into a container. For that, you'll want `viewAttachedToContainer` below.\n */\nfunction viewAttachedToChangeDetector(view) {\n return (view[FLAGS] & 128 /* Attached */) === 128 /* Attached */;\n}\n/** Returns a boolean for whether the view is attached to a container. */\nfunction viewAttachedToContainer(view) {\n return isLContainer(view[PARENT]);\n}\nfunction getConstant(consts, index) {\n if (index === null || index === undefined)\n return null;\n ngDevMode && assertIndexInRange(consts, index);\n return consts[index];\n}\n/**\n * Resets the pre-order hook flags of the view.\n * @param lView the LView on which the flags are reset\n */\nfunction resetPreOrderHookFlags(lView) {\n lView[PREORDER_HOOK_FLAGS] = 0;\n}\n/**\n * Updates the `TRANSPLANTED_VIEWS_TO_REFRESH` counter on the `LContainer` as well as the parents\n * whose\n * 1. counter goes from 0 to 1, indicating that there is a new child that has a view to refresh\n * or\n * 2. counter goes from 1 to 0, indicating there are no more descendant views to refresh\n */\nfunction updateTransplantedViewCount(lContainer, amount) {\n lContainer[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;\n let viewOrContainer = lContainer;\n let parent = lContainer[PARENT];\n while (parent !== null &&\n ((amount === 1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 1) ||\n (amount === -1 && viewOrContainer[TRANSPLANTED_VIEWS_TO_REFRESH] === 0))) {\n parent[TRANSPLANTED_VIEWS_TO_REFRESH] += amount;\n viewOrContainer = parent;\n parent = parent[PARENT];\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst instructionState = {\n lFrame: createLFrame(null),\n bindingsEnabled: true,\n isInCheckNoChangesMode: false,\n};\n/**\n * Returns true if the instruction state stack is empty.\n *\n * Intended to be called from tests only (tree shaken otherwise).\n */\nfunction specOnlyIsInstructionStateEmpty() {\n return instructionState.lFrame.parent === null;\n}\nfunction getElementDepthCount() {\n return instructionState.lFrame.elementDepthCount;\n}\nfunction increaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount++;\n}\nfunction decreaseElementDepthCount() {\n instructionState.lFrame.elementDepthCount--;\n}\nfunction getBindingsEnabled() {\n return instructionState.bindingsEnabled;\n}\n/**\n * Enables directive matching on elements.\n *\n * * Example:\n * ```\n * \n * Should match component / directive.\n * \n *
    \n * \n * \n * Should not match component / directive because we are in ngNonBindable.\n * \n * \n *
    \n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵenableBindings() {\n instructionState.bindingsEnabled = true;\n}\n/**\n * Disables directive matching on element.\n *\n * * Example:\n * ```\n * \n * Should match component / directive.\n * \n *
    \n * \n * \n * Should not match component / directive because we are in ngNonBindable.\n * \n * \n *
    \n * ```\n *\n * @codeGenApi\n */\nfunction ɵɵdisableBindings() {\n instructionState.bindingsEnabled = false;\n}\n/**\n * Return the current `LView`.\n */\nfunction getLView() {\n return instructionState.lFrame.lView;\n}\n/**\n * Return the current `TView`.\n */\nfunction getTView() {\n return instructionState.lFrame.tView;\n}\n/**\n * Restores `contextViewData` to the given OpaqueViewState instance.\n *\n * Used in conjunction with the getCurrentView() instruction to save a snapshot\n * of the current view and restore it when listeners are invoked. This allows\n * walking the declaration view tree in listeners to get vars from parent views.\n *\n * @param viewToRestore The OpaqueViewState instance to restore.\n *\n * @codeGenApi\n */\nfunction ɵɵrestoreView(viewToRestore) {\n instructionState.lFrame.contextLView = viewToRestore;\n}\nfunction getCurrentTNode() {\n let currentTNode = getCurrentTNodePlaceholderOk();\n while (currentTNode !== null && currentTNode.type === 64 /* Placeholder */) {\n currentTNode = currentTNode.parent;\n }\n return currentTNode;\n}\nfunction getCurrentTNodePlaceholderOk() {\n return instructionState.lFrame.currentTNode;\n}\nfunction getCurrentParentTNode() {\n const lFrame = instructionState.lFrame;\n const currentTNode = lFrame.currentTNode;\n return lFrame.isParent ? currentTNode : currentTNode.parent;\n}\nfunction setCurrentTNode(tNode, isParent) {\n ngDevMode && tNode && assertTNodeForTView(tNode, instructionState.lFrame.tView);\n const lFrame = instructionState.lFrame;\n lFrame.currentTNode = tNode;\n lFrame.isParent = isParent;\n}\nfunction isCurrentTNodeParent() {\n return instructionState.lFrame.isParent;\n}\nfunction setCurrentTNodeAsNotParent() {\n instructionState.lFrame.isParent = false;\n}\nfunction setCurrentTNodeAsParent() {\n instructionState.lFrame.isParent = true;\n}\nfunction getContextLView() {\n return instructionState.lFrame.contextLView;\n}\nfunction isInCheckNoChangesMode() {\n // TODO(misko): remove this from the LView since it is ngDevMode=true mode only.\n return instructionState.isInCheckNoChangesMode;\n}\nfunction setIsInCheckNoChangesMode(mode) {\n instructionState.isInCheckNoChangesMode = mode;\n}\n// top level variables should not be exported for performance reasons (PERF_NOTES.md)\nfunction getBindingRoot() {\n const lFrame = instructionState.lFrame;\n let index = lFrame.bindingRootIndex;\n if (index === -1) {\n index = lFrame.bindingRootIndex = lFrame.tView.bindingStartIndex;\n }\n return index;\n}\nfunction getBindingIndex() {\n return instructionState.lFrame.bindingIndex;\n}\nfunction setBindingIndex(value) {\n return instructionState.lFrame.bindingIndex = value;\n}\nfunction nextBindingIndex() {\n return instructionState.lFrame.bindingIndex++;\n}\nfunction incrementBindingIndex(count) {\n const lFrame = instructionState.lFrame;\n const index = lFrame.bindingIndex;\n lFrame.bindingIndex = lFrame.bindingIndex + count;\n return index;\n}\nfunction isInI18nBlock() {\n return instructionState.lFrame.inI18n;\n}\nfunction setInI18nBlock(isInI18nBlock) {\n instructionState.lFrame.inI18n = isInI18nBlock;\n}\n/**\n * Set a new binding root index so that host template functions can execute.\n *\n * Bindings inside the host template are 0 index. But because we don't know ahead of time\n * how many host bindings we have we can't pre-compute them. For this reason they are all\n * 0 index and we just shift the root so that they match next available location in the LView.\n *\n * @param bindingRootIndex Root index for `hostBindings`\n * @param currentDirectiveIndex `TData[currentDirectiveIndex]` will point to the current directive\n * whose `hostBindings` are being processed.\n */\nfunction setBindingRootForHostBindings(bindingRootIndex, currentDirectiveIndex) {\n const lFrame = instructionState.lFrame;\n lFrame.bindingIndex = lFrame.bindingRootIndex = bindingRootIndex;\n setCurrentDirectiveIndex(currentDirectiveIndex);\n}\n/**\n * When host binding is executing this points to the directive index.\n * `TView.data[getCurrentDirectiveIndex()]` is `DirectiveDef`\n * `LView[getCurrentDirectiveIndex()]` is directive instance.\n */\nfunction getCurrentDirectiveIndex() {\n return instructionState.lFrame.currentDirectiveIndex;\n}\n/**\n * Sets an index of a directive whose `hostBindings` are being processed.\n *\n * @param currentDirectiveIndex `TData` index where current directive instance can be found.\n */\nfunction setCurrentDirectiveIndex(currentDirectiveIndex) {\n instructionState.lFrame.currentDirectiveIndex = currentDirectiveIndex;\n}\n/**\n * Retrieve the current `DirectiveDef` which is active when `hostBindings` instruction is being\n * executed.\n *\n * @param tData Current `TData` where the `DirectiveDef` will be looked up at.\n */\nfunction getCurrentDirectiveDef(tData) {\n const currentDirectiveIndex = instructionState.lFrame.currentDirectiveIndex;\n return currentDirectiveIndex === -1 ? null : tData[currentDirectiveIndex];\n}\nfunction getCurrentQueryIndex() {\n return instructionState.lFrame.currentQueryIndex;\n}\nfunction setCurrentQueryIndex(value) {\n instructionState.lFrame.currentQueryIndex = value;\n}\n/**\n * Returns a `TNode` of the location where the current `LView` is declared at.\n *\n * @param lView an `LView` that we want to find parent `TNode` for.\n */\nfunction getDeclarationTNode(lView) {\n const tView = lView[TVIEW];\n // Return the declaration parent for embedded views\n if (tView.type === 2 /* Embedded */) {\n ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n return tView.declTNode;\n }\n // Components don't have `TView.declTNode` because each instance of component could be\n // inserted in different location, hence `TView.declTNode` is meaningless.\n // Falling back to `T_HOST` in case we cross component boundary.\n if (tView.type === 1 /* Component */) {\n return lView[T_HOST];\n }\n // Remaining TNode type is `TViewType.Root` which doesn't have a parent TNode.\n return null;\n}\n/**\n * This is a light weight version of the `enterView` which is needed by the DI system.\n *\n * @param lView `LView` location of the DI context.\n * @param tNode `TNode` for DI context\n * @param flags DI context flags. if `SkipSelf` flag is set than we walk up the declaration\n * tree from `tNode` until we find parent declared `TElementNode`.\n * @returns `true` if we have successfully entered DI associated with `tNode` (or with declared\n * `TNode` if `flags` has `SkipSelf`). Failing to enter DI implies that no associated\n * `NodeInjector` can be found and we should instead use `ModuleInjector`.\n * - If `true` than this call must be fallowed by `leaveDI`\n * - If `false` than this call failed and we should NOT call `leaveDI`\n */\nfunction enterDI(lView, tNode, flags) {\n ngDevMode && assertLViewOrUndefined(lView);\n if (flags & InjectFlags.SkipSelf) {\n ngDevMode && assertTNodeForTView(tNode, lView[TVIEW]);\n let parentTNode = tNode;\n let parentLView = lView;\n while (true) {\n ngDevMode && assertDefined(parentTNode, 'Parent TNode should be defined');\n parentTNode = parentTNode.parent;\n if (parentTNode === null && !(flags & InjectFlags.Host)) {\n parentTNode = getDeclarationTNode(parentLView);\n if (parentTNode === null)\n break;\n // In this case, a parent exists and is definitely an element. So it will definitely\n // have an existing lView as the declaration view, which is why we can assume it's defined.\n ngDevMode && assertDefined(parentLView, 'Parent LView should be defined');\n parentLView = parentLView[DECLARATION_VIEW];\n // In Ivy there are Comment nodes that correspond to ngIf and NgFor embedded directives\n // We want to skip those and look only at Elements and ElementContainers to ensure\n // we're looking at true parent nodes, and not content or other types.\n if (parentTNode.type & (2 /* Element */ | 8 /* ElementContainer */)) {\n break;\n }\n }\n else {\n break;\n }\n }\n if (parentTNode === null) {\n // If we failed to find a parent TNode this means that we should use module injector.\n return false;\n }\n else {\n tNode = parentTNode;\n lView = parentLView;\n }\n }\n ngDevMode && assertTNodeForLView(tNode, lView);\n const lFrame = instructionState.lFrame = allocLFrame();\n lFrame.currentTNode = tNode;\n lFrame.lView = lView;\n return true;\n}\n/**\n * Swap the current lView with a new lView.\n *\n * For performance reasons we store the lView in the top level of the module.\n * This way we minimize the number of properties to read. Whenever a new view\n * is entered we have to store the lView for later, and when the view is\n * exited the state has to be restored\n *\n * @param newView New lView to become active\n * @returns the previously active lView;\n */\nfunction enterView(newView) {\n ngDevMode && assertNotEqual(newView[0], newView[1], '????');\n ngDevMode && assertLViewOrUndefined(newView);\n const newLFrame = allocLFrame();\n if (ngDevMode) {\n assertEqual(newLFrame.isParent, true, 'Expected clean LFrame');\n assertEqual(newLFrame.lView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.tView, null, 'Expected clean LFrame');\n assertEqual(newLFrame.selectedIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.elementDepthCount, 0, 'Expected clean LFrame');\n assertEqual(newLFrame.currentDirectiveIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentNamespace, null, 'Expected clean LFrame');\n assertEqual(newLFrame.bindingRootIndex, -1, 'Expected clean LFrame');\n assertEqual(newLFrame.currentQueryIndex, 0, 'Expected clean LFrame');\n }\n const tView = newView[TVIEW];\n instructionState.lFrame = newLFrame;\n ngDevMode && tView.firstChild && assertTNodeForTView(tView.firstChild, tView);\n newLFrame.currentTNode = tView.firstChild;\n newLFrame.lView = newView;\n newLFrame.tView = tView;\n newLFrame.contextLView = newView;\n newLFrame.bindingIndex = tView.bindingStartIndex;\n newLFrame.inI18n = false;\n}\n/**\n * Allocates next free LFrame. This function tries to reuse the `LFrame`s to lower memory pressure.\n */\nfunction allocLFrame() {\n const currentLFrame = instructionState.lFrame;\n const childLFrame = currentLFrame === null ? null : currentLFrame.child;\n const newLFrame = childLFrame === null ? createLFrame(currentLFrame) : childLFrame;\n return newLFrame;\n}\nfunction createLFrame(parent) {\n const lFrame = {\n currentTNode: null,\n isParent: true,\n lView: null,\n tView: null,\n selectedIndex: -1,\n contextLView: null,\n elementDepthCount: 0,\n currentNamespace: null,\n currentDirectiveIndex: -1,\n bindingRootIndex: -1,\n bindingIndex: -1,\n currentQueryIndex: 0,\n parent: parent,\n child: null,\n inI18n: false,\n };\n parent !== null && (parent.child = lFrame); // link the new LFrame for reuse.\n return lFrame;\n}\n/**\n * A lightweight version of leave which is used with DI.\n *\n * This function only resets `currentTNode` and `LView` as those are the only properties\n * used with DI (`enterDI()`).\n *\n * NOTE: This function is reexported as `leaveDI`. However `leaveDI` has return type of `void` where\n * as `leaveViewLight` has `LFrame`. This is so that `leaveViewLight` can be used in `leaveView`.\n */\nfunction leaveViewLight() {\n const oldLFrame = instructionState.lFrame;\n instructionState.lFrame = oldLFrame.parent;\n oldLFrame.currentTNode = null;\n oldLFrame.lView = null;\n return oldLFrame;\n}\n/**\n * This is a lightweight version of the `leaveView` which is needed by the DI system.\n *\n * NOTE: this function is an alias so that we can change the type of the function to have `void`\n * return type.\n */\nconst leaveDI = leaveViewLight;\n/**\n * Leave the current `LView`\n *\n * This pops the `LFrame` with the associated `LView` from the stack.\n *\n * IMPORTANT: We must zero out the `LFrame` values here otherwise they will be retained. This is\n * because for performance reasons we don't release `LFrame` but rather keep it for next use.\n */\nfunction leaveView() {\n const oldLFrame = leaveViewLight();\n oldLFrame.isParent = true;\n oldLFrame.tView = null;\n oldLFrame.selectedIndex = -1;\n oldLFrame.contextLView = null;\n oldLFrame.elementDepthCount = 0;\n oldLFrame.currentDirectiveIndex = -1;\n oldLFrame.currentNamespace = null;\n oldLFrame.bindingRootIndex = -1;\n oldLFrame.bindingIndex = -1;\n oldLFrame.currentQueryIndex = 0;\n}\nfunction nextContextImpl(level) {\n const contextLView = instructionState.lFrame.contextLView =\n walkUpViews(level, instructionState.lFrame.contextLView);\n return contextLView[CONTEXT];\n}\nfunction walkUpViews(nestingLevel, currentView) {\n while (nestingLevel > 0) {\n ngDevMode &&\n assertDefined(currentView[DECLARATION_VIEW], 'Declaration view should be defined if nesting level is greater than 0.');\n currentView = currentView[DECLARATION_VIEW];\n nestingLevel--;\n }\n return currentView;\n}\n/**\n * Gets the currently selected element index.\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n */\nfunction getSelectedIndex() {\n return instructionState.lFrame.selectedIndex;\n}\n/**\n * Sets the most recent index passed to {@link select}\n *\n * Used with {@link property} instruction (and more in the future) to identify the index in the\n * current `LView` to act on.\n *\n * (Note that if an \"exit function\" was set earlier (via `setElementExitFn()`) then that will be\n * run if and when the provided `index` value is different from the current selected index value.)\n */\nfunction setSelectedIndex(index) {\n ngDevMode && index !== -1 &&\n assertGreaterThanOrEqual(index, HEADER_OFFSET, 'Index must be past HEADER_OFFSET (or -1).');\n ngDevMode &&\n assertLessThan(index, instructionState.lFrame.lView.length, 'Can\\'t set index passed end of LView');\n instructionState.lFrame.selectedIndex = index;\n}\n/**\n * Gets the `tNode` that represents currently selected element.\n */\nfunction getSelectedTNode() {\n const lFrame = instructionState.lFrame;\n return getTNode(lFrame.tView, lFrame.selectedIndex);\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceSVG() {\n instructionState.lFrame.currentNamespace = SVG_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceMathML() {\n instructionState.lFrame.currentNamespace = MATH_ML_NAMESPACE;\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n *\n * @codeGenApi\n */\nfunction ɵɵnamespaceHTML() {\n namespaceHTMLInternal();\n}\n/**\n * Sets the namespace used to create elements to `null`, which forces element creation to use\n * `createElement` rather than `createElementNS`.\n */\nfunction namespaceHTMLInternal() {\n instructionState.lFrame.currentNamespace = null;\n}\nfunction getNamespace() {\n return instructionState.lFrame.currentNamespace;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Adds all directive lifecycle hooks from the given `DirectiveDef` to the given `TView`.\n *\n * Must be run *only* on the first template pass.\n *\n * Sets up the pre-order hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * @param directiveIndex The index of the directive in LView\n * @param directiveDef The definition containing the hooks to setup in tView\n * @param tView The current TView\n */\nfunction registerPreOrderHooks(directiveIndex, directiveDef, tView) {\n ngDevMode && assertFirstCreatePass(tView);\n const { ngOnChanges, ngOnInit, ngDoCheck } = directiveDef.type.prototype;\n if (ngOnChanges) {\n const wrappedOnChanges = NgOnChangesFeatureImpl(directiveDef);\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, wrappedOnChanges);\n (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = []))\n .push(directiveIndex, wrappedOnChanges);\n }\n if (ngOnInit) {\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(0 - directiveIndex, ngOnInit);\n }\n if (ngDoCheck) {\n (tView.preOrderHooks || (tView.preOrderHooks = [])).push(directiveIndex, ngDoCheck);\n (tView.preOrderCheckHooks || (tView.preOrderCheckHooks = [])).push(directiveIndex, ngDoCheck);\n }\n}\n/**\n *\n * Loops through the directives on the provided `tNode` and queues hooks to be\n * run that are not initialization hooks.\n *\n * Should be executed during `elementEnd()` and similar to\n * preserve hook execution order. Content, view, and destroy hooks for projected\n * components and directives must be called *before* their hosts.\n *\n * Sets up the content, view, and destroy hooks on the provided `tView`,\n * see {@link HookData} for details about the data structure.\n *\n * NOTE: This does not set up `onChanges`, `onInit` or `doCheck`, those are set up\n * separately at `elementStart`.\n *\n * @param tView The current TView\n * @param tNode The TNode whose directives are to be searched for hooks to queue\n */\nfunction registerPostOrderHooks(tView, tNode) {\n ngDevMode && assertFirstCreatePass(tView);\n // It's necessary to loop through the directives at elementEnd() (rather than processing in\n // directiveCreate) so we can preserve the current hook order. Content, view, and destroy\n // hooks for projected components and directives must be called *before* their hosts.\n for (let i = tNode.directiveStart, end = tNode.directiveEnd; i < end; i++) {\n const directiveDef = tView.data[i];\n ngDevMode && assertDefined(directiveDef, 'Expecting DirectiveDef');\n const lifecycleHooks = directiveDef.type.prototype;\n const { ngAfterContentInit, ngAfterContentChecked, ngAfterViewInit, ngAfterViewChecked, ngOnDestroy } = lifecycleHooks;\n if (ngAfterContentInit) {\n (tView.contentHooks || (tView.contentHooks = [])).push(-i, ngAfterContentInit);\n }\n if (ngAfterContentChecked) {\n (tView.contentHooks || (tView.contentHooks = [])).push(i, ngAfterContentChecked);\n (tView.contentCheckHooks || (tView.contentCheckHooks = [])).push(i, ngAfterContentChecked);\n }\n if (ngAfterViewInit) {\n (tView.viewHooks || (tView.viewHooks = [])).push(-i, ngAfterViewInit);\n }\n if (ngAfterViewChecked) {\n (tView.viewHooks || (tView.viewHooks = [])).push(i, ngAfterViewChecked);\n (tView.viewCheckHooks || (tView.viewCheckHooks = [])).push(i, ngAfterViewChecked);\n }\n if (ngOnDestroy != null) {\n (tView.destroyHooks || (tView.destroyHooks = [])).push(i, ngOnDestroy);\n }\n }\n}\n/**\n * Executing hooks requires complex logic as we need to deal with 2 constraints.\n *\n * 1. Init hooks (ngOnInit, ngAfterContentInit, ngAfterViewInit) must all be executed once and only\n * once, across many change detection cycles. This must be true even if some hooks throw, or if\n * some recursively trigger a change detection cycle.\n * To solve that, it is required to track the state of the execution of these init hooks.\n * This is done by storing and maintaining flags in the view: the {@link InitPhaseState},\n * and the index within that phase. They can be seen as a cursor in the following structure:\n * [[onInit1, onInit2], [afterContentInit1], [afterViewInit1, afterViewInit2, afterViewInit3]]\n * They are are stored as flags in LView[FLAGS].\n *\n * 2. Pre-order hooks can be executed in batches, because of the select instruction.\n * To be able to pause and resume their execution, we also need some state about the hook's array\n * that is being processed:\n * - the index of the next hook to be executed\n * - the number of init hooks already found in the processed part of the array\n * They are are stored as flags in LView[PREORDER_HOOK_FLAGS].\n */\n/**\n * Executes pre-order check hooks ( OnChanges, DoChanges) given a view where all the init hooks were\n * executed once. This is a light version of executeInitAndCheckPreOrderHooks where we can skip read\n * / write of the init-hooks related flags.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeCheckHooks(lView, hooks, nodeIndex) {\n callHooks(lView, hooks, 3 /* InitPhaseCompleted */, nodeIndex);\n}\n/**\n * Executes post-order init and check hooks (one of AfterContentInit, AfterContentChecked,\n * AfterViewInit, AfterViewChecked) given a view where there are pending init hooks to be executed.\n * @param lView The LView where hooks are defined\n * @param hooks Hooks to be run\n * @param initPhase A phase for which hooks should be run\n * @param nodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction executeInitAndCheckHooks(lView, hooks, initPhase, nodeIndex) {\n ngDevMode &&\n assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init pre-order hooks should not be called more than once');\n if ((lView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {\n callHooks(lView, hooks, initPhase, nodeIndex);\n }\n}\nfunction incrementInitPhaseFlags(lView, initPhase) {\n ngDevMode &&\n assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');\n let flags = lView[FLAGS];\n if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {\n flags &= 2047 /* IndexWithinInitPhaseReset */;\n flags += 1 /* InitPhaseStateIncrementer */;\n lView[FLAGS] = flags;\n }\n}\n/**\n * Calls lifecycle hooks with their contexts, skipping init hooks if it's not\n * the first LView pass\n *\n * @param currentView The current view\n * @param arr The array in which the hooks are found\n * @param initPhaseState the current state of the init phase\n * @param currentNodeIndex 3 cases depending on the value:\n * - undefined: all hooks from the array should be executed (post-order case)\n * - null: execute hooks only from the saved index until the end of the array (pre-order case, when\n * flushing the remaining hooks)\n * - number: execute hooks only from the saved index until that node index exclusive (pre-order\n * case, when executing select(number))\n */\nfunction callHooks(currentView, arr, initPhase, currentNodeIndex) {\n ngDevMode &&\n assertEqual(isInCheckNoChangesMode(), false, 'Hooks should never be run when in check no changes mode.');\n const startIndex = currentNodeIndex !== undefined ?\n (currentView[PREORDER_HOOK_FLAGS] & 65535 /* IndexOfTheNextPreOrderHookMaskMask */) :\n 0;\n const nodeIndexLimit = currentNodeIndex != null ? currentNodeIndex : -1;\n let lastNodeIndexFound = 0;\n for (let i = startIndex; i < arr.length; i++) {\n const hook = arr[i + 1];\n if (typeof hook === 'number') {\n lastNodeIndexFound = arr[i];\n if (currentNodeIndex != null && lastNodeIndexFound >= currentNodeIndex) {\n break;\n }\n }\n else {\n const isInitHook = arr[i] < 0;\n if (isInitHook)\n currentView[PREORDER_HOOK_FLAGS] += 65536 /* NumberOfInitHooksCalledIncrementer */;\n if (lastNodeIndexFound < nodeIndexLimit || nodeIndexLimit == -1) {\n callHook(currentView, initPhase, arr, i);\n currentView[PREORDER_HOOK_FLAGS] =\n (currentView[PREORDER_HOOK_FLAGS] & 4294901760 /* NumberOfInitHooksCalledMask */) + i +\n 2;\n }\n i++;\n }\n }\n}\n/**\n * Execute one hook against the current `LView`.\n *\n * @param currentView The current view\n * @param initPhaseState the current state of the init phase\n * @param arr The array in which the hooks are found\n * @param i The current index within the hook data array\n */\nfunction callHook(currentView, initPhase, arr, i) {\n const isInitHook = arr[i] < 0;\n const hook = arr[i + 1];\n const directiveIndex = isInitHook ? -arr[i] : arr[i];\n const directive = currentView[directiveIndex];\n if (isInitHook) {\n const indexWithintInitPhase = currentView[FLAGS] >> 11 /* IndexWithinInitPhaseShift */;\n // The init phase state must be always checked here as it may have been recursively\n // updated\n if (indexWithintInitPhase <\n (currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&\n (currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {\n currentView[FLAGS] += 2048 /* IndexWithinInitPhaseIncrementer */;\n hook.call(directive);\n }\n }\n else {\n hook.call(directive);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst NO_PARENT_INJECTOR = -1;\n/**\n * Each injector is saved in 9 contiguous slots in `LView` and 9 contiguous slots in\n * `TView.data`. This allows us to store information about the current node's tokens (which\n * can be shared in `TView`) as well as the tokens of its ancestor nodes (which cannot be\n * shared, so they live in `LView`).\n *\n * Each of these slots (aside from the last slot) contains a bloom filter. This bloom filter\n * determines whether a directive is available on the associated node or not. This prevents us\n * from searching the directives array at this level unless it's probable the directive is in it.\n *\n * See: https://en.wikipedia.org/wiki/Bloom_filter for more about bloom filters.\n *\n * Because all injectors have been flattened into `LView` and `TViewData`, they cannot typed\n * using interfaces as they were previously. The start index of each `LInjector` and `TInjector`\n * will differ based on where it is flattened into the main array, so it's not possible to know\n * the indices ahead of time and save their types here. The interfaces are still included here\n * for documentation purposes.\n *\n * export interface LInjector extends Array {\n *\n * // Cumulative bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)\n * [0]: number;\n *\n * // Cumulative bloom for directive IDs 32-63\n * [1]: number;\n *\n * // Cumulative bloom for directive IDs 64-95\n * [2]: number;\n *\n * // Cumulative bloom for directive IDs 96-127\n * [3]: number;\n *\n * // Cumulative bloom for directive IDs 128-159\n * [4]: number;\n *\n * // Cumulative bloom for directive IDs 160 - 191\n * [5]: number;\n *\n * // Cumulative bloom for directive IDs 192 - 223\n * [6]: number;\n *\n * // Cumulative bloom for directive IDs 224 - 255\n * [7]: number;\n *\n * // We need to store a reference to the injector's parent so DI can keep looking up\n * // the injector tree until it finds the dependency it's looking for.\n * [PARENT_INJECTOR]: number;\n * }\n *\n * export interface TInjector extends Array {\n *\n * // Shared node bloom for directive IDs 0-31 (IDs are % BLOOM_SIZE)\n * [0]: number;\n *\n * // Shared node bloom for directive IDs 32-63\n * [1]: number;\n *\n * // Shared node bloom for directive IDs 64-95\n * [2]: number;\n *\n * // Shared node bloom for directive IDs 96-127\n * [3]: number;\n *\n * // Shared node bloom for directive IDs 128-159\n * [4]: number;\n *\n * // Shared node bloom for directive IDs 160 - 191\n * [5]: number;\n *\n * // Shared node bloom for directive IDs 192 - 223\n * [6]: number;\n *\n * // Shared node bloom for directive IDs 224 - 255\n * [7]: number;\n *\n * // Necessary to find directive indices for a particular node.\n * [TNODE]: TElementNode|TElementContainerNode|TContainerNode;\n * }\n */\n/**\n * Factory for creating instances of injectors in the NodeInjector.\n *\n * This factory is complicated by the fact that it can resolve `multi` factories as well.\n *\n * NOTE: Some of the fields are optional which means that this class has two hidden classes.\n * - One without `multi` support (most common)\n * - One with `multi` values, (rare).\n *\n * Since VMs can cache up to 4 inline hidden classes this is OK.\n *\n * - Single factory: Only `resolving` and `factory` is defined.\n * - `providers` factory: `componentProviders` is a number and `index = -1`.\n * - `viewProviders` factory: `componentProviders` is a number and `index` points to `providers`.\n */\nclass NodeInjectorFactory {\n constructor(\n /**\n * Factory to invoke in order to create a new instance.\n */\n factory, \n /**\n * Set to `true` if the token is declared in `viewProviders` (or if it is component).\n */\n isViewProvider, injectImplementation) {\n this.factory = factory;\n /**\n * Marker set to true during factory invocation to see if we get into recursive loop.\n * Recursive loop causes an error to be displayed.\n */\n this.resolving = false;\n ngDevMode && assertDefined(factory, 'Factory not specified');\n ngDevMode && assertEqual(typeof factory, 'function', 'Expected factory function.');\n this.canSeeViewProviders = isViewProvider;\n this.injectImpl = injectImplementation;\n }\n}\nfunction isFactory(obj) {\n return obj instanceof NodeInjectorFactory;\n}\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$3 = 1;\n\n/**\n * Converts `TNodeType` into human readable text.\n * Make sure this matches with `TNodeType`\n */\nfunction toTNodeTypeAsString(tNodeType) {\n let text = '';\n (tNodeType & 1 /* Text */) && (text += '|Text');\n (tNodeType & 2 /* Element */) && (text += '|Element');\n (tNodeType & 4 /* Container */) && (text += '|Container');\n (tNodeType & 8 /* ElementContainer */) && (text += '|ElementContainer');\n (tNodeType & 16 /* Projection */) && (text += '|Projection');\n (tNodeType & 32 /* Icu */) && (text += '|IcuContainer');\n (tNodeType & 64 /* Placeholder */) && (text += '|Placeholder');\n return text.length > 0 ? text.substring(1) : text;\n}\n// Note: This hack is necessary so we don't erroneously get a circular dependency\n// failure based on types.\nconst unusedValueExportToPlacateAjd$4 = 1;\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `class` binding.\n *\n * ```\n *
    \n * ```\n * and\n * ```\n * @Directive({\n * })\n * class MyDirective {\n * @Input()\n * class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasClassInput(tNode) {\n return (tNode.flags & 16 /* hasClassInput */) !== 0;\n}\n/**\n * Returns `true` if the `TNode` has a directive which has `@Input()` for `style` binding.\n *\n * ```\n *
    \n * ```\n * and\n * ```\n * @Directive({\n * })\n * class MyDirective {\n * @Input()\n * class: string;\n * }\n * ```\n *\n * In the above case it is necessary to write the reconciled styling information into the\n * directive's input.\n *\n * @param tNode\n */\nfunction hasStyleInput(tNode) {\n return (tNode.flags & 32 /* hasStyleInput */) !== 0;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction assertTNodeType(tNode, expectedTypes, message) {\n assertDefined(tNode, 'should be called with a TNode');\n if ((tNode.type & expectedTypes) === 0) {\n throwError(message ||\n `Expected [${toTNodeTypeAsString(expectedTypes)}] but got ${toTNodeTypeAsString(tNode.type)}.`);\n }\n}\nfunction assertPureTNodeType(type) {\n if (!(type === 2 /* Element */ || //\n type === 1 /* Text */ || //\n type === 4 /* Container */ || //\n type === 8 /* ElementContainer */ || //\n type === 32 /* Icu */ || //\n type === 16 /* Projection */ || //\n type === 64 /* Placeholder */)) {\n throwError(`Expected TNodeType to have only a single type selected, but got ${toTNodeTypeAsString(type)}.`);\n }\n}\n\n/**\n * Assigns all attribute values to the provided element via the inferred renderer.\n *\n * This function accepts two forms of attribute entries:\n *\n * default: (key, value):\n * attrs = [key1, value1, key2, value2]\n *\n * namespaced: (NAMESPACE_MARKER, uri, name, value)\n * attrs = [NAMESPACE_MARKER, uri, name, value, NAMESPACE_MARKER, uri, name, value]\n *\n * The `attrs` array can contain a mix of both the default and namespaced entries.\n * The \"default\" values are set without a marker, but if the function comes across\n * a marker value then it will attempt to set a namespaced value. If the marker is\n * not of a namespaced value then the function will quit and return the index value\n * where it stopped during the iteration of the attrs array.\n *\n * See [AttributeMarker] to understand what the namespace marker value is.\n *\n * Note that this instruction does not support assigning style and class values to\n * an element. See `elementStart` and `elementHostAttrs` to learn how styling values\n * are applied to an element.\n * @param renderer The renderer to be used\n * @param native The element that the attributes will be assigned to\n * @param attrs The attribute array of values that will be assigned to the element\n * @returns the index value that was last accessed in the attributes array\n */\nfunction setUpAttributes(renderer, native, attrs) {\n const isProc = isProceduralRenderer(renderer);\n let i = 0;\n while (i < attrs.length) {\n const value = attrs[i];\n if (typeof value === 'number') {\n // only namespaces are supported. Other value types (such as style/class\n // entries) are not supported in this function.\n if (value !== 0 /* NamespaceURI */) {\n break;\n }\n // we just landed on the marker value ... therefore\n // we should skip to the next entry\n i++;\n const namespaceURI = attrs[i++];\n const attrName = attrs[i++];\n const attrVal = attrs[i++];\n ngDevMode && ngDevMode.rendererSetAttribute++;\n isProc ?\n renderer.setAttribute(native, attrName, attrVal, namespaceURI) :\n native.setAttributeNS(namespaceURI, attrName, attrVal);\n }\n else {\n // attrName is string;\n const attrName = value;\n const attrVal = attrs[++i];\n // Standard attributes\n ngDevMode && ngDevMode.rendererSetAttribute++;\n if (isAnimationProp(attrName)) {\n if (isProc) {\n renderer.setProperty(native, attrName, attrVal);\n }\n }\n else {\n isProc ?\n renderer.setAttribute(native, attrName, attrVal) :\n native.setAttribute(attrName, attrVal);\n }\n i++;\n }\n }\n // another piece of code may iterate over the same attributes array. Therefore\n // it may be helpful to return the exact spot where the attributes array exited\n // whether by running into an unsupported marker or if all the static values were\n // iterated over.\n return i;\n}\n/**\n * Test whether the given value is a marker that indicates that the following\n * attribute values in a `TAttributes` array are only the names of attributes,\n * and not name-value pairs.\n * @param marker The attribute marker to test.\n * @returns true if the marker is a \"name-only\" marker (e.g. `Bindings`, `Template` or `I18n`).\n */\nfunction isNameOnlyAttributeMarker(marker) {\n return marker === 3 /* Bindings */ || marker === 4 /* Template */ ||\n marker === 6 /* I18n */;\n}\nfunction isAnimationProp(name) {\n // Perf note: accessing charCodeAt to check for the first character of a string is faster as\n // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that\n // charCodeAt doesn't allocate memory to return a substring.\n return name.charCodeAt(0) === 64 /* AT_SIGN */;\n}\n/**\n * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.\n *\n * This merge function keeps the order of attrs same.\n *\n * @param dst Location of where the merged `TAttributes` should end up.\n * @param src `TAttributes` which should be appended to `dst`\n */\nfunction mergeHostAttrs(dst, src) {\n if (src === null || src.length === 0) {\n // do nothing\n }\n else if (dst === null || dst.length === 0) {\n // We have source, but dst is empty, just make a copy.\n dst = src.slice();\n }\n else {\n let srcMarker = -1 /* ImplicitAttributes */;\n for (let i = 0; i < src.length; i++) {\n const item = src[i];\n if (typeof item === 'number') {\n srcMarker = item;\n }\n else {\n if (srcMarker === 0 /* NamespaceURI */) {\n // Case where we need to consume `key1`, `key2`, `value` items.\n }\n else if (srcMarker === -1 /* ImplicitAttributes */ ||\n srcMarker === 2 /* Styles */) {\n // Case where we have to consume `key1` and `value` only.\n mergeHostAttribute(dst, srcMarker, item, null, src[++i]);\n }\n else {\n // Case where we have to consume `key1` only.\n mergeHostAttribute(dst, srcMarker, item, null, null);\n }\n }\n }\n }\n return dst;\n}\n/**\n * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.\n *\n * @param dst `TAttributes` to append to.\n * @param marker Region where the `key`/`value` should be added.\n * @param key1 Key to add to `TAttributes`\n * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)\n * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.\n */\nfunction mergeHostAttribute(dst, marker, key1, key2, value) {\n let i = 0;\n // Assume that new markers will be inserted at the end.\n let markerInsertPosition = dst.length;\n // scan until correct type.\n if (marker === -1 /* ImplicitAttributes */) {\n markerInsertPosition = -1;\n }\n else {\n while (i < dst.length) {\n const dstValue = dst[i++];\n if (typeof dstValue === 'number') {\n if (dstValue === marker) {\n markerInsertPosition = -1;\n break;\n }\n else if (dstValue > marker) {\n // We need to save this as we want the markers to be inserted in specific order.\n markerInsertPosition = i - 1;\n break;\n }\n }\n }\n }\n // search until you find place of insertion\n while (i < dst.length) {\n const item = dst[i];\n if (typeof item === 'number') {\n // since `i` started as the index after the marker, we did not find it if we are at the next\n // marker\n break;\n }\n else if (item === key1) {\n // We already have same token\n if (key2 === null) {\n if (value !== null) {\n dst[i + 1] = value;\n }\n return;\n }\n else if (key2 === dst[i + 1]) {\n dst[i + 2] = value;\n return;\n }\n }\n // Increment counter.\n i++;\n if (key2 !== null)\n i++;\n if (value !== null)\n i++;\n }\n // insert at location.\n if (markerInsertPosition !== -1) {\n dst.splice(markerInsertPosition, 0, marker);\n i = markerInsertPosition + 1;\n }\n dst.splice(i++, 0, key1);\n if (key2 !== null) {\n dst.splice(i++, 0, key2);\n }\n if (value !== null) {\n dst.splice(i++, 0, value);\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/// Parent Injector Utils ///////////////////////////////////////////////////////////////\nfunction hasParentInjector(parentLocation) {\n return parentLocation !== NO_PARENT_INJECTOR;\n}\nfunction getParentInjectorIndex(parentLocation) {\n ngDevMode && assertNumber(parentLocation, 'Number expected');\n ngDevMode && assertNotEqual(parentLocation, -1, 'Not a valid state.');\n const parentInjectorIndex = parentLocation & 32767 /* InjectorIndexMask */;\n ngDevMode &&\n assertGreaterThan(parentInjectorIndex, HEADER_OFFSET, 'Parent injector must be pointing past HEADER_OFFSET.');\n return parentLocation & 32767 /* InjectorIndexMask */;\n}\nfunction getParentInjectorViewOffset(parentLocation) {\n return parentLocation >> 16 /* ViewOffsetShift */;\n}\n/**\n * Unwraps a parent injector location number to find the view offset from the current injector,\n * then walks up the declaration view tree until the view is found that contains the parent\n * injector.\n *\n * @param location The location of the parent injector, which contains the view offset\n * @param startView The LView instance from which to start walking up the view tree\n * @returns The LView instance that contains the parent injector\n */\nfunction getParentInjectorView(location, startView) {\n let viewOffset = getParentInjectorViewOffset(location);\n let parentView = startView;\n // For most cases, the parent injector can be found on the host node (e.g. for component\n // or container), but we must keep the loop here to support the rarer case of deeply nested\n // tags or inline views, where the parent injector might live many views\n // above the child injector.\n while (viewOffset > 0) {\n parentView = parentView[DECLARATION_VIEW];\n viewOffset--;\n }\n return parentView;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Defines if the call to `inject` should include `viewProviders` in its resolution.\n *\n * This is set to true when we try to instantiate a component. This value is reset in\n * `getNodeInjectable` to a value which matches the declaration location of the token about to be\n * instantiated. This is done so that if we are injecting a token which was declared outside of\n * `viewProviders` we don't accidentally pull `viewProviders` in.\n *\n * Example:\n *\n * ```\n * @Injectable()\n * class MyService {\n * constructor(public value: String) {}\n * }\n *\n * @Component({\n * providers: [\n * MyService,\n * {provide: String, value: 'providers' }\n * ]\n * viewProviders: [\n * {provide: String, value: 'viewProviders'}\n * ]\n * })\n * class MyComponent {\n * constructor(myService: MyService, value: String) {\n * // We expect that Component can see into `viewProviders`.\n * expect(value).toEqual('viewProviders');\n * // `MyService` was not declared in `viewProviders` hence it can't see it.\n * expect(myService.value).toEqual('providers');\n * }\n * }\n *\n * ```\n */\nlet includeViewProviders = true;\nfunction setIncludeViewProviders(v) {\n const oldValue = includeViewProviders;\n includeViewProviders = v;\n return oldValue;\n}\n/**\n * The number of slots in each bloom filter (used by DI). The larger this number, the fewer\n * directives that will share slots, and thus, the fewer false positives when checking for\n * the existence of a directive.\n */\nconst BLOOM_SIZE = 256;\nconst BLOOM_MASK = BLOOM_SIZE - 1;\n/** Counter used to generate unique IDs for directives. */\nlet nextNgElementId = 0;\n/**\n * Registers this directive as present in its node's injector by flipping the directive's\n * corresponding bit in the injector's bloom filter.\n *\n * @param injectorIndex The index of the node injector where this token should be registered\n * @param tView The TView for the injector's bloom filters\n * @param type The directive token to register\n */\nfunction bloomAdd(injectorIndex, tView, type) {\n ngDevMode && assertEqual(tView.firstCreatePass, true, 'expected firstCreatePass to be true');\n let id;\n if (typeof type === 'string') {\n id = type.charCodeAt(0) || 0;\n }\n else if (type.hasOwnProperty(NG_ELEMENT_ID)) {\n id = type[NG_ELEMENT_ID];\n }\n // Set a unique ID on the directive type, so if something tries to inject the directive,\n // we can easily retrieve the ID and hash it into the bloom bit that should be checked.\n if (id == null) {\n id = type[NG_ELEMENT_ID] = nextNgElementId++;\n }\n // We only have BLOOM_SIZE (256) slots in our bloom filter (8 buckets * 32 bits each),\n // so all unique IDs must be modulo-ed into a number from 0 - 255 to fit into the filter.\n const bloomBit = id & BLOOM_MASK;\n // Create a mask that targets the specific bit associated with the directive.\n // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n // to bit positions 0 - 31 in a 32 bit integer.\n const mask = 1 << bloomBit;\n // Use the raw bloomBit number to determine which bloom filter bucket we should check\n // e.g: bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc\n const b7 = bloomBit & 0x80;\n const b6 = bloomBit & 0x40;\n const b5 = bloomBit & 0x20;\n const tData = tView.data;\n if (b7) {\n b6 ? (b5 ? (tData[injectorIndex + 7] |= mask) : (tData[injectorIndex + 6] |= mask)) :\n (b5 ? (tData[injectorIndex + 5] |= mask) : (tData[injectorIndex + 4] |= mask));\n }\n else {\n b6 ? (b5 ? (tData[injectorIndex + 3] |= mask) : (tData[injectorIndex + 2] |= mask)) :\n (b5 ? (tData[injectorIndex + 1] |= mask) : (tData[injectorIndex] |= mask));\n }\n}\n/**\n * Creates (or gets an existing) injector for a given element or container.\n *\n * @param tNode for which an injector should be retrieved / created.\n * @param lView View where the node is stored\n * @returns Node injector\n */\nfunction getOrCreateNodeInjectorForNode(tNode, lView) {\n const existingInjectorIndex = getInjectorIndex(tNode, lView);\n if (existingInjectorIndex !== -1) {\n return existingInjectorIndex;\n }\n const tView = lView[TVIEW];\n if (tView.firstCreatePass) {\n tNode.injectorIndex = lView.length;\n insertBloom(tView.data, tNode); // foundation for node bloom\n insertBloom(lView, null); // foundation for cumulative bloom\n insertBloom(tView.blueprint, null);\n }\n const parentLoc = getParentInjectorLocation(tNode, lView);\n const injectorIndex = tNode.injectorIndex;\n // If a parent injector can't be found, its location is set to -1.\n // In that case, we don't need to set up a cumulative bloom\n if (hasParentInjector(parentLoc)) {\n const parentIndex = getParentInjectorIndex(parentLoc);\n const parentLView = getParentInjectorView(parentLoc, lView);\n const parentData = parentLView[TVIEW].data;\n // Creates a cumulative bloom filter that merges the parent's bloom filter\n // and its own cumulative bloom (which contains tokens for all ancestors)\n for (let i = 0; i < 8 /* BLOOM_SIZE */; i++) {\n lView[injectorIndex + i] = parentLView[parentIndex + i] | parentData[parentIndex + i];\n }\n }\n lView[injectorIndex + 8 /* PARENT */] = parentLoc;\n return injectorIndex;\n}\nfunction insertBloom(arr, footer) {\n arr.push(0, 0, 0, 0, 0, 0, 0, 0, footer);\n}\nfunction getInjectorIndex(tNode, lView) {\n if (tNode.injectorIndex === -1 ||\n // If the injector index is the same as its parent's injector index, then the index has been\n // copied down from the parent node. No injector has been created yet on this node.\n (tNode.parent && tNode.parent.injectorIndex === tNode.injectorIndex) ||\n // After the first template pass, the injector index might exist but the parent values\n // might not have been calculated yet for this instance\n lView[tNode.injectorIndex + 8 /* PARENT */] === null) {\n return -1;\n }\n else {\n ngDevMode && assertIndexInRange(lView, tNode.injectorIndex);\n return tNode.injectorIndex;\n }\n}\n/**\n * Finds the index of the parent injector, with a view offset if applicable. Used to set the\n * parent injector initially.\n *\n * @returns Returns a number that is the combination of the number of LViews that we have to go up\n * to find the LView containing the parent inject AND the index of the injector within that LView.\n */\nfunction getParentInjectorLocation(tNode, lView) {\n if (tNode.parent && tNode.parent.injectorIndex !== -1) {\n // If we have a parent `TNode` and there is an injector associated with it we are done, because\n // the parent injector is within the current `LView`.\n return tNode.parent.injectorIndex; // ViewOffset is 0\n }\n // When parent injector location is computed it may be outside of the current view. (ie it could\n // be pointing to a declared parent location). This variable stores number of declaration parents\n // we need to walk up in order to find the parent injector location.\n let declarationViewOffset = 0;\n let parentTNode = null;\n let lViewCursor = lView;\n // The parent injector is not in the current `LView`. We will have to walk the declared parent\n // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent\n // `NodeInjector`.\n while (lViewCursor !== null) {\n // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.\n const tView = lViewCursor[TVIEW];\n const tViewType = tView.type;\n if (tViewType === 2 /* Embedded */) {\n ngDevMode &&\n assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');\n parentTNode = tView.declTNode;\n }\n else if (tViewType === 1 /* Component */) {\n // Components don't have `TView.declTNode` because each instance of component could be\n // inserted in different location, hence `TView.declTNode` is meaningless.\n parentTNode = lViewCursor[T_HOST];\n }\n else {\n ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');\n parentTNode = null;\n }\n if (parentTNode === null) {\n // If we have no parent, than we are done.\n return NO_PARENT_INJECTOR;\n }\n ngDevMode && parentTNode && assertTNodeForLView(parentTNode, lViewCursor[DECLARATION_VIEW]);\n // Every iteration of the loop requires that we go to the declared parent.\n declarationViewOffset++;\n lViewCursor = lViewCursor[DECLARATION_VIEW];\n if (parentTNode.injectorIndex !== -1) {\n // We found a NodeInjector which points to something.\n return (parentTNode.injectorIndex |\n (declarationViewOffset << 16 /* ViewOffsetShift */));\n }\n }\n return NO_PARENT_INJECTOR;\n}\n/**\n * Makes a type or an injection token public to the DI system by adding it to an\n * injector's bloom filter.\n *\n * @param di The node injector in which a directive will be added\n * @param token The type or the injection token to be made public\n */\nfunction diPublicInInjector(injectorIndex, tView, token) {\n bloomAdd(injectorIndex, tView, token);\n}\n/**\n * Inject static attribute value into directive constructor.\n *\n * This method is used with `factory` functions which are generated as part of\n * `defineDirective` or `defineComponent`. The method retrieves the static value\n * of an attribute. (Dynamic attributes are not supported since they are not resolved\n * at the time of injection and can change over time.)\n *\n * # Example\n * Given:\n * ```\n * @Component(...)\n * class MyComponent {\n * constructor(@Attribute('title') title: string) { ... }\n * }\n * ```\n * When instantiated with\n * ```\n * \n * ```\n *\n * Then factory method generated is:\n * ```\n * MyComponent.ɵcmp = defineComponent({\n * factory: () => new MyComponent(injectAttribute('title'))\n * ...\n * })\n * ```\n *\n * @publicApi\n */\nfunction injectAttributeImpl(tNode, attrNameToInject) {\n ngDevMode && assertTNodeType(tNode, 12 /* AnyContainer */ | 3 /* AnyRNode */);\n ngDevMode && assertDefined(tNode, 'expecting tNode');\n if (attrNameToInject === 'class') {\n return tNode.classes;\n }\n if (attrNameToInject === 'style') {\n return tNode.styles;\n }\n const attrs = tNode.attrs;\n if (attrs) {\n const attrsLength = attrs.length;\n let i = 0;\n while (i < attrsLength) {\n const value = attrs[i];\n // If we hit a `Bindings` or `Template` marker then we are done.\n if (isNameOnlyAttributeMarker(value))\n break;\n // Skip namespaced attributes\n if (value === 0 /* NamespaceURI */) {\n // we skip the next two values\n // as namespaced attributes looks like\n // [..., AttributeMarker.NamespaceURI, 'http://someuri.com/test', 'test:exist',\n // 'existValue', ...]\n i = i + 2;\n }\n else if (typeof value === 'number') {\n // Skip to the first value of the marked attribute.\n i++;\n while (i < attrsLength && typeof attrs[i] === 'string') {\n i++;\n }\n }\n else if (value === attrNameToInject) {\n return attrs[i + 1];\n }\n else {\n i = i + 2;\n }\n }\n }\n return null;\n}\nfunction notFoundValueOrThrow(notFoundValue, token, flags) {\n if (flags & InjectFlags.Optional) {\n return notFoundValue;\n }\n else {\n throwProviderNotFoundError(token, 'NodeInjector');\n }\n}\n/**\n * Returns the value associated to the given token from the ModuleInjector or throws exception\n *\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector or throws an exception\n */\nfunction lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {\n if (flags & InjectFlags.Optional && notFoundValue === undefined) {\n // This must be set or the NullInjector will throw for optional deps\n notFoundValue = null;\n }\n if ((flags & (InjectFlags.Self | InjectFlags.Host)) === 0) {\n const moduleInjector = lView[INJECTOR];\n // switch to `injectInjectorOnly` implementation for module injector, since module injector\n // should not have access to Component/Directive DI scope (that may happen through\n // `directiveInject` implementation)\n const previousInjectImplementation = setInjectImplementation(undefined);\n try {\n if (moduleInjector) {\n return moduleInjector.get(token, notFoundValue, flags & InjectFlags.Optional);\n }\n else {\n return injectRootLimpMode(token, notFoundValue, flags & InjectFlags.Optional);\n }\n }\n finally {\n setInjectImplementation(previousInjectImplementation);\n }\n }\n return notFoundValueOrThrow(notFoundValue, token, flags);\n}\n/**\n * Returns the value associated to the given token from the NodeInjectors => ModuleInjector.\n *\n * Look for the injector providing the token by walking up the node injector tree and then\n * the module injector tree.\n *\n * This function patches `token` with `__NG_ELEMENT_ID__` which contains the id for the bloom\n * filter. `-1` is reserved for injecting `Injector` (implemented by `NodeInjector`)\n *\n * @param tNode The Node where the search for the injector should start\n * @param lView The `LView` that contains the `tNode`\n * @param token The token to look for\n * @param flags Injection flags\n * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`\n * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided\n */\nfunction getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {\n if (tNode !== null) {\n const bloomHash = bloomHashBitOrFactory(token);\n // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef\n // so just call the factory function to create it.\n if (typeof bloomHash === 'function') {\n if (!enterDI(lView, tNode, flags)) {\n // Failed to enter DI, try module injector instead. If a token is injected with the @Host\n // flag, the module injector is not searched for that token in Ivy.\n return (flags & InjectFlags.Host) ?\n notFoundValueOrThrow(notFoundValue, token, flags) :\n lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n }\n try {\n const value = bloomHash();\n if (value == null && !(flags & InjectFlags.Optional)) {\n throwProviderNotFoundError(token);\n }\n else {\n return value;\n }\n }\n finally {\n leaveDI();\n }\n }\n else if (typeof bloomHash === 'number') {\n // A reference to the previous injector TView that was found while climbing the element\n // injector tree. This is used to know if viewProviders can be accessed on the current\n // injector.\n let previousTView = null;\n let injectorIndex = getInjectorIndex(tNode, lView);\n let parentLocation = NO_PARENT_INJECTOR;\n let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;\n // If we should skip this injector, or if there is no injector on this node, start by\n // searching the parent injector.\n if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {\n parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :\n lView[injectorIndex + 8 /* PARENT */];\n if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {\n injectorIndex = -1;\n }\n else {\n previousTView = lView[TVIEW];\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n }\n // Traverse up the injector tree until we find a potential match or until we know there\n // *isn't* a match.\n while (injectorIndex !== -1) {\n ngDevMode && assertNodeInjector(lView, injectorIndex);\n // Check the current injector. If it matches, see if it contains token.\n const tView = lView[TVIEW];\n ngDevMode &&\n assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);\n if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {\n // At this point, we have an injector which *may* contain the token, so we step through\n // the providers and directives associated with the injector's corresponding node to get\n // the instance.\n const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);\n if (instance !== NOT_FOUND) {\n return instance;\n }\n }\n parentLocation = lView[injectorIndex + 8 /* PARENT */];\n if (parentLocation !== NO_PARENT_INJECTOR &&\n shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&\n bloomHasToken(bloomHash, injectorIndex, lView)) {\n // The def wasn't found anywhere on this node, so it was a false positive.\n // Traverse up the tree and continue searching.\n previousTView = tView;\n injectorIndex = getParentInjectorIndex(parentLocation);\n lView = getParentInjectorView(parentLocation, lView);\n }\n else {\n // If we should not search parent OR If the ancestor bloom filter value does not have the\n // bit corresponding to the directive we can give up on traversing up to find the specific\n // injector.\n injectorIndex = -1;\n }\n }\n }\n }\n return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);\n}\nconst NOT_FOUND = {};\nfunction createNodeInjector() {\n return new NodeInjector(getCurrentTNode(), getLView());\n}\nfunction searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {\n const currentTView = lView[TVIEW];\n const tNode = currentTView.data[injectorIndex + 8 /* TNODE */];\n // First, we need to determine if view providers can be accessed by the starting element.\n // There are two possibilities\n const canAccessViewProviders = previousTView == null ?\n // 1) This is the first invocation `previousTView == null` which means that we are at the\n // `TNode` of where injector is starting to look. In such a case the only time we are allowed\n // to look into the ViewProviders is if:\n // - we are on a component\n // - AND the injector set `includeViewProviders` to true (implying that the token can see\n // ViewProviders because it is the Component or a Service which itself was declared in\n // ViewProviders)\n (isComponentHost(tNode) && includeViewProviders) :\n // 2) `previousTView != null` which means that we are now walking across the parent nodes.\n // In such a case we are only allowed to look into the ViewProviders if:\n // - We just crossed from child View to Parent View `previousTView != currentTView`\n // - AND the parent TNode is an Element.\n // This means that we just came from the Component's View and therefore are allowed to see\n // into the ViewProviders.\n (previousTView != currentTView && ((tNode.type & 3 /* AnyRNode */) !== 0));\n // This special case happens when there is a @host on the inject and when we are searching\n // on the host element node.\n const isHostSpecialCase = (flags & InjectFlags.Host) && hostTElementNode === tNode;\n const injectableIdx = locateDirectiveOrProvider(tNode, currentTView, token, canAccessViewProviders, isHostSpecialCase);\n if (injectableIdx !== null) {\n return getNodeInjectable(lView, currentTView, injectableIdx, tNode);\n }\n else {\n return NOT_FOUND;\n }\n}\n/**\n * Searches for the given token among the node's directives and providers.\n *\n * @param tNode TNode on which directives are present.\n * @param tView The tView we are currently processing\n * @param token Provider token or type of a directive to look for.\n * @param canAccessViewProviders Whether view providers should be considered.\n * @param isHostSpecialCase Whether the host special case applies.\n * @returns Index of a found directive or provider, or null when none found.\n */\nfunction locateDirectiveOrProvider(tNode, tView, token, canAccessViewProviders, isHostSpecialCase) {\n const nodeProviderIndexes = tNode.providerIndexes;\n const tInjectables = tView.data;\n const injectablesStart = nodeProviderIndexes & 1048575 /* ProvidersStartIndexMask */;\n const directivesStart = tNode.directiveStart;\n const directiveEnd = tNode.directiveEnd;\n const cptViewProvidersCount = nodeProviderIndexes >> 20 /* CptViewProvidersCountShift */;\n const startingIndex = canAccessViewProviders ? injectablesStart : injectablesStart + cptViewProvidersCount;\n // When the host special case applies, only the viewProviders and the component are visible\n const endIndex = isHostSpecialCase ? injectablesStart + cptViewProvidersCount : directiveEnd;\n for (let i = startingIndex; i < endIndex; i++) {\n const providerTokenOrDef = tInjectables[i];\n if (i < directivesStart && token === providerTokenOrDef ||\n i >= directivesStart && providerTokenOrDef.type === token) {\n return i;\n }\n }\n if (isHostSpecialCase) {\n const dirDef = tInjectables[directivesStart];\n if (dirDef && isComponentDef(dirDef) && dirDef.type === token) {\n return directivesStart;\n }\n }\n return null;\n}\n/**\n * Retrieve or instantiate the injectable from the `LView` at particular `index`.\n *\n * This function checks to see if the value has already been instantiated and if so returns the\n * cached `injectable`. Otherwise if it detects that the value is still a factory it\n * instantiates the `injectable` and caches the value.\n */\nfunction getNodeInjectable(lView, tView, index, tNode) {\n let value = lView[index];\n const tData = tView.data;\n if (isFactory(value)) {\n const factory = value;\n if (factory.resolving) {\n throwCyclicDependencyError(stringifyForError(tData[index]));\n }\n const previousIncludeViewProviders = setIncludeViewProviders(factory.canSeeViewProviders);\n factory.resolving = true;\n const previousInjectImplementation = factory.injectImpl ? setInjectImplementation(factory.injectImpl) : null;\n const success = enterDI(lView, tNode, InjectFlags.Default);\n ngDevMode &&\n assertEqual(success, true, 'Because flags do not contain \\`SkipSelf\\' we expect this to always succeed.');\n try {\n value = lView[index] = factory.factory(undefined, tData, lView, tNode);\n // This code path is hit for both directives and providers.\n // For perf reasons, we want to avoid searching for hooks on providers.\n // It does no harm to try (the hooks just won't exist), but the extra\n // checks are unnecessary and this is a hot path. So we check to see\n // if the index of the dependency is in the directive range for this\n // tNode. If it's not, we know it's a provider and skip hook registration.\n if (tView.firstCreatePass && index >= tNode.directiveStart) {\n ngDevMode && assertDirectiveDef(tData[index]);\n registerPreOrderHooks(index, tData[index], tView);\n }\n }\n finally {\n previousInjectImplementation !== null &&\n setInjectImplementation(previousInjectImplementation);\n setIncludeViewProviders(previousIncludeViewProviders);\n factory.resolving = false;\n leaveDI();\n }\n }\n return value;\n}\n/**\n * Returns the bit in an injector's bloom filter that should be used to determine whether or not\n * the directive might be provided by the injector.\n *\n * When a directive is public, it is added to the bloom filter and given a unique ID that can be\n * retrieved on the Type. When the directive isn't public or the token is not a directive `null`\n * is returned as the node injector can not possibly provide that token.\n *\n * @param token the injection token\n * @returns the matching bit to check in the bloom filter or `null` if the token is not known.\n * When the returned value is negative then it represents special values such as `Injector`.\n */\nfunction bloomHashBitOrFactory(token) {\n ngDevMode && assertDefined(token, 'token must be defined');\n if (typeof token === 'string') {\n return token.charCodeAt(0) || 0;\n }\n const tokenId = \n // First check with `hasOwnProperty` so we don't get an inherited ID.\n token.hasOwnProperty(NG_ELEMENT_ID) ? token[NG_ELEMENT_ID] : undefined;\n // Negative token IDs are used for special objects such as `Injector`\n if (typeof tokenId === 'number') {\n if (tokenId >= 0) {\n return tokenId & BLOOM_MASK;\n }\n else {\n ngDevMode &&\n assertEqual(tokenId, -1 /* Injector */, 'Expecting to get Special Injector Id');\n return createNodeInjector;\n }\n }\n else {\n return tokenId;\n }\n}\nfunction bloomHasToken(bloomHash, injectorIndex, injectorView) {\n // Create a mask that targets the specific bit associated with the directive we're looking for.\n // JS bit operations are 32 bits, so this will be a number between 2^0 and 2^31, corresponding\n // to bit positions 0 - 31 in a 32 bit integer.\n const mask = 1 << bloomHash;\n const b7 = bloomHash & 0x80;\n const b6 = bloomHash & 0x40;\n const b5 = bloomHash & 0x20;\n // Our bloom filter size is 256 bits, which is eight 32-bit bloom filter buckets:\n // bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127], etc.\n // Get the bloom filter value from the appropriate bucket based on the directive's bloomBit.\n let value;\n if (b7) {\n value = b6 ? (b5 ? injectorView[injectorIndex + 7] : injectorView[injectorIndex + 6]) :\n (b5 ? injectorView[injectorIndex + 5] : injectorView[injectorIndex + 4]);\n }\n else {\n value = b6 ? (b5 ? injectorView[injectorIndex + 3] : injectorView[injectorIndex + 2]) :\n (b5 ? injectorView[injectorIndex + 1] : injectorView[injectorIndex]);\n }\n // If the bloom filter value has the bit corresponding to the directive's bloomBit flipped on,\n // this injector is a potential match.\n return !!(value & mask);\n}\n/** Returns true if flags prevent parent injector from being searched for tokens */\nfunction shouldSearchParent(flags, isFirstHostTNode) {\n return !(flags & InjectFlags.Self) && !(flags & InjectFlags.Host && isFirstHostTNode);\n}\nclass NodeInjector {\n constructor(_tNode, _lView) {\n this._tNode = _tNode;\n this._lView = _lView;\n }\n get(token, notFoundValue) {\n return getOrCreateInjectable(this._tNode, this._lView, token, undefined, notFoundValue);\n }\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵgetFactoryOf(type) {\n const typeAny = type;\n if (isForwardRef(type)) {\n return (() => {\n const factory = ɵɵgetFactoryOf(resolveForwardRef(typeAny));\n return factory ? factory() : null;\n });\n }\n let factory = getFactoryDef(typeAny);\n if (factory === null) {\n const injectorDef = getInjectorDef(typeAny);\n factory = injectorDef && injectorDef.factory;\n }\n return factory || null;\n}\n/**\n * @codeGenApi\n */\nfunction ɵɵgetInheritedFactory(type) {\n return noSideEffects(() => {\n const ownConstructor = type.prototype.constructor;\n const ownFactory = ownConstructor[NG_FACTORY_DEF] || ɵɵgetFactoryOf(ownConstructor);\n const objectPrototype = Object.prototype;\n let parent = Object.getPrototypeOf(type.prototype).constructor;\n // Go up the prototype until we hit `Object`.\n while (parent && parent !== objectPrototype) {\n const factory = parent[NG_FACTORY_DEF] || ɵɵgetFactoryOf(parent);\n // If we hit something that has a factory and the factory isn't the same as the type,\n // we've found the inherited factory. Note the check that the factory isn't the type's\n // own factory is redundant in most cases, but if the user has custom decorators on the\n // class, this lookup will start one level down in the prototype chain, causing us to\n // find the own factory first and potentially triggering an infinite loop downstream.\n if (factory && factory !== ownFactory) {\n return factory;\n }\n parent = Object.getPrototypeOf(parent);\n }\n // There is no factory defined. Either this was improper usage of inheritance\n // (no Angular decorator on the superclass) or there is no constructor at all\n // in the inheritance chain. Since the two cases cannot be distinguished, the\n // latter has to be assumed.\n return t => new t();\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Facade for the attribute injection from DI.\n *\n * @codeGenApi\n */\nfunction ɵɵinjectAttribute(attrNameToInject) {\n return injectAttributeImpl(getCurrentTNode(), attrNameToInject);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__parameters__';\nconst PROP_METADATA = '__prop__metadata__';\n/**\n * @suppress {globalThis}\n */\nfunction makeDecorator(name, props, parentClass, additionalProcessing, typeFn) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function DecoratorFactory(...args) {\n if (this instanceof DecoratorFactory) {\n metaCtor.call(this, ...args);\n return this;\n }\n const annotationInstance = new DecoratorFactory(...args);\n return function TypeDecorator(cls) {\n if (typeFn)\n typeFn(cls, ...args);\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const annotations = cls.hasOwnProperty(ANNOTATIONS) ?\n cls[ANNOTATIONS] :\n Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];\n annotations.push(annotationInstance);\n if (additionalProcessing)\n additionalProcessing(cls);\n return cls;\n };\n }\n if (parentClass) {\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n DecoratorFactory.prototype.ngMetadataName = name;\n DecoratorFactory.annotationCls = DecoratorFactory;\n return DecoratorFactory;\n });\n}\nfunction makeMetadataCtor(props) {\n return function ctor(...args) {\n if (props) {\n const values = props(...args);\n for (const propName in values) {\n this[propName] = values[propName];\n }\n }\n };\n}\nfunction makeParamDecorator(name, props, parentClass) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function ParamDecoratorFactory(...args) {\n if (this instanceof ParamDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const annotationInstance = new ParamDecoratorFactory(...args);\n ParamDecorator.annotation = annotationInstance;\n return ParamDecorator;\n function ParamDecorator(cls, unusedKey, index) {\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const parameters = cls.hasOwnProperty(PARAMETERS) ?\n cls[PARAMETERS] :\n Object.defineProperty(cls, PARAMETERS, { value: [] })[PARAMETERS];\n // there might be gaps if some in between parameters do not have annotations.\n // we pad with nulls.\n while (parameters.length <= index) {\n parameters.push(null);\n }\n (parameters[index] = parameters[index] || []).push(annotationInstance);\n return cls;\n }\n }\n if (parentClass) {\n ParamDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n ParamDecoratorFactory.prototype.ngMetadataName = name;\n ParamDecoratorFactory.annotationCls = ParamDecoratorFactory;\n return ParamDecoratorFactory;\n });\n}\nfunction makePropDecorator(name, props, parentClass, additionalProcessing) {\n return noSideEffects(() => {\n const metaCtor = makeMetadataCtor(props);\n function PropDecoratorFactory(...args) {\n if (this instanceof PropDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const decoratorInstance = new PropDecoratorFactory(...args);\n function PropDecorator(target, name) {\n const constructor = target.constructor;\n // Use of Object.defineProperty is important because it creates a non-enumerable property\n // which prevents the property from being copied during subclassing.\n const meta = constructor.hasOwnProperty(PROP_METADATA) ?\n constructor[PROP_METADATA] :\n Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];\n meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n meta[name].unshift(decoratorInstance);\n if (additionalProcessing)\n additionalProcessing(target, name, ...args);\n }\n return PropDecorator;\n }\n if (parentClass) {\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n PropDecoratorFactory.prototype.ngMetadataName = name;\n PropDecoratorFactory.annotationCls = PropDecoratorFactory;\n return PropDecoratorFactory;\n });\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction CREATE_ATTRIBUTE_DECORATOR__PRE_R3__() {\n return makeParamDecorator('Attribute', (attributeName) => ({ attributeName }));\n}\nfunction CREATE_ATTRIBUTE_DECORATOR__POST_R3__() {\n return makeParamDecorator('Attribute', (attributeName) => ({ attributeName, __NG_ELEMENT_ID__: () => ɵɵinjectAttribute(attributeName) }));\n}\nconst CREATE_ATTRIBUTE_DECORATOR_IMPL = CREATE_ATTRIBUTE_DECORATOR__POST_R3__;\n/**\n * Attribute decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Attribute = CREATE_ATTRIBUTE_DECORATOR_IMPL();\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Creates a token that can be used in a DI Provider.\n *\n * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a\n * runtime representation) such as when injecting an interface, callable type, array or\n * parameterized type.\n *\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\n * the `Injector`. This provides additional level of type safety.\n *\n * ```\n * interface MyInterface {...}\n * var myInterface = injector.get(new InjectionToken('SomeToken'));\n * // myInterface is inferred to be MyInterface.\n * ```\n *\n * When creating an `InjectionToken`, you can optionally specify a factory function which returns\n * (possibly by creating) a default value of the parameterized type `T`. This sets up the\n * `InjectionToken` using this factory as a provider as if it was defined explicitly in the\n * application's root injector. If the factory function, which takes zero arguments, needs to inject\n * dependencies, it can do so using the `inject` function. See below for an example.\n *\n * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which\n * overrides the above behavior and marks the token as belonging to a particular `@NgModule`. As\n * mentioned above, `'root'` is the default value for `providedIn`.\n *\n * @usageNotes\n * ### Basic Example\n *\n * ### Plain InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='InjectionToken'}\n *\n * ### Tree-shakable InjectionToken\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n *\n * @publicApi\n */\nclass InjectionToken {\n constructor(_desc, options) {\n this._desc = _desc;\n /** @internal */\n this.ngMetadataName = 'InjectionToken';\n this.ɵprov = undefined;\n if (typeof options == 'number') {\n (typeof ngDevMode === 'undefined' || ngDevMode) &&\n assertLessThan(options, 0, 'Only negative numbers are supported here');\n // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.\n // See `InjectorMarkers`\n this.__NG_ELEMENT_ID__ = options;\n }\n else if (options !== undefined) {\n this.ɵprov = ɵɵdefineInjectable({\n token: this,\n providedIn: options.providedIn || 'root',\n factory: options.factory,\n });\n }\n }\n toString() {\n return `InjectionToken ${this._desc}`;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A DI token that you can use to create a virtual [provider](guide/glossary#provider)\n * that will populate the `entryComponents` field of components and NgModules\n * based on its `useValue` property value.\n * All components that are referenced in the `useValue` value (either directly\n * or in a nested array or map) are added to the `entryComponents` property.\n *\n * @usageNotes\n *\n * The following example shows how the router can populate the `entryComponents`\n * field of an NgModule based on a router configuration that refers\n * to components.\n *\n * ```typescript\n * // helper function inside the router\n * function provideRoutes(routes) {\n * return [\n * {provide: ROUTES, useValue: routes},\n * {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}\n * ];\n * }\n *\n * // user code\n * let routes = [\n * {path: '/root', component: RootComp},\n * {path: '/teams', component: TeamsComp}\n * ];\n *\n * @NgModule({\n * providers: [provideRoutes(routes)]\n * })\n * class ModuleWithRoutes {}\n * ```\n *\n * @publicApi\n * @deprecated Since 9.0.0. With Ivy, this property is no longer necessary.\n */\nconst ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');\n/**\n * Base class for query metadata.\n *\n * @see `ContentChildren`.\n * @see `ContentChild`.\n * @see `ViewChildren`.\n * @see `ViewChild`.\n *\n * @publicApi\n */\nclass Query {\n}\nconst ɵ0$1 = (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: false, descendants: false }, data));\n/**\n * ContentChildren decorator and metadata.\n *\n *\n * @Annotation\n * @publicApi\n */\nconst ContentChildren = makePropDecorator('ContentChildren', ɵ0$1, Query);\nconst ɵ1 = (selector, data = {}) => (Object.assign({ selector, first: true, isViewQuery: false, descendants: true }, data));\n/**\n * ContentChild decorator and metadata.\n *\n *\n * @Annotation\n *\n * @publicApi\n */\nconst ContentChild = makePropDecorator('ContentChild', ɵ1, Query);\nconst ɵ2 = (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: true, descendants: true }, data));\n/**\n * ViewChildren decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChildren = makePropDecorator('ViewChildren', ɵ2, Query);\nconst ɵ3 = (selector, data) => (Object.assign({ selector, first: true, isViewQuery: true, descendants: true }, data));\n/**\n * ViewChild decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst ViewChild = makePropDecorator('ViewChild', ɵ3, Query);\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar R3ResolvedDependencyType;\n(function (R3ResolvedDependencyType) {\n R3ResolvedDependencyType[R3ResolvedDependencyType[\"Token\"] = 0] = \"Token\";\n R3ResolvedDependencyType[R3ResolvedDependencyType[\"Attribute\"] = 1] = \"Attribute\";\n R3ResolvedDependencyType[R3ResolvedDependencyType[\"ChangeDetectorRef\"] = 2] = \"ChangeDetectorRef\";\n R3ResolvedDependencyType[R3ResolvedDependencyType[\"Invalid\"] = 3] = \"Invalid\";\n})(R3ResolvedDependencyType || (R3ResolvedDependencyType = {}));\nvar R3FactoryTarget;\n(function (R3FactoryTarget) {\n R3FactoryTarget[R3FactoryTarget[\"Directive\"] = 0] = \"Directive\";\n R3FactoryTarget[R3FactoryTarget[\"Component\"] = 1] = \"Component\";\n R3FactoryTarget[R3FactoryTarget[\"Injectable\"] = 2] = \"Injectable\";\n R3FactoryTarget[R3FactoryTarget[\"Pipe\"] = 3] = \"Pipe\";\n R3FactoryTarget[R3FactoryTarget[\"NgModule\"] = 4] = \"NgModule\";\n})(R3FactoryTarget || (R3FactoryTarget = {}));\nvar ViewEncapsulation$1;\n(function (ViewEncapsulation) {\n ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\n // Historically the 1 value was for `Native` encapsulation which has been removed as of v11.\n ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\n ViewEncapsulation[ViewEncapsulation[\"ShadowDom\"] = 3] = \"ShadowDom\";\n})(ViewEncapsulation$1 || (ViewEncapsulation$1 = {}));\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nfunction getCompilerFacade() {\n const globalNg = _global['ng'];\n if (!globalNg || !globalNg.ɵcompilerFacade) {\n throw new Error(`Angular JIT compilation failed: '@angular/compiler' not loaded!\\n` +\n ` - JIT compilation is discouraged for production use-cases! Consider AOT mode instead.\\n` +\n ` - Did you bootstrap using '@angular/platform-browser-dynamic' or '@angular/platform-server'?\\n` +\n ` - Alternatively provide the compiler with 'import \"@angular/compiler\";' before bootstrapping.`);\n }\n return globalNg.ɵcompilerFacade;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @description\n *\n * Represents a type that a Component or other object is instances of.\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is represented by\n * the `MyCustomComponent` constructor function.\n *\n * @publicApi\n */\nconst Type = Function;\nfunction isType(v) {\n return typeof v === 'function';\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Equivalent to ES6 spread, add each item to an array.\n *\n * @param items The items to add\n * @param arr The array to which you want to add the items\n */\nfunction addAllToArray(items, arr) {\n for (let i = 0; i < items.length; i++) {\n arr.push(items[i]);\n }\n}\n/**\n * Flattens an array.\n */\nfunction flatten(list, dst) {\n if (dst === undefined)\n dst = list;\n for (let i = 0; i < list.length; i++) {\n let item = list[i];\n if (Array.isArray(item)) {\n // we need to inline it.\n if (dst === list) {\n // Our assumption that the list was already flat was wrong and\n // we need to clone flat since we need to write to it.\n dst = list.slice(0, i);\n }\n flatten(item, dst);\n }\n else if (dst !== list) {\n dst.push(item);\n }\n }\n return dst;\n}\nfunction deepForEach(input, fn) {\n input.forEach(value => Array.isArray(value) ? deepForEach(value, fn) : fn(value));\n}\nfunction addToArray(arr, index, value) {\n // perf: array.push is faster than array.splice!\n if (index >= arr.length) {\n arr.push(value);\n }\n else {\n arr.splice(index, 0, value);\n }\n}\nfunction removeFromArray(arr, index) {\n // perf: array.pop is faster than array.splice!\n if (index >= arr.length - 1) {\n return arr.pop();\n }\n else {\n return arr.splice(index, 1)[0];\n }\n}\nfunction newArray(size, value) {\n const list = [];\n for (let i = 0; i < size; i++) {\n list.push(value);\n }\n return list;\n}\n/**\n * Remove item from array (Same as `Array.splice()` but faster.)\n *\n * `Array.splice()` is not as fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * https://jsperf.com/fast-array-splice (About 20x faster)\n *\n * @param array Array to splice\n * @param index Index of element in array to remove.\n * @param count Number of items to remove.\n */\nfunction arraySplice(array, index, count) {\n const length = array.length - count;\n while (index < length) {\n array[index] = array[index + count];\n index++;\n }\n while (count--) {\n array.pop(); // shrink the array\n }\n}\n/**\n * Same as `Array.splice(index, 0, value)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value Value to add to array.\n */\nfunction arrayInsert(array, index, value) {\n ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\\'t insert past array end.');\n let end = array.length;\n while (end > index) {\n const previousEnd = end - 1;\n array[end] = array[previousEnd];\n end = previousEnd;\n }\n array[index] = value;\n}\n/**\n * Same as `Array.splice2(index, 0, value1, value2)` but faster.\n *\n * `Array.splice()` is not fast because it has to allocate an array for the elements which were\n * removed. This causes memory pressure and slows down code when most of the time we don't\n * care about the deleted items array.\n *\n * @param array Array to splice.\n * @param index Index in array where the `value` should be added.\n * @param value1 Value to add to array.\n * @param value2 Value to add to array.\n */\nfunction arrayInsert2(array, index, value1, value2) {\n ngDevMode && assertLessThanOrEqual(index, array.length, 'Can\\'t insert past array end.');\n let end = array.length;\n if (end == index) {\n // inserting at the end.\n array.push(value1, value2);\n }\n else if (end === 1) {\n // corner case when we have less items in array than we have items to insert.\n array.push(value2, array[0]);\n array[0] = value1;\n }\n else {\n end--;\n array.push(array[end - 1], array[end]);\n while (end > index) {\n const previousEnd = end - 2;\n array[end] = array[previousEnd];\n end--;\n }\n array[index] = value1;\n array[index + 1] = value2;\n }\n}\n/**\n * Insert a `value` into an `array` so that the array remains sorted.\n *\n * NOTE:\n * - Duplicates are not allowed, and are ignored.\n * - This uses binary search algorithm for fast inserts.\n *\n * @param array A sorted array to insert into.\n * @param value The value to insert.\n * @returns index of the inserted value.\n */\nfunction arrayInsertSorted(array, value) {\n let index = arrayIndexOfSorted(array, value);\n if (index < 0) {\n // if we did not find it insert it.\n index = ~index;\n arrayInsert(array, index, value);\n }\n return index;\n}\n/**\n * Remove `value` from a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to remove from.\n * @param value The value to remove.\n * @returns index of the removed value.\n * - positive index if value found and removed.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction arrayRemoveSorted(array, value) {\n const index = arrayIndexOfSorted(array, value);\n if (index >= 0) {\n arraySplice(array, index, 1);\n }\n return index;\n}\n/**\n * Get an index of an `value` in a sorted `array`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @returns index of the value.\n * - positive index if value found.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * located)\n */\nfunction arrayIndexOfSorted(array, value) {\n return _arrayIndexOfSorted(array, value, 0);\n}\n/**\n * Set a `value` for a `key`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or create.\n * @param value The value to set for a `key`.\n * @returns index (always even) of where the value vas set.\n */\nfunction keyValueArraySet(keyValueArray, key, value) {\n let index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it set it.\n keyValueArray[index | 1] = value;\n }\n else {\n index = ~index;\n arrayInsert2(keyValueArray, index, key, value);\n }\n return index;\n}\n/**\n * Retrieve a `value` for a `key` (on `undefined` if not found.)\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @return The `value` stored at the `key` location or `undefined if not found.\n */\nfunction keyValueArrayGet(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it retrieve it.\n return keyValueArray[index | 1];\n }\n return undefined;\n}\n/**\n * Retrieve a `key` index value in the array or `-1` if not found.\n *\n * @param keyValueArray to search.\n * @param key The key to locate.\n * @returns index of where the key is (or should have been.)\n * - positive (even) index if key found.\n * - negative index if key not found. (`~index` (even) to get the index where it should have\n * been inserted.)\n */\nfunction keyValueArrayIndexOf(keyValueArray, key) {\n return _arrayIndexOfSorted(keyValueArray, key, 1);\n}\n/**\n * Delete a `key` (and `value`) from the `KeyValueArray`.\n *\n * @param keyValueArray to modify.\n * @param key The key to locate or delete (if exist).\n * @returns index of where the key was (or should have been.)\n * - positive (even) index if key found and deleted.\n * - negative index if key not found. (`~index` (even) to get the index where it should have\n * been.)\n */\nfunction keyValueArrayDelete(keyValueArray, key) {\n const index = keyValueArrayIndexOf(keyValueArray, key);\n if (index >= 0) {\n // if we found it remove it.\n arraySplice(keyValueArray, index, 2);\n }\n return index;\n}\n/**\n * INTERNAL: Get an index of an `value` in a sorted `array` by grouping search by `shift`.\n *\n * NOTE:\n * - This uses binary search algorithm for fast removals.\n *\n * @param array A sorted array to binary search.\n * @param value The value to look for.\n * @param shift grouping shift.\n * - `0` means look at every location\n * - `1` means only look at every other (even) location (the odd locations are to be ignored as\n * they are values.)\n * @returns index of the value.\n * - positive index if value found.\n * - negative index if value not found. (`~index` to get the value where it should have been\n * inserted)\n */\nfunction _arrayIndexOfSorted(array, value, shift) {\n ngDevMode && assertEqual(Array.isArray(array), true, 'Expecting an array');\n let start = 0;\n let end = array.length >> shift;\n while (end !== start) {\n const middle = start + ((end - start) >> 1); // find the middle.\n const current = array[middle << shift];\n if (value === current) {\n return (middle << shift);\n }\n else if (current > value) {\n end = middle;\n }\n else {\n start = middle + 1; // We already searched middle so make it non-inclusive by adding 1\n }\n }\n return ~(end << shift);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/*\n * #########################\n * Attention: These Regular expressions have to hold even if the code is minified!\n * ##########################\n */\n/**\n * Regular expression that detects pass-through constructors for ES5 output. This Regex\n * intends to capture the common delegation pattern emitted by TypeScript and Babel. Also\n * it intends to capture the pattern where existing constructors have been downleveled from\n * ES2015 to ES5 using TypeScript w/ downlevel iteration. e.g.\n *\n * ```\n * function MyClass() {\n * var _this = _super.apply(this, arguments) || this;\n * ```\n *\n * ```\n * function MyClass() {\n * var _this = _super.apply(this, __spread(arguments)) || this;\n * ```\n *\n * More details can be found in: https://github.com/angular/angular/issues/38453.\n */\nconst ES5_DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*(arguments|[^()]+\\(arguments\\))\\)/;\n/** Regular expression that detects ES2015 classes which extend from other classes. */\nconst ES2015_INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes and\n * have an explicit constructor defined.\n */\nconst ES2015_INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(/;\n/**\n * Regular expression that detects ES2015 classes which extend from other classes\n * and inherit a constructor.\n */\nconst ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[^{]+{[\\s\\S]*constructor\\s*\\(\\)\\s*{\\s*super\\(\\.\\.\\.arguments\\)/;\n/**\n * Determine whether a stringified type is a class which delegates its constructor\n * to its parent.\n *\n * This is not trivial since compiled code can actually contain a constructor function\n * even if the original source code did not. For instance, when the child class contains\n * an initialized instance property.\n */\nfunction isDelegateCtor(typeStr) {\n return ES5_DELEGATE_CTOR.test(typeStr) ||\n ES2015_INHERITED_CLASS_WITH_DELEGATE_CTOR.test(typeStr) ||\n (ES2015_INHERITED_CLASS.test(typeStr) && !ES2015_INHERITED_CLASS_WITH_CTOR.test(typeStr));\n}\nclass ReflectionCapabilities {\n constructor(reflect) {\n this._reflect = reflect || _global['Reflect'];\n }\n isReflectionEnabled() {\n return true;\n }\n factory(t) {\n return (...args) => new t(...args);\n }\n /** @internal */\n _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n let result;\n if (typeof paramTypes === 'undefined') {\n result = newArray(paramAnnotations.length);\n }\n else {\n result = newArray(paramTypes.length);\n }\n for (let i = 0; i < result.length; i++) {\n // TS outputs Object for parameters without types, while Traceur omits\n // the annotations. For now we preserve the Traceur behavior to aid\n // migration, but this can be revisited.\n if (typeof paramTypes === 'undefined') {\n result[i] = [];\n }\n else if (paramTypes[i] && paramTypes[i] != Object) {\n result[i] = [paramTypes[i]];\n }\n else {\n result[i] = [];\n }\n if (paramAnnotations && paramAnnotations[i] != null) {\n result[i] = result[i].concat(paramAnnotations[i]);\n }\n }\n return result;\n }\n _ownParameters(type, parentCtor) {\n const typeStr = type.toString();\n // If we have no decorators, we only have function.length as metadata.\n // In that case, to detect whether a child class declared an own constructor or not,\n // we need to look inside of that constructor to check whether it is\n // just calling the parent.\n // This also helps to work around for https://github.com/Microsoft/TypeScript/issues/12439\n // that sets 'design:paramtypes' to []\n // if a class inherits from another class but has no ctor declared itself.\n if (isDelegateCtor(typeStr)) {\n return null;\n }\n // Prefer the direct API.\n if (type.parameters && type.parameters !== parentCtor.parameters) {\n return type.parameters;\n }\n // API of tsickle for lowering decorators to properties on the class.\n const tsickleCtorParams = type.ctorParameters;\n if (tsickleCtorParams && tsickleCtorParams !== parentCtor.ctorParameters) {\n // Newer tsickle uses a function closure\n // Retain the non-function case for compatibility with older tsickle\n const ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n const paramTypes = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);\n const paramAnnotations = ctorParameters.map((ctorParam) => ctorParam && convertTsickleDecoratorIntoMetadata(ctorParam.decorators));\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n // API for metadata created by invoking the decorators.\n const paramAnnotations = type.hasOwnProperty(PARAMETERS) && type[PARAMETERS];\n const paramTypes = this._reflect && this._reflect.getOwnMetadata &&\n this._reflect.getOwnMetadata('design:paramtypes', type);\n if (paramTypes || paramAnnotations) {\n return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n }\n // If a class has no decorators, at least create metadata\n // based on function.length.\n // Note: We know that this is a real constructor as we checked\n // the content of the constructor above.\n return newArray(type.length);\n }\n parameters(type) {\n // Note: only report metadata if we have at least one class decorator\n // to stay in sync with the static reflector.\n if (!isType(type)) {\n return [];\n }\n const parentCtor = getParentCtor(type);\n let parameters = this._ownParameters(type, parentCtor);\n if (!parameters && parentCtor !== Object) {\n parameters = this.parameters(parentCtor);\n }\n return parameters || [];\n }\n _ownAnnotations(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if (typeOrFunc.annotations && typeOrFunc.annotations !== parentCtor.annotations) {\n let annotations = typeOrFunc.annotations;\n if (typeof annotations === 'function' && annotations.annotations) {\n annotations = annotations.annotations;\n }\n return annotations;\n }\n // API of tsickle for lowering decorators to properties on the class.\n if (typeOrFunc.decorators && typeOrFunc.decorators !== parentCtor.decorators) {\n return convertTsickleDecoratorIntoMetadata(typeOrFunc.decorators);\n }\n // API for metadata created by invoking the decorators.\n if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n return typeOrFunc[ANNOTATIONS];\n }\n return null;\n }\n annotations(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return [];\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n const parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n return parentAnnotations.concat(ownAnnotations);\n }\n _ownPropMetadata(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if (typeOrFunc.propMetadata &&\n typeOrFunc.propMetadata !== parentCtor.propMetadata) {\n let propMetadata = typeOrFunc.propMetadata;\n if (typeof propMetadata === 'function' && propMetadata.propMetadata) {\n propMetadata = propMetadata.propMetadata;\n }\n return propMetadata;\n }\n // API of tsickle for lowering decorators to properties on the class.\n if (typeOrFunc.propDecorators &&\n typeOrFunc.propDecorators !== parentCtor.propDecorators) {\n const propDecorators = typeOrFunc.propDecorators;\n const propMetadata = {};\n Object.keys(propDecorators).forEach(prop => {\n propMetadata[prop] = convertTsickleDecoratorIntoMetadata(propDecorators[prop]);\n });\n return propMetadata;\n }\n // API for metadata created by invoking the decorators.\n if (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n return typeOrFunc[PROP_METADATA];\n }\n return null;\n }\n propMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n const parentCtor = getParentCtor(typeOrFunc);\n const propMetadata = {};\n if (parentCtor !== Object) {\n const parentPropMetadata = this.propMetadata(parentCtor);\n Object.keys(parentPropMetadata).forEach((propName) => {\n propMetadata[propName] = parentPropMetadata[propName];\n });\n }\n const ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n if (ownPropMetadata) {\n Object.keys(ownPropMetadata).forEach((propName) => {\n const decorators = [];\n if (propMetadata.hasOwnProperty(propName)) {\n decorators.push(...propMetadata[propName]);\n }\n decorators.push(...ownPropMetadata[propName]);\n propMetadata[propName] = decorators;\n });\n }\n return propMetadata;\n }\n ownPropMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n return this._ownPropMetadata(typeOrFunc, getParentCtor(typeOrFunc)) || {};\n }\n hasLifecycleHook(type, lcProperty) {\n return type instanceof Type && lcProperty in type.prototype;\n }\n guards(type) {\n return {};\n }\n getter(name) {\n return new Function('o', 'return o.' + name + ';');\n }\n setter(name) {\n return new Function('o', 'v', 'return o.' + name + ' = v;');\n }\n method(name) {\n const functionBody = `if (!o.${name}) throw new Error('\"${name}\" is undefined');\n return o.${name}.apply(o, args);`;\n return new Function('o', 'args', functionBody);\n }\n // There is not a concept of import uri in Js, but this is useful in developing Dart applications.\n importUri(type) {\n // StaticSymbol\n if (typeof type === 'object' && type['filePath']) {\n return type['filePath'];\n }\n // Runtime type\n return `./${stringify(type)}`;\n }\n resourceUri(type) {\n return `./${stringify(type)}`;\n }\n resolveIdentifier(name, moduleUrl, members, runtime) {\n return runtime;\n }\n resolveEnum(enumIdentifier, name) {\n return enumIdentifier[name];\n }\n}\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n if (!decoratorInvocations) {\n return [];\n }\n return decoratorInvocations.map(decoratorInvocation => {\n const decoratorType = decoratorInvocation.type;\n const annotationCls = decoratorType.annotationCls;\n const annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n return new annotationCls(...annotationArgs);\n });\n}\nfunction getParentCtor(ctor) {\n const parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n const parentCtor = parentProto ? parentProto.constructor : null;\n // Note: We always use `Object` as the null value\n // to simplify checking later on.\n return parentCtor || Object;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst ɵ0$2 = (token) => ({ token });\n/**\n * Inject decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Inject = makeParamDecorator('Inject', ɵ0$2);\n/**\n * Optional decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Optional = makeParamDecorator('Optional');\n/**\n * Self decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Self = makeParamDecorator('Self');\n/**\n * `SkipSelf` decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst SkipSelf = makeParamDecorator('SkipSelf');\n/**\n * Host decorator and metadata.\n *\n * @Annotation\n * @publicApi\n */\nconst Host = makeParamDecorator('Host');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nlet _reflect = null;\nfunction getReflect() {\n return (_reflect = _reflect || new ReflectionCapabilities());\n}\nfunction reflectDependencies(type) {\n return convertDependencies(getReflect().parameters(type));\n}\nfunction convertDependencies(deps) {\n const compiler = getCompilerFacade();\n return deps.map(dep => reflectDependency(compiler, dep));\n}\nfunction reflectDependency(compiler, dep) {\n const meta = {\n token: null,\n host: false,\n optional: false,\n resolved: compiler.R3ResolvedDependencyType.Token,\n self: false,\n skipSelf: false,\n };\n function setTokenAndResolvedType(token) {\n meta.resolved = compiler.R3ResolvedDependencyType.Token;\n meta.token = token;\n }\n if (Array.isArray(dep) && dep.length > 0) {\n for (let j = 0; j < dep.length; j++) {\n const param = dep[j];\n if (param === undefined) {\n // param may be undefined if type of dep is not set by ngtsc\n continue;\n }\n const proto = Object.getPrototypeOf(param);\n if (param instanceof Optional || proto.ngMetadataName === 'Optional') {\n meta.optional = true;\n }\n else if (param instanceof SkipSelf || proto.ngMetadataName === 'SkipSelf') {\n meta.skipSelf = true;\n }\n else if (param instanceof Self || proto.ngMetadataName === 'Self') {\n meta.self = true;\n }\n else if (param instanceof Host || proto.ngMetadataName === 'Host') {\n meta.host = true;\n }\n else if (param instanceof Inject) {\n meta.token = param.token;\n }\n else if (param instanceof Attribute) {\n if (param.attributeName === undefined) {\n throw new Error(`Attribute name must be defined.`);\n }\n meta.token = param.attributeName;\n meta.resolved = compiler.R3ResolvedDependencyType.Attribute;\n }\n else if (param.__ChangeDetectorRef__ === true) {\n meta.token = param;\n meta.resolved = compiler.R3ResolvedDependencyType.ChangeDetectorRef;\n }\n else {\n setTokenAndResolvedType(param);\n }\n }\n }\n else if (dep === undefined || (Array.isArray(dep) && dep.length === 0)) {\n meta.token = undefined;\n meta.resolved = R3ResolvedDependencyType.Invalid;\n }\n else {\n setTokenAndResolvedType(dep);\n }\n return meta;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Used to resolve resource URLs on `@Component` when used with JIT compilation.\n *\n * Example:\n * ```\n * @Component({\n * selector: 'my-comp',\n * templateUrl: 'my-comp.html', // This requires asynchronous resolution\n * })\n * class MyComponent{\n * }\n *\n * // Calling `renderComponent` will fail because `renderComponent` is a synchronous process\n * // and `MyComponent`'s `@Component.templateUrl` needs to be resolved asynchronously.\n *\n * // Calling `resolveComponentResources()` will resolve `@Component.templateUrl` into\n * // `@Component.template`, which allows `renderComponent` to proceed in a synchronous manner.\n *\n * // Use browser's `fetch()` function as the default resource resolution strategy.\n * resolveComponentResources(fetch).then(() => {\n * // After resolution all URLs have been converted into `template` strings.\n * renderComponent(MyComponent);\n * });\n *\n * ```\n *\n * NOTE: In AOT the resolution happens during compilation, and so there should be no need\n * to call this method outside JIT mode.\n *\n * @param resourceResolver a function which is responsible for returning a `Promise` to the\n * contents of the resolved URL. Browser's `fetch()` method is a good default implementation.\n */\nfunction resolveComponentResources(resourceResolver) {\n // Store all promises which are fetching the resources.\n const componentResolved = [];\n // Cache so that we don't fetch the same resource more than once.\n const urlMap = new Map();\n function cachedResourceResolve(url) {\n let promise = urlMap.get(url);\n if (!promise) {\n const resp = resourceResolver(url);\n urlMap.set(url, promise = resp.then(unwrapResponse));\n }\n return promise;\n }\n componentResourceResolutionQueue.forEach((component, type) => {\n const promises = [];\n if (component.templateUrl) {\n promises.push(cachedResourceResolve(component.templateUrl).then((template) => {\n component.template = template;\n }));\n }\n const styleUrls = component.styleUrls;\n const styles = component.styles || (component.styles = []);\n const styleOffset = component.styles.length;\n styleUrls && styleUrls.forEach((styleUrl, index) => {\n styles.push(''); // pre-allocate array.\n promises.push(cachedResourceResolve(styleUrl).then((style) => {\n styles[styleOffset + index] = style;\n styleUrls.splice(styleUrls.indexOf(styleUrl), 1);\n if (styleUrls.length == 0) {\n component.styleUrls = undefined;\n }\n }));\n });\n const fullyResolved = Promise.all(promises).then(() => componentDefResolved(type));\n componentResolved.push(fullyResolved);\n });\n clearResolutionOfComponentResourcesQueue();\n return Promise.all(componentResolved).then(() => undefined);\n}\nlet componentResourceResolutionQueue = new Map();\n// Track when existing ɵcmp for a Type is waiting on resources.\nconst componentDefPendingResolution = new Set();\nfunction maybeQueueResolutionOfComponentResources(type, metadata) {\n if (componentNeedsResolution(metadata)) {\n componentResourceResolutionQueue.set(type, metadata);\n componentDefPendingResolution.add(type);\n }\n}\nfunction isComponentDefPendingResolution(type) {\n return componentDefPendingResolution.has(type);\n}\nfunction componentNeedsResolution(component) {\n return !!((component.templateUrl && !component.hasOwnProperty('template')) ||\n component.styleUrls && component.styleUrls.length);\n}\nfunction clearResolutionOfComponentResourcesQueue() {\n const old = componentResourceResolutionQueue;\n componentResourceResolutionQueue = new Map();\n return old;\n}\nfunction restoreComponentResolutionQueue(queue) {\n componentDefPendingResolution.clear();\n queue.forEach((_, type) => componentDefPendingResolution.add(type));\n componentResourceResolutionQueue = queue;\n}\nfunction isComponentResourceResolutionQueueEmpty() {\n return componentResourceResolutionQueue.size === 0;\n}\nfunction unwrapResponse(response) {\n return typeof response == 'string' ? response : response.text();\n}\nfunction componentDefResolved(type) {\n componentDefPendingResolution.delete(type);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst _THROW_IF_NOT_FOUND = {};\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\nconst NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';\nconst NG_TOKEN_PATH = 'ngTokenPath';\nconst NEW_LINE = /\\n/gm;\nconst NO_NEW_LINE = 'ɵ';\nconst SOURCE = '__source';\nconst ɵ0$3 = getClosureSafeProperty;\nconst USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ0$3 });\n/**\n * Current injector value used by `inject`.\n * - `undefined`: it is an error to call `inject`\n * - `null`: `inject` can be called but there is no injector (limp-mode).\n * - Injector instance: Use the injector for resolution.\n */\nlet _currentInjector = undefined;\nfunction setCurrentInjector(injector) {\n const former = _currentInjector;\n _currentInjector = injector;\n return former;\n}\nfunction injectInjectorOnly(token, flags = InjectFlags.Default) {\n if (_currentInjector === undefined) {\n throw new Error(`inject() must be called from an injection context`);\n }\n else if (_currentInjector === null) {\n return injectRootLimpMode(token, undefined, flags);\n }\n else {\n return _currentInjector.get(token, flags & InjectFlags.Optional ? null : undefined, flags);\n }\n}\nfunction ɵɵinject(token, flags = InjectFlags.Default) {\n return (getInjectImplementation() || injectInjectorOnly)(resolveForwardRef(token), flags);\n}\n/**\n * Throws an error indicating that a factory function could not be generated by the compiler for a\n * particular class.\n *\n * This instruction allows the actual error message to be optimized away when ngDevMode is turned\n * off, saving bytes of generated code while still providing a good experience in dev mode.\n *\n * The name of the class is not mentioned here, but will be in the generated factory function name\n * and thus in the stack trace.\n *\n * @codeGenApi\n */\nfunction ɵɵinvalidFactoryDep(index) {\n const msg = ngDevMode ?\n `This constructor is not compatible with Angular Dependency Injection because its dependency at index ${index} of the parameter list is invalid.\nThis can happen if the dependency type is a primitive like a string or if an ancestor of this class is missing an Angular decorator.\n\nPlease check that 1) the type for the parameter at index ${index} is correct and 2) the correct Angular decorators are defined for this class and its ancestors.` :\n 'invalid';\n throw new Error(msg);\n}\n/**\n * Injects a token from the currently active injector.\n *\n * Must be used in the context of a factory function such as one defined for an\n * `InjectionToken`. Throws an error if not called from such a context.\n *\n * Within such a factory function, using this function to request injection of a dependency\n * is faster and more type-safe than providing an additional array of dependencies\n * (as has been common with `useFactory` providers).\n *\n * @param token The injection token for the dependency to be injected.\n * @param flags Optional flags that control how injection is executed.\n * The flags correspond to injection strategies that can be specified with\n * parameter decorators `@Host`, `@Self`, `@SkipSef`, and `@Optional`.\n * @returns True if injection is successful, null otherwise.\n *\n * @usageNotes\n *\n * ### Example\n *\n * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}\n *\n * @publicApi\n */\nconst inject = ɵɵinject;\nfunction injectArgs(types) {\n const args = [];\n for (let i = 0; i < types.length; i++) {\n const arg = resolveForwardRef(types[i]);\n if (Array.isArray(arg)) {\n if (arg.length === 0) {\n throw new Error('Arguments array must have arguments.');\n }\n let type = undefined;\n let flags = InjectFlags.Default;\n for (let j = 0; j < arg.length; j++) {\n const meta = arg[j];\n if (meta instanceof Optional || meta.ngMetadataName === 'Optional' || meta === Optional) {\n flags |= InjectFlags.Optional;\n }\n else if (meta instanceof SkipSelf || meta.ngMetadataName === 'SkipSelf' || meta === SkipSelf) {\n flags |= InjectFlags.SkipSelf;\n }\n else if (meta instanceof Self || meta.ngMetadataName === 'Self' || meta === Self) {\n flags |= InjectFlags.Self;\n }\n else if (meta instanceof Inject || meta === Inject) {\n type = meta.token;\n }\n else {\n type = meta;\n }\n }\n args.push(ɵɵinject(type, flags));\n }\n else {\n args.push(ɵɵinject(arg));\n }\n }\n return args;\n}\nfunction catchInjectorError(e, token, injectorErrorName, source) {\n const tokenPath = e[NG_TEMP_TOKEN_PATH];\n if (token[SOURCE]) {\n tokenPath.unshift(token[SOURCE]);\n }\n e.message = formatError('\\n' + e.message, tokenPath, injectorErrorName, source);\n e[NG_TOKEN_PATH] = tokenPath;\n e[NG_TEMP_TOKEN_PATH] = null;\n throw e;\n}\nfunction formatError(text, obj, injectorErrorName, source = null) {\n text = text && text.charAt(0) === '\\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;\n let context = stringify(obj);\n if (Array.isArray(obj)) {\n context = obj.map(stringify).join(' -> ');\n }\n else if (typeof obj === 'object') {\n let parts = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n let value = obj[key];\n parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));\n }\n }\n context = `{${parts.join(', ')}}`;\n }\n return `${injectorErrorName}${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\\n ')}`;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The Trusted Types policy, or null if Trusted Types are not\n * enabled/supported, or undefined if the policy has not been created yet.\n */\nlet policy;\n/**\n * Returns the Trusted Types policy, or null if Trusted Types are not\n * enabled/supported. The first call to this function will create the policy.\n */\nfunction getPolicy() {\n if (policy === undefined) {\n policy = null;\n if (_global.trustedTypes) {\n try {\n policy = _global.trustedTypes.createPolicy('angular', {\n createHTML: (s) => s,\n createScript: (s) => s,\n createScriptURL: (s) => s,\n });\n }\n catch (_a) {\n // trustedTypes.createPolicy throws if called with a name that is\n // already registered, even in report-only mode. Until the API changes,\n // catch the error not to break the applications functionally. In such\n // cases, the code will fall back to using strings.\n }\n }\n }\n return policy;\n}\n/**\n * Unsafely promote a string to a TrustedHTML, falling back to strings when\n * Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will be interpreted as HTML by a browser, e.g. when assigning to\n * element.innerHTML.\n */\nfunction trustedHTMLFromString(html) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createHTML(html)) || html;\n}\n/**\n * Unsafely promote a string to a TrustedScript, falling back to strings when\n * Trusted Types are not available.\n * @security In particular, it must be assured that the provided string will\n * never cause an XSS vulnerability if used in a context that will be\n * interpreted and executed as a script by a browser, e.g. when calling eval.\n */\nfunction trustedScriptFromString(script) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScript(script)) || script;\n}\n/**\n * Unsafely promote a string to a TrustedScriptURL, falling back to strings\n * when Trusted Types are not available.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that the\n * provided string will never cause an XSS vulnerability if used in a context\n * that will cause a browser to load and execute a resource, e.g. when\n * assigning to script.src.\n */\nfunction trustedScriptURLFromString(url) {\n var _a;\n return ((_a = getPolicy()) === null || _a === void 0 ? void 0 : _a.createScriptURL(url)) || url;\n}\n/**\n * Unsafely call the Function constructor with the given string arguments. It\n * is only available in development mode, and should be stripped out of\n * production code.\n * @security This is a security-sensitive function; any use of this function\n * must go through security review. In particular, it must be assured that it\n * is only called from development code, as use in production code can lead to\n * XSS vulnerabilities.\n */\nfunction newTrustedFunctionForDev(...args) {\n if (typeof ngDevMode === 'undefined') {\n throw new Error('newTrustedFunctionForDev should never be called in production');\n }\n if (!_global.trustedTypes) {\n // In environments that don't support Trusted Types, fall back to the most\n // straightforward implementation:\n return new Function(...args);\n }\n // Chrome currently does not support passing TrustedScript to the Function\n // constructor. The following implements the workaround proposed on the page\n // below, where the Chromium bug is also referenced:\n // https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor\n const fnArgs = args.slice(0, -1).join(',');\n const fnBody = args.pop().toString();\n const body = `(function anonymous(${fnArgs}\n) { ${fnBody}\n})`;\n // Using eval directly confuses the compiler and prevents this module from\n // being stripped out of JS binaries even if not used. The global['eval']\n // indirection fixes that.\n const fn = _global['eval'](trustedScriptFromString(body));\n // To completely mimic the behavior of calling \"new Function\", two more\n // things need to happen:\n // 1. Stringifying the resulting function should return its source code\n fn.toString = () => body;\n // 2. When calling the resulting function, `this` should refer to `global`\n return fn.bind(_global);\n // When Trusted Types support in Function constructors is widely available,\n // the implementation of this function can be simplified to:\n // return new Function(...args.map(a => trustedScriptFromString(a)));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass SafeValueImpl {\n constructor(changingThisBreaksApplicationSecurity) {\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n toString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` +\n ` (see https://g.co/ng/security#xss)`;\n }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n getTypeName() {\n return \"HTML\" /* Html */;\n }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n getTypeName() {\n return \"Style\" /* Style */;\n }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n getTypeName() {\n return \"Script\" /* Script */;\n }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"URL\" /* Url */;\n }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n getTypeName() {\n return \"ResourceURL\" /* ResourceUrl */;\n }\n}\nfunction unwrapSafeValue(value) {\n return value instanceof SafeValueImpl ? value.changingThisBreaksApplicationSecurity :\n value;\n}\nfunction allowSanitizationBypassAndThrow(value, type) {\n const actualType = getSanitizationBypassType(value);\n if (actualType != null && actualType !== type) {\n // Allow ResourceURLs in URL contexts, they are strictly more trusted.\n if (actualType === \"ResourceURL\" /* ResourceUrl */ && type === \"URL\" /* Url */)\n return true;\n throw new Error(`Required a safe ${type}, got a ${actualType} (see https://g.co/ng/security#xss)`);\n }\n return actualType === type;\n}\nfunction getSanitizationBypassType(value) {\n return value instanceof SafeValueImpl && value.getTypeName() || null;\n}\n/**\n * Mark `html` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link htmlSanitizer} to be trusted implicitly.\n *\n * @param trustedHtml `html` string which needs to be implicitly trusted.\n * @returns a `html` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustHtml(trustedHtml) {\n return new SafeHtmlImpl(trustedHtml);\n}\n/**\n * Mark `style` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link styleSanitizer} to be trusted implicitly.\n *\n * @param trustedStyle `style` string which needs to be implicitly trusted.\n * @returns a `style` hich has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustStyle(trustedStyle) {\n return new SafeStyleImpl(trustedStyle);\n}\n/**\n * Mark `script` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link scriptSanitizer} to be trusted implicitly.\n *\n * @param trustedScript `script` string which needs to be implicitly trusted.\n * @returns a `script` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustScript(trustedScript) {\n return new SafeScriptImpl(trustedScript);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link urlSanitizer} to be trusted implicitly.\n *\n * @param trustedUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustUrl(trustedUrl) {\n return new SafeUrlImpl(trustedUrl);\n}\n/**\n * Mark `url` string as trusted.\n *\n * This function wraps the trusted string in `String` and brands it in a way which makes it\n * recognizable to {@link resourceUrlSanitizer} to be trusted implicitly.\n *\n * @param trustedResourceUrl `url` string which needs to be implicitly trusted.\n * @returns a `url` which has been branded to be implicitly trusted.\n */\nfunction bypassSanitizationTrustResourceUrl(trustedResourceUrl) {\n return new SafeResourceUrlImpl(trustedResourceUrl);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This helper is used to get hold of an inert tree of DOM elements containing dirty HTML\n * that needs sanitizing.\n * Depending upon browser support we use one of two strategies for doing this.\n * Default: DOMParser strategy\n * Fallback: InertDocument strategy\n */\nfunction getInertBodyHelper(defaultDoc) {\n return isDOMParserAvailable() ? new DOMParserHelper() : new InertDocumentHelper(defaultDoc);\n}\n/**\n * Uses DOMParser to create and fill an inert body element.\n * This is the default strategy used in browsers that support it.\n */\nclass DOMParserHelper {\n getInertBodyElement(html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the\n // `` tag. Note that the `` tag is closed implicitly to prevent unclosed tags\n // in `html` from consuming the otherwise explicit `` tag.\n html = '' + html;\n try {\n const body = new window.DOMParser()\n .parseFromString(trustedHTMLFromString(html), 'text/html')\n .body;\n body.removeChild(body.firstChild);\n return body;\n }\n catch (_a) {\n return null;\n }\n }\n}\n/**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the fallback strategy if the browser does not support DOMParser.\n */\nclass InertDocumentHelper {\n constructor(defaultDoc) {\n this.defaultDoc = defaultDoc;\n this.inertDocument = this.defaultDoc.implementation.createHTMLDocument('sanitization-inert');\n if (this.inertDocument.body == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so\n // we need to create one.\n const inertHtml = this.inertDocument.createElement('html');\n this.inertDocument.appendChild(inertHtml);\n const inertBodyElement = this.inertDocument.createElement('body');\n inertHtml.appendChild(inertBodyElement);\n }\n }\n getInertBodyElement(html) {\n // Prefer using